xref: /openbmc/google-ipmi-sys/handler.hpp (revision ff3cd8e9)
1 // Copyright 2021 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #pragma once
16 
17 #include <cstdint>
18 #include <ipmid/api-types.hpp>
19 #include <map>
20 #include <span>
21 #include <string>
22 #include <tuple>
23 #include <vector>
24 
25 namespace google
26 {
27 namespace ipmi
28 {
29 
30 using Resp = ::ipmi::RspType<std::uint8_t, std::vector<uint8_t>>;
31 
32 using VersionTuple =
33     std::tuple<std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t>;
34 
35 class HandlerInterface
36 {
37   public:
38     virtual ~HandlerInterface() = default;
39 
40     /**
41      * Return ethernet details (hard-coded).
42      *
43      * @return tuple of ethernet details (channel, if name).
44      */
45     virtual std::tuple<std::uint8_t, std::string>
46         getEthDetails(std::string intf) const = 0;
47 
48     /**
49      * Return the value of rx_packets, given a if_name.
50      *
51      * @param[in] name, the interface name.
52      * @return the number of packets received.
53      * @throw IpmiException on failure.
54      */
55     virtual std::int64_t getRxPackets(const std::string& name) const = 0;
56 
57     /**
58      * Return the values from a cpld version file.
59      *
60      * @param[in] id - the cpld id number.
61      * @return the quad of numbers as a tuple (maj,min,pt,subpt)
62      * @throw IpmiException on failure.
63      */
64     virtual VersionTuple getCpldVersion(unsigned int id) const = 0;
65 
66     /**
67      * Set the PSU Reset delay.
68      *
69      * @param[in] delay - delay in seconds.
70      * @throw IpmiException on failure.
71      */
72     virtual void psuResetDelay(std::uint32_t delay) const = 0;
73 
74     /**
75      * Arm for PSU reset on host shutdown.
76      *
77      * @throw IpmiException on failure.
78      */
79     virtual void psuResetOnShutdown() const = 0;
80 
81     /**
82      * Return the entity name.
83      * On the first call to this method it'll build the list of entities.
84      * @todo Consider moving the list building to construction time (and ignore
85      * failures).
86      *
87      * @param[in] id - the entity id value
88      * @param[in] instance - the entity instance
89      * @return the entity's name
90      * @throw IpmiException on failure.
91      */
92     virtual std::string getEntityName(std::uint8_t id,
93                                       std::uint8_t instance) = 0;
94 
95     /**
96      * Return the flash size of bmc chip.
97      *
98      * @return the flash size of bmc chip
99      * @throw IpmiException on failure.
100      */
101     virtual uint32_t getFlashSize() = 0;
102 
103     /**
104      * Return the name of the machine, parsed from release information.
105      *
106      * @return the machine name
107      * @throw IpmiException on failure.
108      */
109     virtual std::string getMachineName() = 0;
110 
111     /**
112      * Populate the i2c-pcie mapping vector.
113      */
114     virtual void buildI2cPcieMapping() = 0;
115 
116     /**
117      * Return the size of the i2c-pcie mapping vector.
118      *
119      * @return the size of the vector holding the i2c-pcie mapping tuples.
120      */
121     virtual size_t getI2cPcieMappingSize() const = 0;
122 
123     /**
124      * Return a copy of the entry in the vector.
125      *
126      * @param[in] entry - the index into the vector.
127      * @return the tuple at that index.
128      */
129     virtual std::tuple<std::uint32_t, std::string>
130         getI2cEntry(unsigned int entry) const = 0;
131 
132     /**
133      * Set the Host Power Off delay.
134      *
135      * @param[in] delay - delay in seconds.
136      * @throw IpmiException on failure.
137      */
138     virtual void hostPowerOffDelay(std::uint32_t delay) const = 0;
139 };
140 
141 } // namespace ipmi
142 } // namespace google
143