blob: 00d8b90d992512a259b9d6727fcbc3230f0ded28 [file] [log] [blame]
Chau Lya743e382024-10-26 11:12:22 +00001#pragma once
2#include "../../common/utils.hpp"
3#include "../../libpldmresponder/base.hpp"
4#include "../../libpldmresponder/bios.hpp"
5#include "../../libpldmresponder/fru.hpp"
6#include "../../libpldmresponder/platform.hpp"
7#include "../../oem/ampere/event/oem_event_manager.hpp"
8#include "../../platform-mc/manager.hpp"
9#include "../../pldmd/invoker.hpp"
10#include "../../requester/request.hpp"
11
12namespace pldm
13{
14namespace oem_ampere
15{
16
17/**
18 * @class OemAMPERE
19 *
20 * @brief class for creating all the OEM AMPERE handlers
21 *
22 * Only in case of OEM_AMPERE this class object will be instantiated
23 */
24class OemAMPERE
25{
26 public:
27 OemAMPERE() = delete;
28 OemAMPERE& operator=(const OemAMPERE&) = delete;
29 OemAMPERE(OemAMPERE&&) = delete;
30 OemAMPERE& operator=(OemAMPERE&&) = delete;
31
32 public:
33 /** Constructs OemAMPERE object
34 *
35 * @param[in] dBusIntf - D-Bus handler
36 * @param[in] mctp_fd - fd of MCTP communications socket
37 * @param[in] mctp_eid - MCTP EID of remote host firmware
38 * @param[in] repo - pointer to BMC's primary PDR repo
39 * @param[in] instanceIdDb - pointer to an InstanceIdDb object
40 * @param[in] event - sd_event handler
41 * @param[in] invoker - invoker handler
42 * @param[in] hostPDRHandler - hostPDRHandler handler
43 * @param[in] platformHandler - platformHandler handler
44 * @param[in] fruHandler - fruHandler handler
45 * @param[in] baseHandler - baseHandler handler
46 * @param[in] biosHandler - biosHandler handler
47 * @param[in] reqHandler - reqHandler handler
48 */
49 explicit OemAMPERE(
50 const pldm::utils::DBusHandler* /* dBusIntf */, int /* mctp_fd */,
51 pldm_pdr* /* repo */, pldm::InstanceIdDb& instanceIdDb,
52 sdeventplus::Event& event, responder::Invoker& /* invoker */,
53 HostPDRHandler* /* hostPDRHandler */,
54 responder::platform::Handler* platformHandler,
55 responder::fru::Handler* /* fruHandler */,
56 responder::base::Handler* /* baseHandler */,
57 responder::bios::Handler* /* biosHandler */,
58 platform_mc::Manager* /* platformManager */,
59 pldm::requester::Handler<pldm::requester::Request>* reqHandler) :
60 instanceIdDb(instanceIdDb), event(event),
61 platformHandler(platformHandler), reqHandler(reqHandler)
62 {
63 oemEventManager = std::make_shared<oem_ampere::OemEventManager>(
64 this->event, this->reqHandler, this->instanceIdDb);
65 createOemEventHandler(oemEventManager);
66 }
67
68 private:
69 /** @brief Method for creating OemEventManager
70 *
71 * This method also assigns the OemEventManager to the below
72 * different handlers.
73 */
74 void createOemEventHandler(
75 std::shared_ptr<oem_ampere::OemEventManager> oemEventManager)
76 {
77 platformHandler->registerEventHandlers(
78 PLDM_SENSOR_EVENT,
79 {[&oemEventManager](const pldm_msg* request, size_t payloadLength,
80 uint8_t formatVersion, uint8_t tid,
81 size_t eventDataOffset) {
82 return oemEventManager->handleSensorEvent(
83 request, payloadLength, formatVersion, tid,
84 eventDataOffset);
85 }});
86 }
87
88 private:
89 /** @brief reference to an Instance ID database object, used to obtain PLDM
90 * instance IDs
91 */
92 pldm::InstanceIdDb& instanceIdDb;
93
94 /** @brief reference of main event loop of pldmd, primarily used to schedule
95 * work
96 */
97 sdeventplus::Event& event;
98
99 /** @brief Platform handler*/
100 responder::platform::Handler* platformHandler = nullptr;
101
102 /** @brief pointer to the requester class*/
103 requester::Handler<requester::Request>* reqHandler = nullptr;
104
105 std::shared_ptr<oem_ampere::OemEventManager> oemEventManager{};
106};
107
108} // namespace oem_ampere
109} // namespace pldm