1aea5dde1SSampa Misra #include "oem_ibm_handler.hpp"
2aea5dde1SSampa Misra 
3aea5dde1SSampa Misra #include "libpldm/entity.h"
4bb585b28SVarsha Kaverappa #include "libpldm/requester/pldm.h"
5aea5dde1SSampa Misra 
6*cfdbca75SSagar Srinivas #include "file_io_type_lid.hpp"
7*cfdbca75SSagar Srinivas #include "libpldmresponder/file_io.hpp"
878a225a2SSagar Srinivas #include "libpldmresponder/pdr_utils.hpp"
9aea5dde1SSampa Misra namespace pldm
10aea5dde1SSampa Misra {
11aea5dde1SSampa Misra namespace responder
12aea5dde1SSampa Misra {
13aea5dde1SSampa Misra namespace oem_ibm_platform
14aea5dde1SSampa Misra {
15aea5dde1SSampa Misra 
16aea5dde1SSampa Misra int pldm::responder::oem_ibm_platform::Handler::
17aea5dde1SSampa Misra     getOemStateSensorReadingsHandler(
18aea5dde1SSampa Misra         EntityType entityType, EntityInstance entityInstance,
19aea5dde1SSampa Misra         StateSetId stateSetId, CompositeCount compSensorCnt,
20aea5dde1SSampa Misra         std::vector<get_sensor_state_field>& stateField)
21aea5dde1SSampa Misra {
22aea5dde1SSampa Misra     int rc = PLDM_SUCCESS;
23aea5dde1SSampa Misra     stateField.clear();
24aea5dde1SSampa Misra 
25aea5dde1SSampa Misra     for (size_t i = 0; i < compSensorCnt; i++)
26aea5dde1SSampa Misra     {
27aea5dde1SSampa Misra         uint8_t sensorOpState{};
2878a225a2SSagar Srinivas         if (entityType == PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE &&
29aea5dde1SSampa Misra             stateSetId == PLDM_OEM_IBM_BOOT_STATE)
30aea5dde1SSampa Misra         {
31aea5dde1SSampa Misra             sensorOpState = fetchBootSide(entityInstance, codeUpdate);
32aea5dde1SSampa Misra         }
33aea5dde1SSampa Misra         else
34aea5dde1SSampa Misra         {
35aea5dde1SSampa Misra             rc = PLDM_PLATFORM_INVALID_STATE_VALUE;
36aea5dde1SSampa Misra             break;
37aea5dde1SSampa Misra         }
38aea5dde1SSampa Misra         stateField.push_back({PLDM_SENSOR_ENABLED, PLDM_SENSOR_UNKNOWN,
39aea5dde1SSampa Misra                               PLDM_SENSOR_UNKNOWN, sensorOpState});
40aea5dde1SSampa Misra     }
41aea5dde1SSampa Misra     return rc;
42aea5dde1SSampa Misra }
43aea5dde1SSampa Misra 
44aea5dde1SSampa Misra int pldm::responder::oem_ibm_platform::Handler::
45aea5dde1SSampa Misra     oemSetStateEffecterStatesHandler(
46aea5dde1SSampa Misra         EntityType entityType, EntityInstance entityInstance,
47aea5dde1SSampa Misra         StateSetId stateSetId, CompositeCount compEffecterCnt,
48aea5dde1SSampa Misra         const std::vector<set_effecter_state_field>& stateField)
49aea5dde1SSampa Misra {
50aea5dde1SSampa Misra     int rc = PLDM_SUCCESS;
51aea5dde1SSampa Misra 
52aea5dde1SSampa Misra     for (uint8_t currState = 0; currState < compEffecterCnt; ++currState)
53aea5dde1SSampa Misra     {
54aea5dde1SSampa Misra         if (stateField[currState].set_request == PLDM_REQUEST_SET)
55aea5dde1SSampa Misra         {
5678a225a2SSagar Srinivas             if (entityType == PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE &&
57aea5dde1SSampa Misra                 stateSetId == PLDM_OEM_IBM_BOOT_STATE)
58aea5dde1SSampa Misra             {
59aea5dde1SSampa Misra                 rc = setBootSide(entityInstance, currState, stateField,
60aea5dde1SSampa Misra                                  codeUpdate);
61aea5dde1SSampa Misra             }
62*cfdbca75SSagar Srinivas             else if (entityType == PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE &&
63*cfdbca75SSagar Srinivas                      stateSetId == PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE)
64*cfdbca75SSagar Srinivas             {
65*cfdbca75SSagar Srinivas                 if (stateField[currState].effecter_state ==
66*cfdbca75SSagar Srinivas                     uint8_t(CodeUpdateState::START))
67*cfdbca75SSagar Srinivas                 {
68*cfdbca75SSagar Srinivas                     codeUpdate->setCodeUpdateProgress(true);
69*cfdbca75SSagar Srinivas                     rc = codeUpdate->setRequestedApplyTime();
70*cfdbca75SSagar Srinivas                 }
71*cfdbca75SSagar Srinivas                 else if (stateField[currState].effecter_state ==
72*cfdbca75SSagar Srinivas                          uint8_t(CodeUpdateState::END))
73*cfdbca75SSagar Srinivas                 {
74*cfdbca75SSagar Srinivas                     codeUpdate->setCodeUpdateProgress(false);
75*cfdbca75SSagar Srinivas                 }
76*cfdbca75SSagar Srinivas                 else if (stateField[currState].effecter_state ==
77*cfdbca75SSagar Srinivas                          uint8_t(CodeUpdateState::ABORT))
78*cfdbca75SSagar Srinivas                 {
79*cfdbca75SSagar Srinivas                     codeUpdate->setCodeUpdateProgress(false);
80*cfdbca75SSagar Srinivas                     codeUpdate->clearDirPath(LID_STAGING_DIR);
81*cfdbca75SSagar Srinivas                 }
82*cfdbca75SSagar Srinivas                 else if (stateField[currState].effecter_state ==
83*cfdbca75SSagar Srinivas                          uint8_t(CodeUpdateState::ACCEPT))
84*cfdbca75SSagar Srinivas                 {
85*cfdbca75SSagar Srinivas                     // TODO Set new Dbus property provided by code update app
86*cfdbca75SSagar Srinivas                 }
87*cfdbca75SSagar Srinivas                 else if (stateField[currState].effecter_state ==
88*cfdbca75SSagar Srinivas                          uint8_t(CodeUpdateState::REJECT))
89*cfdbca75SSagar Srinivas                 {
90*cfdbca75SSagar Srinivas                     // TODO Set new Dbus property provided by code update app
91*cfdbca75SSagar Srinivas                 }
92*cfdbca75SSagar Srinivas             }
93aea5dde1SSampa Misra             else
94aea5dde1SSampa Misra             {
95aea5dde1SSampa Misra                 rc = PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE;
96aea5dde1SSampa Misra             }
97aea5dde1SSampa Misra         }
98aea5dde1SSampa Misra         if (rc != PLDM_SUCCESS)
99aea5dde1SSampa Misra         {
100aea5dde1SSampa Misra             break;
101aea5dde1SSampa Misra         }
102aea5dde1SSampa Misra     }
103aea5dde1SSampa Misra     return rc;
104aea5dde1SSampa Misra }
105aea5dde1SSampa Misra 
10678a225a2SSagar Srinivas void buildAllCodeUpdateEffecterPDR(platform::Handler* platformHandler,
10778a225a2SSagar Srinivas                                    uint16_t entityInstance, uint16_t stateSetID,
10878a225a2SSagar Srinivas                                    pdr_utils::Repo& repo)
10978a225a2SSagar Srinivas {
11078a225a2SSagar Srinivas     size_t pdrSize = 0;
11178a225a2SSagar Srinivas     pdrSize = sizeof(pldm_state_effecter_pdr) +
11278a225a2SSagar Srinivas               sizeof(state_effecter_possible_states);
11378a225a2SSagar Srinivas     std::vector<uint8_t> entry{};
11478a225a2SSagar Srinivas     entry.resize(pdrSize);
11578a225a2SSagar Srinivas     pldm_state_effecter_pdr* pdr =
11678a225a2SSagar Srinivas         reinterpret_cast<pldm_state_effecter_pdr*>(entry.data());
11778a225a2SSagar Srinivas     if (!pdr)
11878a225a2SSagar Srinivas     {
11978a225a2SSagar Srinivas         std::cerr << "Failed to get record by PDR type, ERROR:"
12078a225a2SSagar Srinivas                   << PLDM_PLATFORM_INVALID_EFFECTER_ID << std::endl;
12178a225a2SSagar Srinivas     }
12278a225a2SSagar Srinivas     pdr->hdr.record_handle = 0;
12378a225a2SSagar Srinivas     pdr->hdr.version = 1;
12478a225a2SSagar Srinivas     pdr->hdr.type = PLDM_STATE_EFFECTER_PDR;
12578a225a2SSagar Srinivas     pdr->hdr.record_change_num = 0;
12678a225a2SSagar Srinivas     pdr->hdr.length = sizeof(pldm_state_effecter_pdr) - sizeof(pldm_pdr_hdr);
12778a225a2SSagar Srinivas     pdr->terminus_handle = pdr::BmcPldmTerminusHandle;
12878a225a2SSagar Srinivas     pdr->effecter_id = platformHandler->getNextEffecterId();
12978a225a2SSagar Srinivas     pdr->entity_type = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
13078a225a2SSagar Srinivas     pdr->entity_instance = entityInstance;
13178a225a2SSagar Srinivas     pdr->container_id = 0;
13278a225a2SSagar Srinivas     pdr->effecter_semantic_id = 0;
13378a225a2SSagar Srinivas     pdr->effecter_init = PLDM_NO_INIT;
13478a225a2SSagar Srinivas     pdr->has_description_pdr = false;
13578a225a2SSagar Srinivas     pdr->composite_effecter_count = 1;
13678a225a2SSagar Srinivas 
13778a225a2SSagar Srinivas     auto* possibleStatesPtr = pdr->possible_states;
13878a225a2SSagar Srinivas     auto possibleStates =
13978a225a2SSagar Srinivas         reinterpret_cast<state_effecter_possible_states*>(possibleStatesPtr);
14078a225a2SSagar Srinivas     possibleStates->state_set_id = stateSetID;
14178a225a2SSagar Srinivas     possibleStates->possible_states_size = 2;
14278a225a2SSagar Srinivas     auto state =
14378a225a2SSagar Srinivas         reinterpret_cast<state_effecter_possible_states*>(possibleStates);
14478a225a2SSagar Srinivas     if (stateSetID == PLDM_OEM_IBM_BOOT_STATE)
14578a225a2SSagar Srinivas         state->states[0].byte = 6;
14678a225a2SSagar Srinivas     else if (stateSetID == PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE)
14778a225a2SSagar Srinivas         state->states[0].byte = 126;
14878a225a2SSagar Srinivas     pldm::responder::pdr_utils::PdrEntry pdrEntry{};
14978a225a2SSagar Srinivas     pdrEntry.data = entry.data();
15078a225a2SSagar Srinivas     pdrEntry.size = pdrSize;
15178a225a2SSagar Srinivas     repo.addRecord(pdrEntry);
15278a225a2SSagar Srinivas }
15378a225a2SSagar Srinivas 
15478a225a2SSagar Srinivas void buildAllCodeUpdateSensorPDR(platform::Handler* platformHandler,
15578a225a2SSagar Srinivas                                  uint16_t entityInstance, uint16_t stateSetID,
15678a225a2SSagar Srinivas                                  pdr_utils::Repo& repo)
15778a225a2SSagar Srinivas {
15878a225a2SSagar Srinivas     size_t pdrSize = 0;
15978a225a2SSagar Srinivas     pdrSize =
16078a225a2SSagar Srinivas         sizeof(pldm_state_sensor_pdr) + sizeof(state_sensor_possible_states);
16178a225a2SSagar Srinivas     std::vector<uint8_t> entry{};
16278a225a2SSagar Srinivas     entry.resize(pdrSize);
16378a225a2SSagar Srinivas     pldm_state_sensor_pdr* pdr =
16478a225a2SSagar Srinivas         reinterpret_cast<pldm_state_sensor_pdr*>(entry.data());
16578a225a2SSagar Srinivas     if (!pdr)
16678a225a2SSagar Srinivas     {
16778a225a2SSagar Srinivas         std::cerr << "Failed to get record by PDR type, ERROR:"
16878a225a2SSagar Srinivas                   << PLDM_PLATFORM_INVALID_SENSOR_ID << std::endl;
16978a225a2SSagar Srinivas     }
17078a225a2SSagar Srinivas     pdr->hdr.record_handle = 0;
17178a225a2SSagar Srinivas     pdr->hdr.version = 1;
17278a225a2SSagar Srinivas     pdr->hdr.type = PLDM_STATE_SENSOR_PDR;
17378a225a2SSagar Srinivas     pdr->hdr.record_change_num = 0;
17478a225a2SSagar Srinivas     pdr->hdr.length = sizeof(pldm_state_sensor_pdr) - sizeof(pldm_pdr_hdr);
17578a225a2SSagar Srinivas     pdr->terminus_handle = pdr::BmcPldmTerminusHandle;
17678a225a2SSagar Srinivas     pdr->sensor_id = platformHandler->getNextSensorId();
17778a225a2SSagar Srinivas     pdr->entity_type = PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER;
17878a225a2SSagar Srinivas     pdr->entity_instance = entityInstance;
17978a225a2SSagar Srinivas     pdr->container_id = 0;
18078a225a2SSagar Srinivas     pdr->sensor_init = PLDM_NO_INIT;
18178a225a2SSagar Srinivas     pdr->sensor_auxiliary_names_pdr = false;
18278a225a2SSagar Srinivas     pdr->composite_sensor_count = 1;
18378a225a2SSagar Srinivas 
18478a225a2SSagar Srinivas     auto* possibleStatesPtr = pdr->possible_states;
18578a225a2SSagar Srinivas     auto possibleStates =
18678a225a2SSagar Srinivas         reinterpret_cast<state_sensor_possible_states*>(possibleStatesPtr);
18778a225a2SSagar Srinivas     possibleStates->state_set_id = stateSetID;
18878a225a2SSagar Srinivas     possibleStates->possible_states_size = 2;
18978a225a2SSagar Srinivas     auto state =
19078a225a2SSagar Srinivas         reinterpret_cast<state_sensor_possible_states*>(possibleStates);
19178a225a2SSagar Srinivas     if (stateSetID == PLDM_OEM_IBM_BOOT_STATE)
19278a225a2SSagar Srinivas         state->states[0].byte = 6;
19378a225a2SSagar Srinivas     else if (stateSetID == PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE)
19478a225a2SSagar Srinivas         state->states[0].byte = 126;
19578a225a2SSagar Srinivas     pldm::responder::pdr_utils::PdrEntry pdrEntry{};
19678a225a2SSagar Srinivas     pdrEntry.data = entry.data();
19778a225a2SSagar Srinivas     pdrEntry.size = pdrSize;
19878a225a2SSagar Srinivas     repo.addRecord(pdrEntry);
19978a225a2SSagar Srinivas }
20078a225a2SSagar Srinivas 
20178a225a2SSagar Srinivas void pldm::responder::oem_ibm_platform::Handler::buildOEMPDR(
20278a225a2SSagar Srinivas     pdr_utils::Repo& repo)
20378a225a2SSagar Srinivas {
20478a225a2SSagar Srinivas     buildAllCodeUpdateEffecterPDR(platformHandler, ENTITY_INSTANCE_0,
20578a225a2SSagar Srinivas                                   PLDM_OEM_IBM_BOOT_STATE, repo);
20678a225a2SSagar Srinivas     buildAllCodeUpdateEffecterPDR(platformHandler, ENTITY_INSTANCE_1,
20778a225a2SSagar Srinivas                                   PLDM_OEM_IBM_BOOT_STATE, repo);
20878a225a2SSagar Srinivas     buildAllCodeUpdateEffecterPDR(platformHandler, ENTITY_INSTANCE_0,
20978a225a2SSagar Srinivas                                   PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE, repo);
21078a225a2SSagar Srinivas 
21178a225a2SSagar Srinivas     buildAllCodeUpdateSensorPDR(platformHandler, ENTITY_INSTANCE_0,
21278a225a2SSagar Srinivas                                 PLDM_OEM_IBM_BOOT_STATE, repo);
21378a225a2SSagar Srinivas     buildAllCodeUpdateSensorPDR(platformHandler, ENTITY_INSTANCE_1,
21478a225a2SSagar Srinivas                                 PLDM_OEM_IBM_BOOT_STATE, repo);
21578a225a2SSagar Srinivas     buildAllCodeUpdateSensorPDR(platformHandler, ENTITY_INSTANCE_0,
21678a225a2SSagar Srinivas                                 PLDM_OEM_IBM_FIRMWARE_UPDATE_STATE, repo);
21778a225a2SSagar Srinivas }
21878a225a2SSagar Srinivas 
219aea5dde1SSampa Misra void pldm::responder::oem_ibm_platform::Handler::setPlatformHandler(
220aea5dde1SSampa Misra     pldm::responder::platform::Handler* handler)
221aea5dde1SSampa Misra {
222aea5dde1SSampa Misra     platformHandler = handler;
223aea5dde1SSampa Misra }
224aea5dde1SSampa Misra 
225bb585b28SVarsha Kaverappa int pldm::responder::oem_ibm_platform::Handler::sendEventToHost(
226bb585b28SVarsha Kaverappa     std::vector<uint8_t>& requestMsg)
227bb585b28SVarsha Kaverappa {
228bb585b28SVarsha Kaverappa     uint8_t* responseMsg = nullptr;
229bb585b28SVarsha Kaverappa     size_t responseMsgSize{};
230bb585b28SVarsha Kaverappa     if (requestMsg.size())
231bb585b28SVarsha Kaverappa     {
232bb585b28SVarsha Kaverappa         std::ostringstream tempStream;
233bb585b28SVarsha Kaverappa         for (int byte : requestMsg)
234bb585b28SVarsha Kaverappa         {
235bb585b28SVarsha Kaverappa             tempStream << std::setfill('0') << std::setw(2) << std::hex << byte
236bb585b28SVarsha Kaverappa                        << " ";
237bb585b28SVarsha Kaverappa         }
238bb585b28SVarsha Kaverappa         std::cout << tempStream.str() << std::endl;
239bb585b28SVarsha Kaverappa     }
240bb585b28SVarsha Kaverappa 
241bb585b28SVarsha Kaverappa     auto requesterRc =
242bb585b28SVarsha Kaverappa         pldm_send_recv(mctp_eid, mctp_fd, requestMsg.data(), requestMsg.size(),
243bb585b28SVarsha Kaverappa                        &responseMsg, &responseMsgSize);
244bb585b28SVarsha Kaverappa     std::unique_ptr<uint8_t, decltype(std::free)*> responseMsgPtr{responseMsg,
245bb585b28SVarsha Kaverappa                                                                   std::free};
246bb585b28SVarsha Kaverappa     if (requesterRc != PLDM_REQUESTER_SUCCESS)
247bb585b28SVarsha Kaverappa     {
248bb585b28SVarsha Kaverappa         std::cerr << "Failed to send message/receive response. RC = "
249bb585b28SVarsha Kaverappa                   << requesterRc << ", errno = " << errno
250bb585b28SVarsha Kaverappa                   << "for sending event to host \n";
251bb585b28SVarsha Kaverappa         return requesterRc;
252bb585b28SVarsha Kaverappa     }
253bb585b28SVarsha Kaverappa     uint8_t completionCode{};
254bb585b28SVarsha Kaverappa     uint8_t status{};
255bb585b28SVarsha Kaverappa     auto responsePtr = reinterpret_cast<struct pldm_msg*>(responseMsgPtr.get());
256bb585b28SVarsha Kaverappa     auto rc = decode_platform_event_message_resp(
257bb585b28SVarsha Kaverappa         responsePtr, responseMsgSize - sizeof(pldm_msg_hdr), &completionCode,
258bb585b28SVarsha Kaverappa         &status);
259bb585b28SVarsha Kaverappa 
260bb585b28SVarsha Kaverappa     if (rc != PLDM_SUCCESS || completionCode != PLDM_SUCCESS)
261bb585b28SVarsha Kaverappa     {
262bb585b28SVarsha Kaverappa         std::cerr << "Failure in decode platform event message response, rc= "
263bb585b28SVarsha Kaverappa                   << rc << " cc=" << static_cast<unsigned>(completionCode)
264bb585b28SVarsha Kaverappa                   << "\n";
265bb585b28SVarsha Kaverappa         return rc;
266bb585b28SVarsha Kaverappa     }
267bb585b28SVarsha Kaverappa     std::cout << "returning rc= " << rc << " from sendEventToHost \n";
268bb585b28SVarsha Kaverappa 
269bb585b28SVarsha Kaverappa     return rc;
270bb585b28SVarsha Kaverappa }
271bb585b28SVarsha Kaverappa 
272bb585b28SVarsha Kaverappa void pldm::responder::oem_ibm_platform::Handler::sendStateSensorEvent(
273bb585b28SVarsha Kaverappa     uint16_t sensorId, enum sensor_event_class_states sensorEventClass,
274bb585b28SVarsha Kaverappa     uint8_t sensorOffset, uint8_t eventState, uint8_t prevEventState)
275bb585b28SVarsha Kaverappa {
276bb585b28SVarsha Kaverappa 
277bb585b28SVarsha Kaverappa     std::vector<uint8_t> sensorEventDataVec{};
278bb585b28SVarsha Kaverappa     size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
279bb585b28SVarsha Kaverappa     sensorEventDataVec.resize(sensorEventSize);
280bb585b28SVarsha Kaverappa     auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
281bb585b28SVarsha Kaverappa         sensorEventDataVec.data());
282bb585b28SVarsha Kaverappa     eventData->sensor_id = sensorId;
283bb585b28SVarsha Kaverappa     eventData->sensor_event_class_type = sensorEventClass;
284bb585b28SVarsha Kaverappa     auto eventClassStart = eventData->event_class;
285bb585b28SVarsha Kaverappa     auto eventClass =
286bb585b28SVarsha Kaverappa         reinterpret_cast<struct pldm_sensor_event_state_sensor_state*>(
287bb585b28SVarsha Kaverappa             eventClassStart);
288bb585b28SVarsha Kaverappa     eventClass->sensor_offset = sensorOffset;
289bb585b28SVarsha Kaverappa     eventClass->event_state = eventState;
290bb585b28SVarsha Kaverappa     eventClass->previous_event_state = prevEventState;
291bb585b28SVarsha Kaverappa     auto instanceId = requester.getInstanceId(mctp_eid);
292bb585b28SVarsha Kaverappa     std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
293bb585b28SVarsha Kaverappa                                     PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
294bb585b28SVarsha Kaverappa                                     sensorEventDataVec.size());
295bb585b28SVarsha Kaverappa     auto rc = encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg,
296bb585b28SVarsha Kaverappa                              instanceId);
297bb585b28SVarsha Kaverappa     if (rc != PLDM_SUCCESS)
298bb585b28SVarsha Kaverappa     {
299bb585b28SVarsha Kaverappa         std::cerr << "Failed to encode state sensor event, rc = " << rc
300bb585b28SVarsha Kaverappa                   << std::endl;
301bb585b28SVarsha Kaverappa         return;
302bb585b28SVarsha Kaverappa     }
303bb585b28SVarsha Kaverappa     rc = sendEventToHost(requestMsg);
304bb585b28SVarsha Kaverappa     if (rc != PLDM_SUCCESS)
305bb585b28SVarsha Kaverappa     {
306bb585b28SVarsha Kaverappa         std::cerr << "Failed to send event to host: "
307bb585b28SVarsha Kaverappa                   << "rc=" << rc << std::endl;
308bb585b28SVarsha Kaverappa     }
309bb585b28SVarsha Kaverappa     requester.markFree(mctp_eid, instanceId);
310bb585b28SVarsha Kaverappa     return;
311bb585b28SVarsha Kaverappa }
312bb585b28SVarsha Kaverappa 
313bb585b28SVarsha Kaverappa int encodeEventMsg(uint8_t eventType, const std::vector<uint8_t>& eventDataVec,
314bb585b28SVarsha Kaverappa                    std::vector<uint8_t>& requestMsg, uint8_t instanceId)
315bb585b28SVarsha Kaverappa {
316bb585b28SVarsha Kaverappa     auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
317bb585b28SVarsha Kaverappa 
318bb585b28SVarsha Kaverappa     auto rc = encode_platform_event_message_req(
319bb585b28SVarsha Kaverappa         instanceId, 1 /*formatVersion*/, pldm::responder::pdr::BmcTerminusId,
320bb585b28SVarsha Kaverappa         eventType, eventDataVec.data(), eventDataVec.size(), request,
321bb585b28SVarsha Kaverappa         eventDataVec.size() + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES);
322bb585b28SVarsha Kaverappa 
323bb585b28SVarsha Kaverappa     return rc;
324bb585b28SVarsha Kaverappa }
325bb585b28SVarsha Kaverappa 
326aea5dde1SSampa Misra } // namespace oem_ibm_platform
327aea5dde1SSampa Misra 
328aea5dde1SSampa Misra } // namespace responder
329aea5dde1SSampa Misra 
330aea5dde1SSampa Misra } // namespace pldm
331