xref: /openbmc/pldm/platform-mc/manager.cpp (revision 5028734c01ff46d2ebb091227bb11b515a95fdb8)
16c7fed4cSGilbert Chen #include "manager.hpp"
26c7fed4cSGilbert Chen 
36c7fed4cSGilbert Chen #include <phosphor-logging/lg2.hpp>
46c7fed4cSGilbert Chen 
56c7fed4cSGilbert Chen PHOSPHOR_LOG2_USING;
66c7fed4cSGilbert Chen 
76c7fed4cSGilbert Chen namespace pldm
86c7fed4cSGilbert Chen {
96c7fed4cSGilbert Chen namespace platform_mc
106c7fed4cSGilbert Chen {
beforeDiscoverTerminus()116c7fed4cSGilbert Chen exec::task<int> Manager::beforeDiscoverTerminus()
126c7fed4cSGilbert Chen {
136c7fed4cSGilbert Chen     // Add any setup or checks needed before discovering a terminus
146c7fed4cSGilbert Chen     // If any setup/check fails, return the appropriate error code
156c7fed4cSGilbert Chen     // For now, we assume everything is successful
166c7fed4cSGilbert Chen     co_return PLDM_SUCCESS;
176c7fed4cSGilbert Chen }
186c7fed4cSGilbert Chen 
afterDiscoverTerminus()196c7fed4cSGilbert Chen exec::task<int> Manager::afterDiscoverTerminus()
206c7fed4cSGilbert Chen {
216c7fed4cSGilbert Chen     auto rc = co_await platformManager.initTerminus();
226c7fed4cSGilbert Chen     if (rc != PLDM_SUCCESS)
236c7fed4cSGilbert Chen     {
246c7fed4cSGilbert Chen         lg2::error("Failed to initialize platform manager, error {RC}", "RC",
256c7fed4cSGilbert Chen                    rc);
266c7fed4cSGilbert Chen     }
276c7fed4cSGilbert Chen     else
286c7fed4cSGilbert Chen     {
296c7fed4cSGilbert Chen         lg2::info("Successfully initialized platform manager");
306c7fed4cSGilbert Chen     }
316c7fed4cSGilbert Chen     co_return rc;
326c7fed4cSGilbert Chen }
336c7fed4cSGilbert Chen 
pollForPlatformEvent(pldm_tid_t tid,uint16_t,uint32_t pollDataTransferHandle)34f48015b3SDung Cao exec::task<int> Manager::pollForPlatformEvent(
35f48015b3SDung Cao     pldm_tid_t tid, uint16_t /* pollEventId */, uint32_t pollDataTransferHandle)
36f48015b3SDung Cao {
37f48015b3SDung Cao     auto it = termini.find(tid);
38f48015b3SDung Cao     if (it != termini.end())
39f48015b3SDung Cao     {
40f48015b3SDung Cao         auto& terminus = it->second;
41f48015b3SDung Cao         co_await eventManager.pollForPlatformEventTask(tid,
42f48015b3SDung Cao                                                        pollDataTransferHandle);
43f48015b3SDung Cao         terminus->pollEvent = false;
44f48015b3SDung Cao     }
45f48015b3SDung Cao     co_return PLDM_SUCCESS;
46f48015b3SDung Cao }
47f48015b3SDung Cao 
oemPollForPlatformEvent(pldm_tid_t tid)48*5028734cSDung Cao exec::task<int> Manager::oemPollForPlatformEvent(pldm_tid_t tid)
49*5028734cSDung Cao {
50*5028734cSDung Cao     for (auto& handler : pollHandlers)
51*5028734cSDung Cao     {
52*5028734cSDung Cao         if (handler)
53*5028734cSDung Cao         {
54*5028734cSDung Cao             co_await handler(tid);
55*5028734cSDung Cao         }
56*5028734cSDung Cao     }
57*5028734cSDung Cao     co_return PLDM_SUCCESS;
58*5028734cSDung Cao }
596c7fed4cSGilbert Chen } // namespace platform_mc
606c7fed4cSGilbert Chen } // namespace pldm
61