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
diff --git a/chassishandler.cpp b/chassishandler.cpp
index 88bf84b..2e911f9 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -602,70 +602,75 @@
     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)
+/** @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,
+
+                                  uint8_t fruDeviceAddr,
+
+                                  uint8_t sdrDeviceAddr,
+
+                                  uint8_t selDeviceAddr,
+
+                                  uint8_t smDeviceAddr,
+
+                                  uint8_t bridgeDeviceAddr)
 {
-    ipmi_ret_t rc = IPMI_CC_OK;
-
-    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;
-    }
-
-    ipmi_chassis_cap_t* chassisCap = static_cast<ipmi_chassis_cap_t*>(request);
-
-    *data_len = 0;
 
     // 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::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 @@
                            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,