Gilbert Chen | 77e6fe7 | 2024-08-06 09:23:30 +0000 | [diff] [blame] | 1 | #pragma once |
| 2 | |
| 3 | #include "libpldm/platform.h" |
| 4 | #include "libpldm/pldm.h" |
| 5 | |
| 6 | #include "common/types.hpp" |
| 7 | #include "numeric_sensor.hpp" |
| 8 | #include "pldmd/dbus_impl_requester.hpp" |
| 9 | #include "requester/handler.hpp" |
| 10 | #include "terminus.hpp" |
| 11 | #include "terminus_manager.hpp" |
| 12 | |
| 13 | namespace pldm |
| 14 | { |
| 15 | namespace platform_mc |
| 16 | { |
| 17 | |
| 18 | /** |
| 19 | * @brief EventManager |
| 20 | * |
| 21 | * This class manages PLDM events from terminus. The function includes providing |
| 22 | * the API for process event data and using phosphor-logging API to log the |
| 23 | * event. |
| 24 | * |
| 25 | */ |
| 26 | class EventManager |
| 27 | { |
| 28 | public: |
| 29 | EventManager() = delete; |
| 30 | EventManager(const EventManager&) = delete; |
| 31 | EventManager(EventManager&&) = delete; |
| 32 | EventManager& operator=(const EventManager&) = delete; |
| 33 | EventManager& operator=(EventManager&&) = delete; |
| 34 | virtual ~EventManager() = default; |
| 35 | |
| 36 | explicit EventManager(TerminusManager& terminusManager, |
| 37 | TerminiMapper& termini) : |
| 38 | terminusManager(terminusManager), termini(termini) {}; |
| 39 | |
| 40 | /** @brief Handle platform event |
| 41 | * |
| 42 | * @param[in] tid - tid where the event is from |
| 43 | * @param[in] eventId - event Id |
| 44 | * @param[in] eventClass - event class |
| 45 | * @param[in] eventData - event data |
| 46 | * @param[in] eventDataSize - size of event data |
| 47 | * @return PLDM completion code |
| 48 | */ |
| 49 | int handlePlatformEvent(pldm_tid_t tid, uint16_t eventId, |
| 50 | uint8_t eventClass, const uint8_t* eventData, |
| 51 | size_t eventDataSize); |
| 52 | |
| 53 | /** @brief Set available state of terminus for pldm request. |
| 54 | * |
| 55 | * @param[in] tid - terminus ID |
| 56 | * @param[in] state - Terminus available state for PLDM request messages |
| 57 | */ |
| 58 | void updateAvailableState(pldm_tid_t tid, Availability state) |
| 59 | { |
| 60 | availableState[tid] = state; |
| 61 | }; |
| 62 | |
| 63 | /** @brief Get available state of terminus for pldm request. |
| 64 | * |
| 65 | * @param[in] tid - terminus ID |
| 66 | */ |
| 67 | bool getAvailableState(pldm_tid_t tid) |
| 68 | { |
| 69 | if (!availableState.contains(tid)) |
| 70 | { |
| 71 | return false; |
| 72 | } |
| 73 | return availableState[tid]; |
| 74 | }; |
| 75 | |
| 76 | protected: |
| 77 | /** @brief Helper method to process the PLDM Numeric sensor event class |
| 78 | * |
| 79 | * @param[in] tid - tid where the event is from |
| 80 | * @param[in] sensorId - Sensor ID which is the source of event |
| 81 | * @param[in] sensorData - Numeric sensor event data |
| 82 | * @param[in] sensorDataLength - event data length |
| 83 | * |
| 84 | * @return PLDM completion code |
| 85 | */ |
| 86 | int processNumericSensorEvent(pldm_tid_t tid, uint16_t sensorId, |
| 87 | const uint8_t* sensorData, |
| 88 | size_t sensorDataLength); |
| 89 | |
Thu Nguyen | 9fc7912 | 2024-09-10 10:15:01 +0000 | [diff] [blame^] | 90 | /** @brief Helper method to process the PLDM CPER event class |
| 91 | * |
| 92 | * @param[in] tid - tid where the event is from |
| 93 | * @param[in] eventId - Event ID which is the source of event |
| 94 | * @param[in] eventData - CPER event data |
| 95 | * @param[in] eventDataSize - event data length |
| 96 | * |
| 97 | * @return PLDM completion code |
| 98 | */ |
| 99 | int processCperEvent(pldm_tid_t tid, uint16_t eventId, |
| 100 | const uint8_t* eventData, const size_t eventDataSize); |
| 101 | |
| 102 | /** @brief Helper method to create CPER dump log |
| 103 | * |
| 104 | * @param[in] dataType - CPER event data type |
| 105 | * @param[in] dataPath - CPER event data fault log file path |
| 106 | * @param[in] typeName - Terminus name which creates CPER event |
| 107 | * |
| 108 | * @return PLDM completion code |
| 109 | */ |
| 110 | int createCperDumpEntry(const std::string& dataType, |
| 111 | const std::string& dataPath, |
| 112 | const std::string& typeName); |
| 113 | |
Gilbert Chen | 77e6fe7 | 2024-08-06 09:23:30 +0000 | [diff] [blame] | 114 | /** @brief Reference of terminusManager */ |
| 115 | TerminusManager& terminusManager; |
| 116 | |
| 117 | /** @brief List of discovered termini */ |
| 118 | TerminiMapper& termini; |
| 119 | |
| 120 | /** @brief Available state for pldm request of terminus */ |
| 121 | std::unordered_map<pldm_tid_t, Availability> availableState; |
| 122 | }; |
| 123 | } // namespace platform_mc |
| 124 | } // namespace pldm |