summaryrefslogtreecommitdiffstats
path: root/softoff/softoff.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'softoff/softoff.hpp')
-rw-r--r--softoff/softoff.hpp241
1 files changed, 119 insertions, 122 deletions
diff --git a/softoff/softoff.hpp b/softoff/softoff.hpp
index 43bc303..b7555e3 100644
--- a/softoff/softoff.hpp
+++ b/softoff/softoff.hpp
@@ -1,12 +1,14 @@
#pragma once
+#include "config.h"
+
+#include "timer.hpp"
+
+#include <functional>
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
-#include <functional>
#include <xyz/openbmc_project/Control/Host/server.hpp>
#include <xyz/openbmc_project/Ipmi/Internal/SoftPowerOff/server.hpp>
-#include "timer.hpp"
-#include "config.h"
namespace phosphor
{
namespace ipmi
@@ -20,126 +22,121 @@ namespace sdbusRule = sdbusplus::bus::match::rules;
/** @class SoftPowerOff
* @brief Responsible for coordinating Host SoftPowerOff operation
*/
-class SoftPowerOff : public sdbusplus::server::object::object<
- Base::SoftPowerOff>
+class SoftPowerOff
+ : public sdbusplus::server::object::object<Base::SoftPowerOff>
{
- public:
- /** @brief Constructs SoftPowerOff object.
- *
- * @param[in] bus - system dbus handler
- * @param[in] event - sd_event handler
- * @param[in] objPath - The Dbus path hosting SoftPowerOff function
- */
- SoftPowerOff(sdbusplus::bus::bus& bus,
- sd_event* event,
- const char* objPath) :
- sdbusplus::server::object::object<
- Base::SoftPowerOff>(bus, objPath, false),
- bus(bus),
- timer(event),
- hostControlSignal(
- bus,
- sdbusRule::type::signal() +
- sdbusRule::member("CommandComplete") +
- sdbusRule::path("/xyz/openbmc_project/control/host0") +
- sdbusRule::interface(CONTROL_HOST_BUSNAME) +
- sdbusRule::argN(0,convertForMessage(
- Host::Command::SoftOff)),
- std::bind(std::mem_fn(&SoftPowerOff::hostControlEvent),
- this, std::placeholders::_1))
- {
- // Need to announce since we may get the response
- // very quickly on host shutdown command
- emit_object_added();
-
- // The whole purpose of this application is to send a host shutdown
- // command and watch for the soft power off to go through. We need
- // the interface added signal emitted before we send the shutdown
- // command just to attend to lightning fast response from host
- sendHostShutDownCmd();
- }
-
- /** @brief Tells if the objective of this application is completed */
- inline auto isCompleted()
- {
- return completed;
- }
-
- /** @brief Tells if the referenced timer is expired or not */
- inline auto isTimerExpired()
- {
- return timer.isExpired();
- }
-
- /** @brief overloaded property setter function
- *
- * @param[in] value - One of SoftOffReceived / HostShutdown
- *
- * @return Success or exception thrown
- */
- HostResponse responseReceived(HostResponse value) override;
-
- /** @brief Using the base class's getter method */
- using Base::SoftPowerOff::responseReceived;
-
- /** @brief Calls to start a timer
- *
- * @param[in] usec - Time in microseconds
- *
- * @return Success or exception thrown
- */
- int startTimer(const std::chrono::microseconds& usec);
-
- private:
- // Need this to send SMS_ATTN
- // TODO : Switch over to using mapper service in a different patch
- static constexpr auto HOST_IPMI_BUS = "org.openbmc.HostIpmi";
- static constexpr auto HOST_IPMI_OBJ = "/org/openbmc/HostIpmi/1";
- static constexpr auto HOST_IPMI_INTF = "org.openbmc.HostIpmi";
-
- /* @brief sdbusplus handle */
- sdbusplus::bus::bus& bus;
-
- /** @brief Reference to Timer object */
- Timer timer;
-
- /** @brief Marks the end of life of this application.
- *
- * This is set to true if host gives appropriate responses
- * for the sequence of commands.
- */
- bool completed = false;
-
- /** @brief Subscribe to host control signals
- *
- * Protocol is to send the host power off request to the host
- * control interface and then wait for a signal indicating pass/fail
- **/
- sdbusplus::bus::match_t hostControlSignal;
-
- /** @brief Sends host control command to tell host to shut down
- *
- * After sending the command, wait for a signal indicating the status
- * of the command.
- *
- * After receiving the initial response, start a timer for 30 minutes
- * to let host do a clean shutdown of partitions. When the response is
- * received from the host, it indicates that BMC can do a power off.
- * If BMC fails to get any response, then a hard power off would
- * be forced.
- *
- * @return - Does not return anything. Error will result in exception
- * being thrown
- */
- void sendHostShutDownCmd();
-
- /** @brief Callback function on host control signals
- *
- * @param[in] msg - Data associated with subscribed signal
- *
- */
- void hostControlEvent(sdbusplus::message::message& msg);
-
+ public:
+ /** @brief Constructs SoftPowerOff object.
+ *
+ * @param[in] bus - system dbus handler
+ * @param[in] event - sd_event handler
+ * @param[in] objPath - The Dbus path hosting SoftPowerOff function
+ */
+ SoftPowerOff(sdbusplus::bus::bus& bus, sd_event* event,
+ const char* objPath) :
+ sdbusplus::server::object::object<Base::SoftPowerOff>(bus, objPath,
+ false),
+ bus(bus), timer(event),
+ hostControlSignal(
+ bus,
+ sdbusRule::type::signal() + sdbusRule::member("CommandComplete") +
+ sdbusRule::path("/xyz/openbmc_project/control/host0") +
+ sdbusRule::interface(CONTROL_HOST_BUSNAME) +
+ sdbusRule::argN(0, convertForMessage(Host::Command::SoftOff)),
+ std::bind(std::mem_fn(&SoftPowerOff::hostControlEvent), this,
+ std::placeholders::_1))
+ {
+ // Need to announce since we may get the response
+ // very quickly on host shutdown command
+ emit_object_added();
+
+ // The whole purpose of this application is to send a host shutdown
+ // command and watch for the soft power off to go through. We need
+ // the interface added signal emitted before we send the shutdown
+ // command just to attend to lightning fast response from host
+ sendHostShutDownCmd();
+ }
+
+ /** @brief Tells if the objective of this application is completed */
+ inline auto isCompleted()
+ {
+ return completed;
+ }
+
+ /** @brief Tells if the referenced timer is expired or not */
+ inline auto isTimerExpired()
+ {
+ return timer.isExpired();
+ }
+
+ /** @brief overloaded property setter function
+ *
+ * @param[in] value - One of SoftOffReceived / HostShutdown
+ *
+ * @return Success or exception thrown
+ */
+ HostResponse responseReceived(HostResponse value) override;
+
+ /** @brief Using the base class's getter method */
+ using Base::SoftPowerOff::responseReceived;
+
+ /** @brief Calls to start a timer
+ *
+ * @param[in] usec - Time in microseconds
+ *
+ * @return Success or exception thrown
+ */
+ int startTimer(const std::chrono::microseconds& usec);
+
+ private:
+ // Need this to send SMS_ATTN
+ // TODO : Switch over to using mapper service in a different patch
+ static constexpr auto HOST_IPMI_BUS = "org.openbmc.HostIpmi";
+ static constexpr auto HOST_IPMI_OBJ = "/org/openbmc/HostIpmi/1";
+ static constexpr auto HOST_IPMI_INTF = "org.openbmc.HostIpmi";
+
+ /* @brief sdbusplus handle */
+ sdbusplus::bus::bus& bus;
+
+ /** @brief Reference to Timer object */
+ Timer timer;
+
+ /** @brief Marks the end of life of this application.
+ *
+ * This is set to true if host gives appropriate responses
+ * for the sequence of commands.
+ */
+ bool completed = false;
+
+ /** @brief Subscribe to host control signals
+ *
+ * Protocol is to send the host power off request to the host
+ * control interface and then wait for a signal indicating pass/fail
+ **/
+ sdbusplus::bus::match_t hostControlSignal;
+
+ /** @brief Sends host control command to tell host to shut down
+ *
+ * After sending the command, wait for a signal indicating the status
+ * of the command.
+ *
+ * After receiving the initial response, start a timer for 30 minutes
+ * to let host do a clean shutdown of partitions. When the response is
+ * received from the host, it indicates that BMC can do a power off.
+ * If BMC fails to get any response, then a hard power off would
+ * be forced.
+ *
+ * @return - Does not return anything. Error will result in exception
+ * being thrown
+ */
+ void sendHostShutDownCmd();
+
+ /** @brief Callback function on host control signals
+ *
+ * @param[in] msg - Data associated with subscribed signal
+ *
+ */
+ void hostControlEvent(sdbusplus::message::message& msg);
};
} // namespace ipmi
} // namespace phosphor
OpenPOWER on IntegriCloud