summaryrefslogtreecommitdiffstats
path: root/chassishandler.cpp
diff options
context:
space:
mode:
authoranil kumar appana <anil.kumarx.appana@intel.com>2019-04-27 18:06:00 +0000
committerRichard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>2019-05-07 06:56:12 +0000
commitdafff5f4701d6e083f5afe7b7f8d9665f2e99c16 (patch)
tree0d757e883fa5cffc01d7edd2893c89d4eff42a27 /chassishandler.cpp
parenta5a76ebe5e2808fc291e6178ed3edc65bd986e05 (diff)
downloadphosphor-host-ipmid-dafff5f4701d6e083f5afe7b7f8d9665f2e99c16.tar.gz
phosphor-host-ipmid-dafff5f4701d6e083f5afe7b7f8d9665f2e99c16.zip
chassishandler: move chassis control to new API
Rewritten "Chassis control" command to the use newly introduced IPMI provider API. Tested: Verified ipmitool raw chassis control command ipmitool raw 0 2 0/1/2/3/4/5 and for invalid value got invalid field in request response. Change-Id: I0213157640e34c693b53999f69d7d47ced950e0d 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.cpp37
1 files changed, 15 insertions, 22 deletions
diff --git a/chassishandler.cpp b/chassishandler.cpp
index a89c2a5..a9e188f 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -1006,25 +1006,16 @@ void indicate_no_softoff_needed()
std::ofstream(path.c_str());
}
-//----------------------------------------------------------------------
-// Chassis Control commands
-//----------------------------------------------------------------------
-ipmi_ret_t ipmi_chassis_control(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 Implementation of chassis control command
+ *
+ * @param - chassisControl command byte
+ *
+ * @return Success or InvalidFieldRequest.
+ */
+ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
{
- // Error from power off.
int rc = 0;
-
- // No response for this command.
- *data_len = 0;
-
- // Catch the actual operaton by peeking into request buffer
- uint8_t chassis_ctrl_cmd = *(uint8_t*)request;
-
- switch (chassis_ctrl_cmd)
+ switch (chassisControl)
{
case CMD_POWER_ON:
rc = initiate_state_transition(State::Host::Transition::On);
@@ -1087,12 +1078,13 @@ ipmi_ret_t ipmi_chassis_control(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
default:
{
log<level::ERR>("Invalid Chassis Control command",
- entry("CMD=0x%X", chassis_ctrl_cmd));
- rc = -1;
+ entry("CMD=0x%X", chassisControl));
+ return ipmi::responseInvalidFieldRequest();
}
}
- return ((rc < 0) ? IPMI_CC_INVALID : IPMI_CC_OK);
+ return ((rc < 0) ? ipmi::responseUnspecifiedError()
+ : ipmi::responseSuccess());
}
/** @brief Return D-Bus connection string to enclosure identify LED object
@@ -1710,8 +1702,9 @@ void register_netfn_chassis_functions()
ipmi_get_chassis_status, PRIVILEGE_USER);
// <Chassis Control>
- ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_CHASSIS_CONTROL, NULL,
- ipmi_chassis_control, PRIVILEGE_OPERATOR);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
+ ipmi::chassis::cmdChassisControl,
+ ipmi::Privilege::Operator, ipmiChassisControl);
// <Chassis Identify>
ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
OpenPOWER on IntegriCloud