xref: /openbmc/google-ipmi-sys/handler.hpp (revision a2056e9c)
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 <map>
19 #include <string>
20 #include <tuple>
21 #include <vector>
22 
23 namespace google
24 {
25 namespace ipmi
26 {
27 
28 using VersionTuple =
29     std::tuple<std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t>;
30 
31 class HandlerInterface
32 {
33   public:
34     virtual ~HandlerInterface() = default;
35 
36     /**
37      * Return ethernet details (hard-coded).
38      *
39      * @return tuple of ethernet details (channel, if name).
40      */
41     virtual std::tuple<std::uint8_t, std::string>
42         getEthDetails(std::string intf) const = 0;
43 
44     /**
45      * Return the value of rx_packets, given a if_name.
46      *
47      * @param[in] name, the interface name.
48      * @return the number of packets received.
49      * @throw IpmiException on failure.
50      */
51     virtual std::int64_t getRxPackets(const std::string& name) const = 0;
52 
53     /**
54      * Return the values from a cpld version file.
55      *
56      * @param[in] id - the cpld id number.
57      * @return the quad of numbers as a tuple (maj,min,pt,subpt)
58      * @throw IpmiException on failure.
59      */
60     virtual VersionTuple getCpldVersion(unsigned int id) const = 0;
61 
62     /**
63      * Set the PSU Reset delay.
64      *
65      * @param[in] delay - delay in seconds.
66      * @throw IpmiException on failure.
67      */
68     virtual void psuResetDelay(std::uint32_t delay) const = 0;
69 
70     /**
71      * Arm for PSU reset on host shutdown.
72      *
73      * @throw IpmiException on failure.
74      */
75     virtual void psuResetOnShutdown() const = 0;
76 
77     /**
78      * Return the entity name.
79      * On the first call to this method it'll build the list of entities.
80      * @todo Consider moving the list building to construction time (and ignore
81      * failures).
82      *
83      * @param[in] id - the entity id value
84      * @param[in] instance - the entity instance
85      * @return the entity's name
86      * @throw IpmiException on failure.
87      */
88     virtual std::string getEntityName(std::uint8_t id,
89                                       std::uint8_t instance) = 0;
90 
91     /**
92      * Return the flash size of bmc chip.
93      *
94      * @return the flash size of bmc chip
95      * @throw IpmiException on failure.
96      */
97     virtual uint32_t getFlashSize() = 0;
98 
99     /**
100      * Return the name of the machine, parsed from release information.
101      *
102      * @return the machine name
103      * @throw IpmiException on failure.
104      */
105     virtual std::string getMachineName() = 0;
106 
107     /**
108      * Populate the i2c-pcie mapping vector.
109      */
110     virtual void buildI2cPcieMapping() = 0;
111 
112     /**
113      * Return the size of the i2c-pcie mapping vector.
114      *
115      * @return the size of the vector holding the i2c-pcie mapping tuples.
116      */
117     virtual size_t getI2cPcieMappingSize() const = 0;
118 
119     /**
120      * Return a copy of the entry in the vector.
121      *
122      * @param[in] entry - the index into the vector.
123      * @return the tuple at that index.
124      */
125     virtual std::tuple<std::uint32_t, std::string>
126         getI2cEntry(unsigned int entry) const = 0;
127 
128     /**
129      * Set the Host Power Off delay.
130      *
131      * @param[in] delay - delay in seconds.
132      * @throw IpmiException on failure.
133      */
134     virtual void hostPowerOffDelay(std::uint32_t delay) const = 0;
135 };
136 
137 } // namespace ipmi
138 } // namespace google
139