summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chassishandler.cpp73
1 files changed, 28 insertions, 45 deletions
diff --git a/chassishandler.cpp b/chassishandler.cpp
index 541ab52..0681527 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -2,8 +2,6 @@
#include "chassishandler.hpp"
-#include "settings.hpp"
-
#include <arpa/inet.h>
#include <endian.h>
#include <limits.h>
@@ -26,6 +24,7 @@
#include <sdbusplus/message/types.hpp>
#include <sdbusplus/server/object.hpp>
#include <sdbusplus/timer.hpp>
+#include <settings.hpp>
#include <sstream>
#include <string>
#include <xyz/openbmc_project/Common/error.hpp>
@@ -1592,45 +1591,31 @@ ipmi::RspType<uint8_t, // Minutes per count
}
}
-ipmi_ret_t ipmi_chassis_set_power_restore_policy(
- 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::RspType<uint8_t>
+ ipmiChassisSetPowerRestorePolicy(boost::asio::yield_context yield,
+ uint8_t policy)
{
- auto* reqptr = reinterpret_cast<uint8_t*>(request);
- auto* resptr = reinterpret_cast<uint8_t*>(response);
- uint8_t reqPolicy = 0;
-
+ constexpr uint8_t ccParamNotSupported = 0x80;
power_policy::DbusValue value =
power_policy::RestorePolicy::Policy::AlwaysOff;
- if (*data_len != power_policy::setPolicyReqLen)
+ if (policy & ~power_policy::policyBitMask)
{
- phosphor::logging::log<level::ERR>("Unsupported request length",
- entry("LEN=0x%x", *data_len));
- *data_len = 0;
- return IPMI_CC_REQ_DATA_LEN_INVALID;
+ phosphor::logging::log<level::ERR>(
+ "Reserved request parameter",
+ entry("REQ=0x%x", static_cast<int>(policy)));
+ return ipmi::response(ccParamNotSupported);
}
- if (*reqptr > power_policy::noChange)
- {
- phosphor::logging::log<level::ERR>("Reserved request parameter",
- entry("REQ=0x%x", *reqptr));
- *data_len = 0;
- return IPMI_CC_PARM_OUT_OF_RANGE;
- }
-
- reqPolicy = *reqptr & power_policy::policyBitMask;
- if (reqPolicy == power_policy::noChange)
+ if (policy == power_policy::noChange)
{
// just return the supported policy
- *resptr = power_policy::allSupport;
- *data_len = power_policy::setPolicyReqLen;
- return IPMI_CC_OK;
+ return ipmi::responseSuccess(power_policy::allSupport);
}
for (auto const& it : power_policy::dbusToIpmi)
{
- if (it.second == reqPolicy)
+ if (it.second == policy)
{
value = it.first;
break;
@@ -1645,33 +1630,30 @@ ipmi_ret_t ipmi_chassis_set_power_restore_policy(
.front();
std::variant<std::string> property = convertForMessage(value);
- auto method = chassis::internal::dbus.new_method_call(
+ auto sdbusp = getSdBus();
+ boost::system::error_code ec;
+ sdbusp->yield_method_call<void>(
+ yield, ec,
chassis::internal::cache::objects
.service(powerRestoreSetting,
chassis::internal::powerRestoreIntf)
.c_str(),
- powerRestoreSetting.c_str(), ipmi::PROP_INTF, "Set");
-
- method.append(chassis::internal::powerRestoreIntf, "PowerRestorePolicy",
- property);
- auto reply = chassis::internal::dbus.call(method);
- if (reply.is_method_error())
+ powerRestoreSetting, ipmi::PROP_INTF, "Set",
+ chassis::internal::powerRestoreIntf, "PowerRestorePolicy",
+ property);
+ if (ec)
{
phosphor::logging::log<level::ERR>("Unspecified Error");
- *data_len = 0;
- return IPMI_CC_UNSPECIFIED_ERROR;
+ return ipmi::responseUnspecifiedError();
}
}
catch (InternalFailure& e)
{
report<InternalFailure>();
- *data_len = 0;
- return IPMI_CC_UNSPECIFIED_ERROR;
+ return ipmi::responseUnspecifiedError();
}
- *resptr = power_policy::allSupport;
- *data_len = power_policy::setPolicyReqLen;
- return IPMI_CC_OK;
+ return ipmi::responseSuccess(power_policy::allSupport);
}
void register_netfn_chassis_functions()
@@ -1719,7 +1701,8 @@ void register_netfn_chassis_functions()
ipmi::Privilege::User, ipmiGetPOHCounter);
// <Set Power Restore Policy>
- ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_SET_RESTORE_POLICY, NULL,
- ipmi_chassis_set_power_restore_policy,
- PRIVILEGE_OPERATOR);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
+ ipmi::chassis::cmdSetPowerRestorePolicy,
+ ipmi::Privilege::Operator,
+ ipmiChassisSetPowerRestorePolicy);
}
OpenPOWER on IntegriCloud