diff options
author | anil kumar appana <anil.kumarx.appana@intel.com> | 2019-05-27 16:32:14 +0000 |
---|---|---|
committer | Vernon Mauery <vernon.mauery@linux.intel.com> | 2019-07-25 22:36:11 +0000 |
commit | 894d022017215acceafc9e3f21379534f5396d21 (patch) | |
tree | 24899a3291224ffa6714d5057a8d7d7f6c835fcd /chassishandler.cpp | |
parent | b755772f87f0be2b034d04ae0e2f29062bcbb9f3 (diff) | |
download | phosphor-host-ipmid-894d022017215acceafc9e3f21379534f5396d21.tar.gz phosphor-host-ipmid-894d022017215acceafc9e3f21379534f5396d21.zip |
chassishandler: move set chassis cap to new api
Rewrite set chassis capabilities to use new ipmi provider api
Tested:
verified ipmitool raw get chassis capabilities command
ipmitool raw 0 5 00 20 20 20 20 20 // set chassis cap command
ipmitool raw 0 0 // get chassis cap command
00 14 14 14 14 14 // updated response in hex
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Change-Id: Idcc7c12250d4465ff838c15ba0d511701688a3a2
Diffstat (limited to 'chassishandler.cpp')
-rw-r--r-- | chassishandler.cpp | 107 |
1 files changed, 54 insertions, 53 deletions
diff --git a/chassishandler.cpp b/chassishandler.cpp index 88bf84b..2e911f9 100644 --- a/chassishandler.cpp +++ b/chassishandler.cpp @@ -602,70 +602,75 @@ ipmi_ret_t ipmi_get_chassis_cap(ipmi_netfn_t netfn, ipmi_cmd_t cmd, return rc; } -ipmi_ret_t ipmi_set_chassis_cap(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) -{ - ipmi_ret_t rc = IPMI_CC_OK; +/** @brief implements set chassis capalibities command + * @param intrusion - chassis intrusion + * @param fpLockout - frontpannel lockout + * @param reserved1 - skip one bit + * @param fruDeviceAddr - chassis FRU info Device Address + * @param sdrDeviceAddr - chassis SDR device address + * @param selDeviceAddr - chassis SEL device address + * @param smDeviceAddr - chassis system management device address + * @param bridgeDeviceAddr - chassis bridge device address + * + * @returns IPMI completion code + */ +ipmi::RspType<> ipmiSetChassisCap(bool intrusion, bool fpLockout, + uint6_t reserved1, - if (*data_len != sizeof(ipmi_chassis_cap_t)) - { - log<level::ERR>("Unsupported request length", - entry("LEN=0x%x", *data_len)); - *data_len = 0; - return IPMI_CC_REQ_DATA_LEN_INVALID; - } + uint8_t fruDeviceAddr, - ipmi_chassis_cap_t* chassisCap = static_cast<ipmi_chassis_cap_t*>(request); + uint8_t sdrDeviceAddr, - *data_len = 0; + uint8_t selDeviceAddr, + + uint8_t smDeviceAddr, + + uint8_t bridgeDeviceAddr) +{ // check input data - if (0 != (chassisCap->cap_flags & ~chassisCapFlagMask)) + if (reserved1 != 0) { - log<level::ERR>("Unsupported request parameter(CAP Flags)", - entry("REQ=0x%x", chassisCap->cap_flags)); - return IPMI_CC_INVALID_FIELD_REQUEST; + log<level::ERR>("Unsupported request parameter"); + return ipmi::responseInvalidFieldRequest(); } - if (0 != (chassisCap->fru_info_dev_addr & ~chassisCapAddrMask)) + if ((fruDeviceAddr & ~chassisCapAddrMask) != 0) { log<level::ERR>("Unsupported request parameter(FRU Addr)", - entry("REQ=0x%x", chassisCap->fru_info_dev_addr)); - return IPMI_CC_INVALID_FIELD_REQUEST; + entry("REQ=0x%x", fruDeviceAddr)); + return ipmi::responseInvalidFieldRequest(); } - - if (0 != (chassisCap->sdr_dev_addr & ~chassisCapAddrMask)) + if ((sdrDeviceAddr & ~chassisCapAddrMask) != 0) { log<level::ERR>("Unsupported request parameter(SDR Addr)", - entry("REQ=0x%x", chassisCap->sdr_dev_addr)); - return IPMI_CC_INVALID_FIELD_REQUEST; + entry("REQ=0x%x", sdrDeviceAddr)); + return ipmi::responseInvalidFieldRequest(); } - if (0 != (chassisCap->sel_dev_addr & ~chassisCapAddrMask)) + if ((selDeviceAddr & ~chassisCapAddrMask) != 0) { log<level::ERR>("Unsupported request parameter(SEL Addr)", - entry("REQ=0x%x", chassisCap->sel_dev_addr)); - return IPMI_CC_INVALID_FIELD_REQUEST; + entry("REQ=0x%x", selDeviceAddr)); + return ipmi::responseInvalidFieldRequest(); } - if (0 != (chassisCap->system_management_dev_addr & ~chassisCapAddrMask)) + if ((smDeviceAddr & ~chassisCapAddrMask) != 0) { - log<level::ERR>( - "Unsupported request parameter(SM Addr)", - entry("REQ=0x%x", chassisCap->system_management_dev_addr)); - return IPMI_CC_INVALID_FIELD_REQUEST; + log<level::ERR>("Unsupported request parameter(SM Addr)", + entry("REQ=0x%x", smDeviceAddr)); + return ipmi::responseInvalidFieldRequest(); } - if (0 != (chassisCap->bridge_dev_addr & ~chassisCapAddrMask)) + if ((bridgeDeviceAddr & ~chassisCapAddrMask) != 0) { log<level::ERR>("Unsupported request parameter(Bridge Addr)", - entry("REQ=0x%x", chassisCap->bridge_dev_addr)); - return IPMI_CC_INVALID_FIELD_REQUEST; + entry("REQ=0x%x", bridgeDeviceAddr)); + return ipmi::responseInvalidFieldRequest(); } + uint8_t capFlags = (static_cast<uint8_t>(intrusion)) | + ((static_cast<uint8_t>(fpLockout)) << 1); try { sdbusplus::bus::bus bus(ipmid_get_sd_bus_connection()); @@ -674,39 +679,34 @@ ipmi_ret_t ipmi_set_chassis_cap(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisCapFlagsProp, chassisCap->cap_flags); + chassisCapFlagsProp, capFlags); ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisFRUDevAddrProp, - chassisCap->fru_info_dev_addr); + chassisFRUDevAddrProp, fruDeviceAddr); ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisSDRDevAddrProp, chassisCap->sdr_dev_addr); + chassisSDRDevAddrProp, sdrDeviceAddr); ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisSELDevAddrProp, chassisCap->sel_dev_addr); + chassisSELDevAddrProp, selDeviceAddr); ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisSMDevAddrProp, - chassisCap->system_management_dev_addr); + chassisSMDevAddrProp, smDeviceAddr); ipmi::setDbusProperty(bus, chassisCapObject.second, chassisCapObject.first, chassisCapIntf, - chassisBridgeDevAddrProp, - chassisCap->bridge_dev_addr); + chassisBridgeDevAddrProp, bridgeDeviceAddr); } catch (std::exception& e) { log<level::ERR>(e.what()); - rc = IPMI_CC_UNSPECIFIED_ERROR; - return rc; + return ipmi::responseUnspecifiedError(); } - - return rc; + return ipmi::responseSuccess(); } //------------------------------------------ @@ -1780,8 +1780,9 @@ void register_netfn_chassis_functions() ipmi_get_chassis_cap, PRIVILEGE_USER); // Set Chassis Capabilities - ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_SET_CHASSIS_CAP, NULL, - ipmi_set_chassis_cap, PRIVILEGE_USER); + ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis, + ipmi::chassis::cmdSetChassisCapabilities, + ipmi::Privilege::User, ipmiSetChassisCap); // <Get System Boot Options> ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_GET_SYS_BOOT_OPTIONS, NULL, |