firmware-update: move fw update mode to new API
Rewrite exit firmware update mode" command to use new api
Tested:
verified using ipmitool raw command
1.command output before code modifications
ipmitool raw 0x08 0x28
Unable to send RAW command (channel=0x0 netfn=0x8 lun=0x0 cmd=0x28
rsp=0xcc):
Invalid data field in request
2.command output after code modifications
ipmitool raw 0x08 0x28
Unable to send RAW command (channel=0x0 netfn=0x8 lun=0x0 cmd=0x28
rsp=0xcc):
Invalid data field in request
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Change-Id: I3f33b2d87e9088007f4283985970e7e8ca1afe4e
diff --git a/src/firmware-update.cpp b/src/firmware-update.cpp
index f9cd153..50726e2 100644
--- a/src/firmware-update.cpp
+++ b/src/firmware-update.cpp
@@ -349,20 +349,23 @@
return ipmi::responseSuccess();
}
-static ipmi_ret_t ipmi_firmware_exit_fw_update_mode(
- 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 exit firmware update mode command
+ * @param None
+ *
+ * @returns IPMI completion code
+ */
+ipmi::RspType<> ipmiFirmwareExitFwUpdateMode()
{
- if (DEBUG)
- std::cerr << "Exit FW update mode\n";
- *data_len = 0;
- ipmi_ret_t rc = IPMI_CC_OK;
+ if (DEBUG)
+ {
+ std::cerr << "Exit FW update mode \n";
+ }
switch (fw_update_status.state())
{
case fw_update_status_cache::FW_STATE_INIT:
case fw_update_status_cache::FW_STATE_IDLE:
- rc = IPMI_CC_INVALID_FIELD_REQUEST;
+ return ipmi::responseInvalidFieldRequest();
break;
case fw_update_status_cache::FW_STATE_DOWNLOAD:
case fw_update_status_cache::FW_STATE_VERIFY:
@@ -373,15 +376,11 @@
case fw_update_status_cache::FW_STATE_ERROR:
break;
case fw_update_status_cache::FW_STATE_AC_CYCLE_REQUIRED:
- rc = IPMI_CC_INVALID_FIELD_REQUEST;
+ return ipmi::responseInvalidFieldRequest();
break;
}
- if (rc == IPMI_CC_OK)
- {
- fw_update_status.firmwareUpdateAbortState();
- }
-
- return rc;
+ fw_update_status.firmwareUpdateAbortState();
+ return ipmi::responseSuccess();
}
static void post_transfer_complete_handler(
@@ -1655,7 +1654,7 @@
static constexpr ipmi_cmd_t IPMI_CMD_FW_GET_ROOT_CERT_DATA = 0x25;
static constexpr ipmi_cmd_t IPMI_CMD_FW_GET_FW_UPDATE_RAND_NUM = 0x26;
static constexpr ipmi_cmd_t IPMI_CMD_FW_SET_FW_UPDATE_MODE = 0x27;
-static constexpr ipmi_cmd_t IPMI_CMD_FW_EXIT_FW_UPDATE_MODE = 0x28;
+static constexpr ipmi_cmd_t cmdFirmwareExitFirmwareUpdateMode = 0x28;
static constexpr ipmi_cmd_t IPMI_CMD_FW_UPDATE_CONTROL = 0x29;
static constexpr ipmi_cmd_t IPMI_CMD_FW_GET_STATUS = 0x2a;
static constexpr ipmi_cmd_t IPMI_CMD_FW_SET_FW_UPDATE_OPTIONS = 0x2b;
@@ -1720,9 +1719,9 @@
ipmi::Privilege::Admin, ipmiSetFirmwareUpdateMode);
// exit firmware update mode
- ipmi_register_callback(NETFUN_FIRMWARE, IPMI_CMD_FW_EXIT_FW_UPDATE_MODE,
- NULL, ipmi_firmware_exit_fw_update_mode,
- PRIVILEGE_ADMIN);
+ ipmi::registerHandler(ipmi::prioOemBase, ipmi::netFnFirmware,
+ cmdFirmwareExitFirmwareUpdateMode,
+ ipmi::Privilege::Admin, ipmiFirmwareExitFwUpdateMode);
// firmware control mechanism (set filename, usb, etc.)
ipmi_register_callback(NETFUN_FIRMWARE, IPMI_CMD_FW_UPDATE_CONTROL, NULL,