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