summaryrefslogtreecommitdiffstats
path: root/apphandler.cpp
diff options
context:
space:
mode:
authorDeepak Kumar Sahu <deepakx.sahu@intel.com>2019-05-07 19:53:37 +0000
committerVernon Mauery <vernon.mauery@linux.intel.com>2019-05-09 20:23:11 +0000
commit4e6d25719120b40a55db66f1ea13ddf285d5338c (patch)
treef9998e0bcd99feaf3c613e05559425acf70888a8 /apphandler.cpp
parentbbf8bd6c78822dd56c5cc8c1e34ba0f06671763f (diff)
downloadphosphor-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.cpp42
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
OpenPOWER on IntegriCloud