diff options
author | Andrew Geissler <andrewg@us.ibm.com> | 2017-01-24 13:25:33 -0600 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-02-01 18:41:52 +0000 |
commit | ce80f24c61af72ecf9502f1050221f1bea6c4057 (patch) | |
tree | 475394bf5f2cec47ccc539ac4d3a39a5ea1a9a24 /chassis_state_manager.cpp | |
parent | 515f74bc03b0e8242c939da79b6718a253256abe (diff) | |
download | phosphor-state-manager-ce80f24c61af72ecf9502f1050221f1bea6c4057.tar.gz phosphor-state-manager-ce80f24c61af72ecf9502f1050221f1bea6c4057.zip |
Call new chassis power targets during on/off requests
New targets were introduced recently to support just the
power on and off of the chassis (no boot of host). This
code change makes use of these new targets.
Change-Id: Ibf942a9ed27ccc982a36cd755afdf6171cb5c0a6
Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
Diffstat (limited to 'chassis_state_manager.cpp')
-rw-r--r-- | chassis_state_manager.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp index a2b6dbf..fb0c2a3 100644 --- a/chassis_state_manager.cpp +++ b/chassis_state_manager.cpp @@ -13,6 +13,17 @@ namespace server = sdbusplus::xyz::openbmc_project::State::server; using namespace phosphor::logging; +/* Map a transition to it's systemd target */ +const std::map<server::Chassis::Transition,std::string> SYSTEMD_TARGET_TABLE = +{ + {server::Chassis::Transition::Off, "obmc-power-chassis-off@0.target"}, + {server::Chassis::Transition::On, "obmc-power-chassis-on@0.target"} +}; + +constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1"; +constexpr auto SYSTEMD_OBJ_PATH = "/org/freedesktop/systemd1"; +constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager"; + /* TODO:Issue 774 - Use systemd target signals to control chassis state */ int Chassis::handlePgoodOn(sd_bus_message* /*msg*/, void* usrData, sd_bus_error* retError) @@ -73,12 +84,30 @@ void Chassis::determineInitialState() return; } +void Chassis::executeTransition(Transition tranReq) +{ + auto sysdTarget = SYSTEMD_TARGET_TABLE.find(tranReq)->second; + + auto method = this->bus.new_method_call(SYSTEMD_SERVICE, + SYSTEMD_OBJ_PATH, + SYSTEMD_INTERFACE, + "StartUnit"); + + method.append(sysdTarget); + method.append("replace"); + + this->bus.call_noreply(method); + + return; +} + Chassis::Transition Chassis::requestedPowerTransition(Transition value) { log<level::INFO>("Change to Chassis Requested Power State", entry("CHASSIS_REQUESTED_POWER_STATE=%s", convertForMessage(value).c_str())); + executeTransition(value); return server::Chassis::requestedPowerTransition(value); } |