summaryrefslogtreecommitdiffstats
path: root/chassis_state_manager.cpp
diff options
context:
space:
mode:
authorAndrew Geissler <andrewg@us.ibm.com>2017-01-24 13:25:33 -0600
committerPatrick Williams <patrick@stwcx.xyz>2017-02-01 18:41:52 +0000
commitce80f24c61af72ecf9502f1050221f1bea6c4057 (patch)
tree475394bf5f2cec47ccc539ac4d3a39a5ea1a9a24 /chassis_state_manager.cpp
parent515f74bc03b0e8242c939da79b6718a253256abe (diff)
downloadphosphor-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.cpp29
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);
}
OpenPOWER on IntegriCloud