summaryrefslogtreecommitdiffstats
path: root/chassishandler.cpp
diff options
context:
space:
mode:
authoranil kumar appana <anil.kumarx.appana@intel.com>2019-04-30 14:57:24 +0000
committerRichard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>2019-05-03 03:28:48 +0000
commita5a76ebe5e2808fc291e6178ed3edc65bd986e05 (patch)
treed7b8c7cf6ea9f3f65219d044833033037eee9624 /chassishandler.cpp
parent00a18d040be228bb77c322db26cc3d53c8579a50 (diff)
downloadphosphor-host-ipmid-a5a76ebe5e2808fc291e6178ed3edc65bd986e05.tar.gz
phosphor-host-ipmid-a5a76ebe5e2808fc291e6178ed3edc65bd986e05.zip
chassishandler: move get POH counter to new API
Rewritten "Get POH counter" command to use the newly introduced IPMI provider API. Tested: verified using ipmitool chassis poh ipmitool chassis poh POH Counter : 1 days, 6 hours // Response Change-Id: Ife250269da19e511783f1a0cf1298a366f3c2728 Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com> Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Diffstat (limited to 'chassishandler.cpp')
-rw-r--r--chassishandler.cpp46
1 files changed, 17 insertions, 29 deletions
diff --git a/chassishandler.cpp b/chassishandler.cpp
index 7aa3f98..a89c2a5 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -119,15 +119,6 @@ typedef struct
uint8_t front_panel_button_cap_status;
} __attribute__((packed)) ipmi_get_chassis_status_t;
-/**
- * @struct Get POH counter command response data
- */
-struct GetPOHCountResponse
-{
- uint8_t minPerCount; ///< Minutes per count
- uint8_t counterReading[4]; ///< Counter reading
-} __attribute__((packed));
-
// Phosphor Host State manager
namespace State = sdbusplus::xyz::openbmc_project::State::server;
@@ -1585,33 +1576,29 @@ ipmi_ret_t ipmi_chassis_set_sys_boot_options(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return rc;
}
-ipmi_ret_t ipmiGetPOHCounter(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 Get POH counter command
+ * @parameter
+ * - none
+ * @returns IPMI completion code plus response data
+ * - minPerCount - Minutes per count
+ * - counterReading - counter reading
+ */
+ipmi::RspType<uint8_t, // Minutes per count
+ uint32_t // Counter reading
+ >
+ ipmiGetPOHCounter()
{
// sd_bus error
- ipmi_ret_t rc = IPMI_CC_OK;
-
- auto resptr = reinterpret_cast<GetPOHCountResponse*>(response);
-
try
{
- auto pohCounter = getPOHCounter();
- resptr->counterReading[0] = pohCounter;
- resptr->counterReading[1] = pohCounter >> 8;
- resptr->counterReading[2] = pohCounter >> 16;
- resptr->counterReading[3] = pohCounter >> 24;
+ return ipmi::responseSuccess(static_cast<uint8_t>(poh::minutesPerCount),
+ getPOHCounter());
}
catch (std::exception& e)
{
log<level::ERR>(e.what());
- return IPMI_CC_UNSPECIFIED_ERROR;
+ return ipmi::responseUnspecifiedError();
}
-
- resptr->minPerCount = poh::minutesPerCount;
- *data_len = sizeof(GetPOHCountResponse);
-
- return rc;
}
ipmi_ret_t ipmi_chassis_set_power_restore_policy(
@@ -1736,8 +1723,9 @@ void register_netfn_chassis_functions()
ipmi_chassis_set_sys_boot_options,
PRIVILEGE_OPERATOR);
// <Get POH Counter>
- ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_GET_POH_COUNTER, NULL,
- ipmiGetPOHCounter, PRIVILEGE_USER);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
+ ipmi::chassis::cmdGetPohCounter,
+ ipmi::Privilege::User, ipmiGetPOHCounter);
// <Set Power Restore Policy>
ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_SET_RESTORE_POLICY, NULL,
OpenPOWER on IntegriCloud