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, false), bus(bus), 45 bootProgressChangeSignal( 46 bus, 47 sdbusRule::propertiesChanged( 48 "/xyz/openbmc_project/state/host0", 49 "xyz.openbmc_project.State.Boot.Progress"), 50 std::bind(std::mem_fn(&Hypervisor::bootProgressChangeEvent), this, 51 std::placeholders::_1)) 52 {} 53 54 /** @brief Set value of HostTransition */ 55 server::Host::Transition 56 requestedHostTransition(server::Host::Transition value) override; 57 58 /** @brief Set value of CurrentHostState */ 59 server::Host::HostState 60 currentHostState(server::Host::HostState value) override; 61 62 /** @brief Return value of CurrentHostState */ 63 server::Host::HostState currentHostState(); 64 65 /** @brief Check if BootProgress change affects hypervisor state 66 * 67 * @param[in] bootProgress - BootProgress value to check 68 * 69 */ 70 void updateCurrentHostState(std::string& bootProgress); 71 72 private: 73 /** @brief Process BootProgress property changes 74 * 75 * Instance specific interface to monitor for changes to the BootProgress 76 * property which may impact Hypervisor state. 77 * 78 * @param[in] msg - Data associated with subscribed signal 79 * 80 */ 81 void bootProgressChangeEvent(sdbusplus::message::message& msg); 82 83 /** @brief Persistent sdbusplus DBus bus connection. */ 84 sdbusplus::bus::bus& bus; 85 86 /** @brief Watch BootProgress changes to know hypervisor state **/ 87 sdbusplus::bus::match_t bootProgressChangeSignal; 88 }; 89 90 } // namespace manager 91 } // namespace state 92 } // namespace phosphor 93