diff options
author | anil kumar appana <anil.kumarx.appana@intel.com> | 2019-04-27 18:06:00 +0000 |
---|---|---|
committer | Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> | 2019-05-07 06:56:12 +0000 |
commit | dafff5f4701d6e083f5afe7b7f8d9665f2e99c16 (patch) | |
tree | 0d757e883fa5cffc01d7edd2893c89d4eff42a27 /chassishandler.cpp | |
parent | a5a76ebe5e2808fc291e6178ed3edc65bd986e05 (diff) | |
download | phosphor-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.cpp | 37 |
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, |