apphandler: move set acpi power state to new api.
Rewrite "set acpi power state" command to use the newly
introduced ipmi provider API.
Tested:
verified ipmitool set/get acpi power state status is same both
before and after the changes
Command : ipmitool raw 0x06 0x07 // get acpi
Response: 05 03
Command: ipmitool raw 0x06 0x06 0x87 0x82 //set acpi
Response:
Command: ipmitool raw 0x06 0x07 // get acpi
Response: 07 02
Command: ipmitool raw 0x06 0x06 0x88 0x83 // set acpi
Response:
Command: ipmitool raw 0x06 0x07 // get acpi
Response: 08 03
Signed-off-by: Deepak Kumar Sahu <deepakx.sahu@intel.com>
Change-Id: I7dc6edf3d3fd3d0caa98d1b1604e09c6d06675b4
diff --git a/apphandler.cpp b/apphandler.cpp
index 43cddd7..2430e8e 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -241,12 +241,6 @@
static constexpr uint8_t stateChanged = 0x80;
-struct ACPIState
-{
- uint8_t sysACPIState;
- uint8_t devACPIState;
-} __attribute__((packed));
-
std::map<ACPIPowerState::ACPI, PowerState> dbusToIPMI = {
{ACPIPowerState::ACPI::S0_G0_D0, PowerState::s0G0D0},
{ACPIPowerState::ACPI::S1_D1, PowerState::s1D1},
@@ -302,41 +296,32 @@
}
} // namespace acpi_state
-ipmi_ret_t ipmi_app_set_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 Set ACPI Power State command
+ * @param sysAcpiState - ACPI system power state to set
+ * @param devAcpiState - ACPI device power state to set
+ *
+ * @return IPMI completion code on success
+ **/
+ipmi::RspType<> ipmiSetAcpiPowerState(uint8_t sysAcpiState,
+ uint8_t devAcpiState)
{
auto s = static_cast<uint8_t>(acpi_state::PowerState::unknown);
- ipmi_ret_t rc = IPMI_CC_OK;
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
auto value = acpi_state::ACPIPowerState::ACPI::Unknown;
- auto* req = reinterpret_cast<acpi_state::ACPIState*>(request);
-
- if (*data_len != sizeof(acpi_state::ACPIState))
- {
- log<level::ERR>("set_acpi invalid len");
- *data_len = 0;
- return IPMI_CC_REQ_DATA_LEN_INVALID;
- }
-
- *data_len = 0;
-
- if (req->sysACPIState & acpi_state::stateChanged)
+ if (sysAcpiState & acpi_state::stateChanged)
{
// set system power state
- s = req->sysACPIState & ~acpi_state::stateChanged;
+ s = sysAcpiState & ~acpi_state::stateChanged;
if (!acpi_state::isValidACPIState(
acpi_state::PowerStateType::sysPowerState, s))
{
log<level::ERR>("set_acpi_power sys invalid input",
entry("S=%x", s));
- return IPMI_CC_PARM_OUT_OF_RANGE;
+ return ipmi::responseParmOutOfRange();
}
// valid input
@@ -367,7 +352,7 @@
{
log<level::ERR>("Failed in set ACPI system property",
entry("EXCEPTION=%s", e.what()));
- return IPMI_CC_UNSPECIFIED_ERROR;
+ return ipmi::responseUnspecifiedError();
}
}
}
@@ -376,16 +361,16 @@
log<level::DEBUG>("Do not change system power state");
}
- if (req->devACPIState & acpi_state::stateChanged)
+ if (devAcpiState & acpi_state::stateChanged)
{
// set device power state
- s = req->devACPIState & ~acpi_state::stateChanged;
+ s = devAcpiState & ~acpi_state::stateChanged;
if (!acpi_state::isValidACPIState(
acpi_state::PowerStateType::devPowerState, s))
{
log<level::ERR>("set_acpi_power dev invalid input",
entry("S=%x", s));
- return IPMI_CC_PARM_OUT_OF_RANGE;
+ return ipmi::responseParmOutOfRange();
}
// valid input
@@ -416,7 +401,7 @@
{
log<level::ERR>("Failed in set ACPI device property",
entry("EXCEPTION=%s", e.what()));
- return IPMI_CC_UNSPECIFIED_ERROR;
+ return ipmi::responseUnspecifiedError();
}
}
}
@@ -424,8 +409,7 @@
{
log<level::DEBUG>("Do not change device power state");
}
-
- return rc;
+ return ipmi::responseSuccess();
}
/**
@@ -1691,9 +1675,9 @@
ipmiAppGetDeviceGuid);
// <Set ACPI Power State>
- ipmi_register_callback(NETFUN_APP, IPMI_CMD_SET_ACPI, NULL,
- ipmi_app_set_acpi_power_state, PRIVILEGE_ADMIN);
-
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp,
+ ipmi::app::cmdSetAcpiPowerState,
+ ipmi::Privilege::Admin, ipmiSetAcpiPowerState);
// <Get ACPI Power State>
ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp,
ipmi::app::cmdGetAcpiPowerState,