blob: 26950e93cc15b6b9c4a2d4dfb22bdae4925c5798 [file] [log] [blame]
Willy Tua2056e92021-10-10 13:36:16 -07001// 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
Patrick Venturef085d912019-03-15 08:50:00 -070015#pragma once
16
17#include <cstdint>
Willy Tuff3cd8e2021-09-14 22:49:55 -070018#include <ipmid/api-types.hpp>
Patrick Ventureab650002019-03-16 09:08:47 -070019#include <map>
Willy Tuff3cd8e2021-09-14 22:49:55 -070020#include <span>
Patrick Venturef085d912019-03-15 08:50:00 -070021#include <string>
22#include <tuple>
Patrick Venture49f23ad2019-03-16 11:59:55 -070023#include <vector>
Patrick Venturef085d912019-03-15 08:50:00 -070024
25namespace google
26{
27namespace ipmi
28{
29
Willy Tuff3cd8e2021-09-14 22:49:55 -070030using Resp = ::ipmi::RspType<std::uint8_t, std::vector<uint8_t>>;
31
Patrick Venturebb90d4f2019-03-15 13:42:06 -070032using VersionTuple =
33 std::tuple<std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t>;
34
Patrick Venturef085d912019-03-15 08:50:00 -070035class 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 */
William A. Kennington IIIb69209b2021-07-13 13:22:24 -070045 virtual std::tuple<std::uint8_t, std::string>
46 getEthDetails(std::string intf) const = 0;
Patrick Ventured2037c62019-03-15 10:29:47 -070047
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;
Patrick Venturebb90d4f2019-03-15 13:42:06 -070056
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;
Patrick Ventureaa374122019-03-15 15:09:10 -070065
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;
Patrick Venture07f85152019-03-15 21:36:56 -070073
74 /**
Shounak Mitraac4a16f2021-02-02 11:11:44 -080075 * Arm for PSU reset on host shutdown.
76 *
77 * @throw IpmiException on failure.
78 */
79 virtual void psuResetOnShutdown() const = 0;
80
81 /**
Patrick Venture07f85152019-03-15 21:36:56 -070082 * 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;
Patrick Venture49f23ad2019-03-16 11:59:55 -070094
95 /**
Willy Tu3b1b4272021-03-02 17:58:10 -080096 * 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 /**
William A. Kennington III29f35bc2020-11-03 23:30:31 -0800104 * 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 /**
Patrick Venture49f23ad2019-03-16 11:59:55 -0700112 * 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;
linyuny8cfa4c42021-06-16 13:53:08 -0700131
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;
Patrick Venturef085d912019-03-15 08:50:00 -0700139};
140
Patrick Venturef085d912019-03-15 08:50:00 -0700141} // namespace ipmi
142} // namespace google