1*aea5dde1SSampa Misra #include "oem_ibm_handler.hpp"
2*aea5dde1SSampa Misra 
3*aea5dde1SSampa Misra #include "libpldm/entity.h"
4*aea5dde1SSampa Misra 
5*aea5dde1SSampa Misra namespace pldm
6*aea5dde1SSampa Misra {
7*aea5dde1SSampa Misra 
8*aea5dde1SSampa Misra namespace responder
9*aea5dde1SSampa Misra {
10*aea5dde1SSampa Misra 
11*aea5dde1SSampa Misra namespace oem_ibm_platform
12*aea5dde1SSampa Misra {
13*aea5dde1SSampa Misra 
14*aea5dde1SSampa Misra int pldm::responder::oem_ibm_platform::Handler::
15*aea5dde1SSampa Misra     getOemStateSensorReadingsHandler(
16*aea5dde1SSampa Misra         EntityType entityType, EntityInstance entityInstance,
17*aea5dde1SSampa Misra         StateSetId stateSetId, CompositeCount compSensorCnt,
18*aea5dde1SSampa Misra         std::vector<get_sensor_state_field>& stateField)
19*aea5dde1SSampa Misra {
20*aea5dde1SSampa Misra     int rc = PLDM_SUCCESS;
21*aea5dde1SSampa Misra     stateField.clear();
22*aea5dde1SSampa Misra 
23*aea5dde1SSampa Misra     for (size_t i = 0; i < compSensorCnt; i++)
24*aea5dde1SSampa Misra     {
25*aea5dde1SSampa Misra         uint8_t sensorOpState{};
26*aea5dde1SSampa Misra         if (entityType == PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER &&
27*aea5dde1SSampa Misra             stateSetId == PLDM_OEM_IBM_BOOT_STATE)
28*aea5dde1SSampa Misra         {
29*aea5dde1SSampa Misra             sensorOpState = fetchBootSide(entityInstance, codeUpdate);
30*aea5dde1SSampa Misra         }
31*aea5dde1SSampa Misra         else
32*aea5dde1SSampa Misra         {
33*aea5dde1SSampa Misra             rc = PLDM_PLATFORM_INVALID_STATE_VALUE;
34*aea5dde1SSampa Misra             break;
35*aea5dde1SSampa Misra         }
36*aea5dde1SSampa Misra         stateField.push_back({PLDM_SENSOR_ENABLED, PLDM_SENSOR_UNKNOWN,
37*aea5dde1SSampa Misra                               PLDM_SENSOR_UNKNOWN, sensorOpState});
38*aea5dde1SSampa Misra     }
39*aea5dde1SSampa Misra     return rc;
40*aea5dde1SSampa Misra }
41*aea5dde1SSampa Misra 
42*aea5dde1SSampa Misra int pldm::responder::oem_ibm_platform::Handler::
43*aea5dde1SSampa Misra     oemSetStateEffecterStatesHandler(
44*aea5dde1SSampa Misra         EntityType entityType, EntityInstance entityInstance,
45*aea5dde1SSampa Misra         StateSetId stateSetId, CompositeCount compEffecterCnt,
46*aea5dde1SSampa Misra         const std::vector<set_effecter_state_field>& stateField)
47*aea5dde1SSampa Misra {
48*aea5dde1SSampa Misra     int rc = PLDM_SUCCESS;
49*aea5dde1SSampa Misra 
50*aea5dde1SSampa Misra     for (uint8_t currState = 0; currState < compEffecterCnt; ++currState)
51*aea5dde1SSampa Misra     {
52*aea5dde1SSampa Misra         if (stateField[currState].set_request == PLDM_REQUEST_SET)
53*aea5dde1SSampa Misra         {
54*aea5dde1SSampa Misra             if (entityType == PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER &&
55*aea5dde1SSampa Misra                 stateSetId == PLDM_OEM_IBM_BOOT_STATE)
56*aea5dde1SSampa Misra             {
57*aea5dde1SSampa Misra                 rc = setBootSide(entityInstance, currState, stateField,
58*aea5dde1SSampa Misra                                  codeUpdate);
59*aea5dde1SSampa Misra             }
60*aea5dde1SSampa Misra             else
61*aea5dde1SSampa Misra             {
62*aea5dde1SSampa Misra                 rc = PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE;
63*aea5dde1SSampa Misra             }
64*aea5dde1SSampa Misra         }
65*aea5dde1SSampa Misra         if (rc != PLDM_SUCCESS)
66*aea5dde1SSampa Misra         {
67*aea5dde1SSampa Misra             break;
68*aea5dde1SSampa Misra         }
69*aea5dde1SSampa Misra     }
70*aea5dde1SSampa Misra     return rc;
71*aea5dde1SSampa Misra }
72*aea5dde1SSampa Misra 
73*aea5dde1SSampa Misra void pldm::responder::oem_ibm_platform::Handler::setPlatformHandler(
74*aea5dde1SSampa Misra     pldm::responder::platform::Handler* handler)
75*aea5dde1SSampa Misra {
76*aea5dde1SSampa Misra     platformHandler = handler;
77*aea5dde1SSampa Misra }
78*aea5dde1SSampa Misra 
79*aea5dde1SSampa Misra } // namespace oem_ibm_platform
80*aea5dde1SSampa Misra 
81*aea5dde1SSampa Misra } // namespace responder
82*aea5dde1SSampa Misra 
83*aea5dde1SSampa Misra } // namespace pldm
84