From a1f9d797753e32b36e08e7d611ff88b10e9bbad2 Mon Sep 17 00:00:00 2001 From: "Jason M. Bills" Date: Thu, 30 Jan 2020 16:18:33 -0800 Subject: [PATCH 1/3] Add Chassis State Transition interface This adds the Chassis State Transition interface in preparation to support the mapping defined in the design document below. ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358 Tested: Ran each IPMI chassis control command to confirm the expected behavior: ipmitool power on: system is powered-on ipmitool power off: system is forced off ipmitool power cycle: system is forced off then powered-on ipmitool power reset: system is hard reset ipmitool power soft: soft power-off requested from system software Change-Id: I6acfb795a9a33ff5227a5d6e1830774ab732ac0c Signed-off-by: Jason M. Bills --- chassishandler.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/chassishandler.cpp b/chassishandler.cpp index 0d318647..fdbb9fa5 100644 --- a/chassishandler.cpp +++ b/chassishandler.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -865,6 +866,38 @@ int initiate_state_transition(State::Host::Transition transition) return rc; } +//------------------------------------------ +// Calls into Chassis State Manager Dbus object +//------------------------------------------ +int initiateChassisStateTransition(State::Chassis::Transition transition) +{ + // OpenBMC Chassis State Manager dbus framework + constexpr auto chassisStatePath = "/xyz/openbmc_project/state/chassis0"; + constexpr auto chassisStateIntf = "xyz.openbmc_project.State.Chassis"; + + auto service = + ipmi::getService(*getSdBus(), chassisStateIntf, chassisStatePath); + + // Convert to string equivalent of the passed in transition enum. + auto request = State::convertForMessage(transition); + + try + { + ipmi::setDbusProperty(*getSdBus(), service, chassisStatePath, + chassisStateIntf, "RequestedPowerTransition", + request); + } + catch (std::exception& e) + { + log( + "Failed to initiate transition", + entry("EXCEPTION=%s, REQUEST=%s", e.what(), request.c_str())); + return -1; + } + + return 0; +} + //------------------------------------------ // Set Enabled property to inform NMI source // handling to trigger a NMI_OUT BSOD. -- 2.21.0