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