blob: 15b615f3602a74ea6eb672097f46bfedef51b6dd [file] [log] [blame]
Chau Lya743e382024-10-26 11:12:22 +00001#pragma once
2
3#include "libpldm/pldm.h"
4
5#include "common/instance_id.hpp"
6#include "common/types.hpp"
7#include "oem_event_manager.hpp"
8#include "platform-mc/manager.hpp"
9#include "requester/handler.hpp"
10#include "requester/request.hpp"
11
12namespace pldm
13{
14namespace oem_ampere
15{
16using namespace pldm::pdr;
17
18using EventToMsgMap_t = std::unordered_map<uint8_t, std::string>;
19
20enum sensor_ids
21{
22 BOOT_OVERALL = 175,
23};
24
25namespace boot
26{
27namespace status
28{
29enum boot_status
30{
31 BOOT_STATUS_SUCCESS = 0x80,
32 BOOT_STATUS_FAILURE = 0x81,
33};
34} // namespace status
35namespace stage
36{
37enum boot_stage
38{
39 UEFI_STATUS_CLASS_CODE_MIN = 0x00,
40 UEFI_STATUS_CLASS_CODE_MAX = 0x7f,
41 SECPRO = 0x90,
42 MPRO = 0x91,
43 ATF_BL1 = 0x92,
44 ATF_BL2 = 0x93,
45 DDR_INITIALIZATION = 0x94,
46 DDR_TRAINING = 0x95,
47 S0_DDR_TRAINING_FAILURE = 0x96,
48 ATF_BL31 = 0x97,
49 ATF_BL32 = 0x98,
50 S1_DDR_TRAINING_FAILURE = 0x99,
51};
52} // namespace stage
53} // namespace boot
54
55enum class log_level : int
56{
57 OK,
58 BIOSFWPANIC,
59};
60
61/**
62 * @brief OemEventManager
63 *
64 *
65 */
66class OemEventManager
67{
68 public:
69 OemEventManager() = delete;
70 OemEventManager(const OemEventManager&) = delete;
71 OemEventManager(OemEventManager&&) = delete;
72 OemEventManager& operator=(const OemEventManager&) = delete;
73 OemEventManager& operator=(OemEventManager&&) = delete;
74 virtual ~OemEventManager() = default;
75
76 explicit OemEventManager(
77 sdeventplus::Event& event,
78 requester::Handler<requester::Request>* /* handler */,
79 pldm::InstanceIdDb& /* instanceIdDb */) : event(event) {};
80
81 /** @brief Decode sensor event messages and handle correspondingly.
82 *
83 * @param[in] request - the request message of sensor event
84 * @param[in] payloadLength - the payload length of sensor event
85 * @param[in] formatVersion - the format version of sensor event
86 * @param[in] tid - TID
87 * @param[in] eventDataOffset - the event data offset of sensor event
88 *
89 * @return int - returned error code
90 */
91 int handleSensorEvent(const pldm_msg* request, size_t payloadLength,
92 uint8_t /* formatVersion */, pldm_tid_t tid,
93 size_t eventDataOffset);
94
95 protected:
96 /** @brief Create prefix string for logging message.
97 *
98 * @param[in] tid - TID
99 * @param[in] sensorId - Sensor ID
100 *
101 * @return std::string - the prefeix string
102 */
103 std::string prefixMsgStrCreation(pldm_tid_t tid, uint16_t sensorId);
104
105 /** @brief Log the message into Redfish SEL.
106 *
107 * @param[in] description - the logging message
108 * @param[in] logLevel - the logging level
109 */
110 void sendJournalRedfish(const std::string& description,
111 log_level& logLevel);
112
113 /** @brief Convert the one-hot DIMM index byte into a string of DIMM
114 * indexes.
115 *
116 * @param[in] dimmIdxs - the one-hot DIMM index byte
117 *
118 * @return std::string - the string of DIMM indexes
119 */
120 std::string dimmIdxsToString(uint32_t dimmIdxs);
121
122 /** @brief Handle numeric sensor event message from boot overall sensor.
123 *
124 * @param[in] tid - TID
125 * @param[in] sensorId - Sensor ID
126 * @param[in] presentReading - the present reading of the sensor
127 */
128 void handleBootOverallEvent(pldm_tid_t /*tid*/, uint16_t /*sensorId*/,
129 uint32_t presentReading);
130
131 /** @brief Handle numeric sensor event messages.
132 *
133 * @param[in] tid - TID
134 * @param[in] sensorId - Sensor ID
135 * @param[in] sensorData - the sensor data
136 * @param[in] sensorDataLength - the length of sensor data
137 *
138 * @return int - returned error code
139 */
140 int processNumericSensorEvent(pldm_tid_t tid, uint16_t sensorId,
141 const uint8_t* sensorData,
142 size_t sensorDataLength);
143
144 /** @brief Handle state sensor event messages.
145 *
146 * @param[in] tid - TID
147 * @param[in] sensorId - Sensor ID
148 * @param[in] sensorData - the sensor data
149 * @param[in] sensorDataLength - the length of sensor data
150 *
151 * @return int - returned error code
152 */
153 int processStateSensorEvent(pldm_tid_t tid, uint16_t sensorId,
154 const uint8_t* sensorData,
155 size_t sensorDataLength);
156
157 /** @brief Handle op state sensor event messages.
158 *
159 * @param[in] tid - TID
160 * @param[in] sensorId - Sensor ID
161 * @param[in] sensorData - the sensor data
162 * @param[in] sensorDataLength - the length of sensor data
163 *
164 * @return int - returned error code
165 */
166 int processSensorOpStateEvent(pldm_tid_t tid, uint16_t sensorId,
167 const uint8_t* sensorData,
168 size_t sensorDataLength);
169
170 /** @brief reference of main event loop of pldmd, primarily used to schedule
171 * work
172 */
173 sdeventplus::Event& event;
174};
175} // namespace oem_ampere
176} // namespace pldm