diff options
author | anil kumar appana <anil.kumarx.appana@intel.com> | 2019-04-30 14:57:24 +0000 |
---|---|---|
committer | Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> | 2019-05-03 03:28:48 +0000 |
commit | a5a76ebe5e2808fc291e6178ed3edc65bd986e05 (patch) | |
tree | d7b8c7cf6ea9f3f65219d044833033037eee9624 /chassishandler.cpp | |
parent | 00a18d040be228bb77c322db26cc3d53c8579a50 (diff) | |
download | phosphor-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.cpp | 46 |
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, |