summaryrefslogtreecommitdiffstats
path: root/apphandler.cpp
diff options
context:
space:
mode:
authorDeepak Kumar Sahu <deepakx.sahu@intel.com>2019-05-17 18:14:09 +0000
committerVernon Mauery <vernon.mauery@linux.intel.com>2019-12-02 16:26:55 +0000
commit520c1315fadc0ddfe8ede28fba62a28a0889ec43 (patch)
treea24ee6246ce64dadfacfa94949e2c7ff115544f4 /apphandler.cpp
parentb0094a72d4c25a84b61327c752979f413e2b08f4 (diff)
downloadphosphor-host-ipmid-520c1315fadc0ddfe8ede28fba62a28a0889ec43.tar.gz
phosphor-host-ipmid-520c1315fadc0ddfe8ede28fba62a28a0889ec43.zip
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
Diffstat (limited to 'apphandler.cpp')
-rw-r--r--apphandler.cpp56
1 files changed, 20 insertions, 36 deletions
diff --git a/apphandler.cpp b/apphandler.cpp
index 43cddd7..2430e8e 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -241,12 +241,6 @@ enum class PowerState : uint8_t
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 @@ bool isValidACPIState(acpi_state::PowerStateType type, uint8_t state)
}
} // 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 @@ ipmi_ret_t ipmi_app_set_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
{
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 @@ ipmi_ret_t ipmi_app_set_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
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 @@ ipmi_ret_t ipmi_app_set_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
{
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 @@ ipmi_ret_t ipmi_app_set_acpi_power_state(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
{
log<level::DEBUG>("Do not change device power state");
}
-
- return rc;
+ return ipmi::responseSuccess();
}
/**
@@ -1691,9 +1675,9 @@ void register_netfn_app_functions()
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,
OpenPOWER on IntegriCloud