1 #pragma once 2 3 #include "config.h" 4 5 #include "settings.hpp" 6 #include "xyz/openbmc_project/State/Host/server.hpp" 7 8 #include <sdbusplus/bus.hpp> 9 10 namespace phosphor 11 { 12 namespace state 13 { 14 namespace manager 15 { 16 17 using HypervisorInherit = sdbusplus::server::object::object< 18 sdbusplus::xyz::openbmc_project::State::server::Host>; 19 20 namespace server = sdbusplus::xyz::openbmc_project::State::server; 21 namespace sdbusRule = sdbusplus::bus::match::rules; 22 23 /** @class Host 24 * @brief OpenBMC host state management implementation. 25 * @details A concrete implementation for xyz.openbmc_project.State.Host 26 * DBus API. 27 */ 28 class Hypervisor : public HypervisorInherit 29 { 30 public: 31 Hypervisor() = delete; 32 Hypervisor(const Hypervisor&) = delete; 33 Hypervisor& operator=(const Hypervisor&) = delete; 34 Hypervisor(Hypervisor&&) = delete; 35 Hypervisor& operator=(Hypervisor&&) = delete; 36 virtual ~Hypervisor() = default; 37 38 /** @brief Constructs Hypervisor State Manager 39 * 40 * @param[in] bus - The Dbus bus object 41 * @param[in] objPath - The Dbus object path 42 */ 43 Hypervisor(sdbusplus::bus::bus& bus, const char* objPath) : 44 HypervisorInherit(bus, objPath, 45 HypervisorInherit::action::emit_object_added), 46 bus(bus), 47 bootProgressChangeSignal( 48 bus, 49 sdbusRule::propertiesChanged( 50 "/xyz/openbmc_project/state/host0", 51 "xyz.openbmc_project.State.Boot.Progress"), 52 std::bind(std::mem_fn(&Hypervisor::bootProgressChangeEvent), this, 53 std::placeholders::_1)) 54 {} 55 56 /** @brief Set value of HostTransition */ 57 server::Host::Transition 58 requestedHostTransition(server::Host::Transition value) override; 59 60 /** @brief Set value of CurrentHostState */ 61 server::Host::HostState 62 currentHostState(server::Host::HostState value) override; 63 64 /** @brief Return value of CurrentHostState */ 65 server::Host::HostState currentHostState(); 66 67 /** @brief Check if BootProgress change affects hypervisor state 68 * 69 * @param[in] bootProgress - BootProgress value to check 70 * 71 */ 72 void updateCurrentHostState(std::string& bootProgress); 73 74 private: 75 /** @brief Process BootProgress property changes 76 * 77 * Instance specific interface to monitor for changes to the BootProgress 78 * property which may impact Hypervisor state. 79 * 80 * @param[in] msg - Data associated with subscribed signal 81 * 82 */ 83 void bootProgressChangeEvent(sdbusplus::message::message& msg); 84 85 /** @brief Persistent sdbusplus DBus bus connection. */ 86 sdbusplus::bus::bus& bus; 87 88 /** @brief Watch BootProgress changes to know hypervisor state **/ 89 sdbusplus::bus::match_t bootProgressChangeSignal; 90 }; 91 92 } // namespace manager 93 } // namespace state 94 } // namespace phosphor 95