storagehandler: move Add SEL to new API
Rewrite "Add SEL Entry" command to use the newly
introduced IPMI provider API.
Tested:
Verified the behavior to be same as previous change.
ipmitool raw 0x0a 0x44 1 0 0xff 4 5 6 7 8 9 0 1 2 3 4 5 6
05 06
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Change-Id: I49bad876a209fb55f1b5b635b5a4ded425d33af0
diff --git a/storagehandler.cpp b/storagehandler.cpp
index 3923621..a490235 100644
--- a/storagehandler.cpp
+++ b/storagehandler.cpp
@@ -29,7 +29,7 @@
unsigned int g_sel_time = 0xFFFFFFFF;
extern const ipmi::sensor::IdInfoMap sensors;
extern const FruMap frus;
-
+constexpr uint8_t eventDataSize = 3;
namespace
{
constexpr auto TIME_INTERFACE = "xyz.openbmc_project.Time.EpochTime";
@@ -582,44 +582,45 @@
return rc;
}
-ipmi_ret_t ipmi_storage_add_sel(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- ipmi_request_t request,
- ipmi_response_t response,
- ipmi_data_len_t data_len,
- ipmi_context_t context)
+/** @brief implements the Add SEL entry command
+ * @request
+ *
+ * - recordID ID used for SEL Record access
+ * - recordType Record Type
+ * - timeStamp Time when event was logged. LS byte first
+ * - generatorID software ID if event was generated from
+ * system software
+ * - evmRev event message format version
+ * - sensorType sensor type code for service that generated
+ * the event
+ * - sensorNumber number of sensors that generated the event
+ * - eventDir event dir
+ * - eventData event data field contents
+ *
+ * @returns ipmi completion code plus response data
+ * - RecordID of the Added SEL entry
+ */
+ipmi::RspType<uint16_t // recordID of the Added SEL entry
+ >
+ ipmiStorageAddSEL(uint16_t recordID, uint8_t recordType, uint32_t timeStamp,
+ uint16_t generatorID, uint8_t evmRev, uint8_t sensorType,
+ uint8_t sensorNumber, uint8_t eventDir,
+ std::array<uint8_t, eventDataSize> eventData)
{
- if (*data_len != sizeof(ipmi_add_sel_request_t))
- {
- *data_len = 0;
- return IPMI_CC_REQ_DATA_LEN_INVALID;
- }
-
- ipmi_ret_t rc = IPMI_CC_OK;
- ipmi_add_sel_request_t* p = (ipmi_add_sel_request_t*)request;
- uint16_t recordid;
-
// Per the IPMI spec, need to cancel the reservation when a SEL entry is
// added
cancelSELReservation();
-
- recordid = ((uint16_t)p->eventdata[1] << 8) | p->eventdata[2];
-
- *data_len = sizeof(recordid);
-
- // Pack the actual response
- std::memcpy(response, &p->eventdata[1], 2);
-
// Hostboot sends SEL with OEM record type 0xDE to indicate that there is
// a maintenance procedure associated with eSEL record.
static constexpr auto procedureType = 0xDE;
- if (p->recordtype == procedureType)
+ if (recordType == procedureType)
{
// In the OEM record type 0xDE, byte 11 in the SEL record indicate the
// procedure number.
- createProcedureLogEntry(p->sensortype);
+ createProcedureLogEntry(sensorType);
}
- return rc;
+ return ipmi::responseSuccess(recordID);
}
/** @brief implements the get FRU Inventory Area Info command
@@ -767,8 +768,10 @@
ipmi::Privilege::Operator, deleteSELEntry);
// <Add SEL Entry>
- ipmi_register_callback(NETFUN_STORAGE, IPMI_CMD_ADD_SEL, NULL,
- ipmi_storage_add_sel, PRIVILEGE_OPERATOR);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage,
+ ipmi::storage::cmdAddSelEntry,
+ ipmi::Privilege::Operator, ipmiStorageAddSEL);
+
// <Clear SEL>
ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage,
ipmi::storage::cmdClearSel, ipmi::Privilege::Operator,
diff --git a/storagehandler.hpp b/storagehandler.hpp
index 4754bf6..9ec87cb 100644
--- a/storagehandler.hpp
+++ b/storagehandler.hpp
@@ -22,20 +22,6 @@
};
-struct ipmi_add_sel_request_t
-{
-
- uint8_t recordid[2];
- uint8_t recordtype;
- uint8_t timestamp[4];
- uint8_t generatorid[2];
- uint8_t evmrev;
- uint8_t sensortype;
- uint8_t sensornumber;
- uint8_t eventdir;
- uint8_t eventdata[3];
-};
-
/**
* @struct Read FRU Data command request data
*/