forked from Nuvoton-Israel/nuvoton-ipmi-oem
/
ipmi_fw.hpp
71 lines (60 loc) · 1.93 KB
/
ipmi_fw.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#pragma once
#include <ipmid/api.hpp>
namespace ipmi
{
namespace nuvoton
{
enum class FirmwareType : uint8_t
{
BIOS = 0,
CPLD = 1,
BMC = 2,
PSU = 3,
SCM_CPLD = 7,
};
enum class FirmwareTarget : uint8_t
{
PSU = 0x11,
};
enum class FirmwareAction : uint8_t
{
ACTIVE = 1,
ABORT = 2,
STATUS = 3,
};
template <typename Enumeration>
constexpr auto as_int(Enumeration const value) ->
typename std::underlying_type<Enumeration>::type
{
return static_cast<typename std::underlying_type<Enumeration>::type>(value);
}
int fw_open_i2c(std::string i2c_bus);
std::string exec(const char* cmd);
namespace psu
{
int read_fw_info(int i2cdev, int address, uint8_t image, std::string& ver,
uint8_t* active);
int getPsuVersionInfo(ipmi::Context::ptr& ctx, std::string& ver);
void startflashPsu(sdbusplus::bus::bus& bus);
void subscribeToSystemdSignals(sdbusplus::bus::bus& bus);
void unsubscribeFromSystemdSignals(sdbusplus::bus::bus& bus);
ipmi::RspType<uint8_t> ipmiOemPsuFwUpdate(uint8_t region, uint8_t action,
std::string image);
ipmi::RspType<std::vector<uint8_t>>
masterPhase(bool isPrivateBus, uint3_t busId, uint4_t channelNum,
bool reserved, uint7_t slaveAddr, uint8_t phase,
uint8_t readCount, std::vector<uint8_t> writeData);
} // namespace psu
namespace cpld
{
int getCpldVersionInfo(ipmi::Context::ptr& ctx, std::string& ver,
uint8_t fw_type);
} // namespace cpld
ipmi::RspType<std::vector<uint8_t>>
masterMuxWR(bool isPrivateBus, uint4_t busId, uint3_t reserved, bool resrv1,
uint7_t muxSlaveAddr1, uint3_t channelNum1, uint5_t resrv2,
bool secondMux, uint7_t muxSlaveAddr2, uint3_t channelNum2,
uint5_t resrv3, bool resrv4, uint7_t slaveAddr,
uint8_t readCount, std::vector<uint8_t> writeData);
} // namespace nuvoton
} // namespace ipmi