firmware-update:move update status api to new API
Rewrite Get Firmware update status to new IPMI provider APIs.
Tested:
verified using ipmitool raw command.
ipmitool raw 0x8 0x2a //command
00 00 00 //response
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Change-Id: Ie75858006adbbb9eeb933016e7b50a0741b93b90
diff --git a/src/firmware-update.cpp b/src/firmware-update.cpp
index f18afaf..cd7bb81 100644
--- a/src/firmware-update.cpp
+++ b/src/firmware-update.cpp
@@ -17,6 +17,7 @@
#include <filesystem>
#include <fstream>
#include <iostream>
+#include <ipmid/api.hpp>
#include <map>
#include <random>
#include <sdbusplus/bus.hpp>
@@ -1375,37 +1376,33 @@
return rc;
}
-struct fw_update_status_response
-{
- uint8_t status;
- uint8_t percent;
- uint8_t check;
-} __attribute__((packed));
+/** @brief implements firmware get status command
+ * @parameter
+ * - none
+ * @returns IPMI completion code plus response data
+ * - status - processing status
+ * - percentage - percentage completion
+ * - check - channel integrity check status
+ **/
+ipmi::RspType<uint8_t, // status
+ uint8_t, // percentage
+ uint8_t // check
+ >
+ ipmiFrmwareGetStatus()
-static ipmi_ret_t ipmi_firmware_get_status(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)
{
if (DEBUG)
std::cerr << "Get FW update status\n";
-
// Byte 1 - status (0=init, 1=idle, 2=download, 3=validate, 4=write,
// 5=ready, f=error, 83=ac cycle required)
// Byte 2 - percent
// Byte 3 - integrity check status (0=none, 1=req, 2=sha2ok, e2=sha2fail)
-
- auto fw_status =
- reinterpret_cast<struct fw_update_status_response *>(response);
-
- fw_status->status = fw_update_status.state();
- fw_status->percent = fw_update_status.percent();
- fw_status->check = xfer_hash_check ? xfer_hash_check->status() : 0;
+ uint8_t status = fw_update_status.state();
+ uint8_t percent = fw_update_status.percent();
+ uint8_t check = xfer_hash_check ? xfer_hash_check->status() : 0;
// Status code.
- *data_len = sizeof(*fw_status);
- return IPMI_CC_OK;
+ return ipmi::responseSuccess(status, percent, check);
}
static constexpr uint8_t FW_UPDATE_OPTIONS_NO_DOWNREV = (1 << 0);
@@ -1843,9 +1840,9 @@
ipmi_firmware_control, PRIVILEGE_ADMIN);
// get firmware update status
- ipmi_register_callback(NETFUN_FIRMWARE, IPMI_CMD_FW_GET_STATUS, NULL,
- ipmi_firmware_get_status, PRIVILEGE_ADMIN);
-
+ ipmi::registerHandler(ipmi::prioOemBase, NETFUN_FIRMWARE,
+ IPMI_CMD_FW_GET_STATUS, ipmi::Privilege::Admin,
+ ipmiFrmwareGetStatus);
// set firmware update options (no downgrade, etc.)
ipmi_register_callback(NETFUN_FIRMWARE, IPMI_CMD_FW_SET_FW_UPDATE_OPTIONS,
NULL, ipmi_firmware_update_options, PRIVILEGE_ADMIN);