diff options
author | Deepak Kumar Sahu <deepakx.sahu@intel.com> | 2019-05-07 19:53:37 +0000 |
---|---|---|
committer | Vernon Mauery <vernon.mauery@linux.intel.com> | 2019-05-09 20:23:11 +0000 |
commit | 4e6d25719120b40a55db66f1ea13ddf285d5338c (patch) | |
tree | f9998e0bcd99feaf3c613e05559425acf70888a8 /apphandler.cpp | |
parent | bbf8bd6c78822dd56c5cc8c1e34ba0f06671763f (diff) | |
download | phosphor-host-ipmid-4e6d25719120b40a55db66f1ea13ddf285d5338c.tar.gz phosphor-host-ipmid-4e6d25719120b40a55db66f1ea13ddf285d5338c.zip |
apphandler: move get ACPI power state to new API
Rewritten "Get ACPI power state" command to use the newly
introduced IPMI provider API.
Tested:
Verified using ipmitool and it is giving same behaviour as before.
ipmitool raw 0x06 0x07
05 03
Change-Id: I51f2d5bbb89e445230ffc1363cf413e716116996
Signed-off-by: Deepak Kumar Sahu <deepakx.sahu@intel.com>
Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Diffstat (limited to 'apphandler.cpp')
-rw-r--r-- | apphandler.cpp | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/apphandler.cpp b/apphandler.cpp index 42e9e4b..91bede5 100644 --- a/apphandler.cpp +++ b/apphandler.cpp @@ -431,20 +431,23 @@ ipmi_ret_t ipmi_app_set_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd, return rc; } -ipmi_ret_t ipmi_app_get_acpi_power_state(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 get ACPI power state command + * + * @return IPMI completion code plus response data on success. + * - ACPI system power state + * - ACPI device power state + **/ +ipmi::RspType<uint8_t, // acpiSystemPowerState + uint8_t // acpiDevicePowerState + > + ipmiGetAcpiPowerState() { - ipmi_ret_t rc = IPMI_CC_OK; - - auto* res = reinterpret_cast<acpi_state::ACPIState*>(response); + uint8_t sysAcpiState; + uint8_t devAcpiState; sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; - *data_len = 0; - try { auto acpiObject = ipmi::getDbusObject(bus, acpi_state::acpiInterface); @@ -454,25 +457,21 @@ ipmi_ret_t ipmi_app_get_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd, acpi_state::sysACPIProp); auto sysACPI = acpi_state::ACPIPowerState::convertACPIFromString( std::get<std::string>(sysACPIVal)); - res->sysACPIState = - static_cast<uint8_t>(acpi_state::dbusToIPMI.at(sysACPI)); + sysAcpiState = static_cast<uint8_t>(acpi_state::dbusToIPMI.at(sysACPI)); auto devACPIVal = ipmi::getDbusProperty( bus, acpiObject.second, acpiObject.first, acpi_state::acpiInterface, acpi_state::devACPIProp); auto devACPI = acpi_state::ACPIPowerState::convertACPIFromString( std::get<std::string>(devACPIVal)); - res->devACPIState = - static_cast<uint8_t>(acpi_state::dbusToIPMI.at(devACPI)); - - *data_len = sizeof(acpi_state::ACPIState); + devAcpiState = static_cast<uint8_t>(acpi_state::dbusToIPMI.at(devACPI)); } catch (const InternalFailure& e) { - log<level::ERR>("Failed in get ACPI property"); - return IPMI_CC_UNSPECIFIED_ERROR; + return ipmi::responseUnspecifiedError(); } - return rc; + + return ipmi::responseSuccess(sysAcpiState, devAcpiState); } typedef struct @@ -1348,8 +1347,9 @@ void register_netfn_app_functions() ipmi_app_set_acpi_power_state, PRIVILEGE_ADMIN); // <Get ACPI Power State> - ipmi_register_callback(NETFUN_APP, IPMI_CMD_GET_ACPI, NULL, - ipmi_app_get_acpi_power_state, PRIVILEGE_ADMIN); + ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp, + ipmi::app::cmdGetAcpiPowerState, + ipmi::Privilege::Admin, ipmiGetAcpiPowerState); // Note: For security reason, this command will be registered only when // there are proper I2C Master write read whitelist |