summaryrefslogtreecommitdiffstats
path: root/chassishandler.cpp
diff options
context:
space:
mode:
authoranil kumar appana <anil.kumarx.appana@intel.com>2019-05-27 16:32:14 +0000
committerVernon Mauery <vernon.mauery@linux.intel.com>2019-07-25 22:36:11 +0000
commit894d022017215acceafc9e3f21379534f5396d21 (patch)
tree24899a3291224ffa6714d5057a8d7d7f6c835fcd /chassishandler.cpp
parentb755772f87f0be2b034d04ae0e2f29062bcbb9f3 (diff)
downloadphosphor-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.cpp107
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,
OpenPOWER on IntegriCloud