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