blob: b89865ec4080a7bbbec78263e6e2b29e33de8c47 [file] [log] [blame]
Andrew Geisslerfe270d32021-01-27 14:06:46 -06001#pragma once
2
3#include "config.h"
4
5#include "settings.hpp"
Andrew Geisslerfe270d32021-01-27 14:06:46 -06006
7#include <sdbusplus/bus.hpp>
Patrick Williams9a286db2024-01-17 06:29:47 -06008#include <xyz/openbmc_project/State/Boot/Progress/client.hpp>
9#include <xyz/openbmc_project/State/Host/server.hpp>
Andrew Geisslerfe270d32021-01-27 14:06:46 -060010
11namespace phosphor
12{
13namespace state
14{
15namespace manager
16{
17
Patrick Williamsf053e6f2022-07-22 19:26:54 -050018using HypervisorInherit = sdbusplus::server::object_t<
Patrick Williams7e969cb2023-08-23 16:24:23 -050019 sdbusplus::server::xyz::openbmc_project::state::Host>;
Patrick Williams9a286db2024-01-17 06:29:47 -060020using BootProgress =
21 sdbusplus::client::xyz::openbmc_project::state::boot::Progress<>;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060022
Patrick Williams7e969cb2023-08-23 16:24:23 -050023namespace server = sdbusplus::server::xyz::openbmc_project::state;
Andrew Geisslerc74716e2021-02-09 15:11:10 -060024namespace sdbusRule = sdbusplus::bus::match::rules;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060025
26/** @class Host
27 * @brief OpenBMC host state management implementation.
28 * @details A concrete implementation for xyz.openbmc_project.State.Host
29 * DBus API.
30 */
31class Hypervisor : public HypervisorInherit
32{
33 public:
34 Hypervisor() = delete;
35 Hypervisor(const Hypervisor&) = delete;
36 Hypervisor& operator=(const Hypervisor&) = delete;
37 Hypervisor(Hypervisor&&) = delete;
38 Hypervisor& operator=(Hypervisor&&) = delete;
Pavithra Barithaya44acab72024-06-21 08:11:13 -050039 ~Hypervisor() override = default;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060040
41 /** @brief Constructs Hypervisor State Manager
42 *
43 * @param[in] bus - The Dbus bus object
44 * @param[in] objPath - The Dbus object path
45 */
Patrick Williamsf053e6f2022-07-22 19:26:54 -050046 Hypervisor(sdbusplus::bus_t& bus, const char* objPath) :
Patrick Williams76070742022-04-05 15:20:12 -050047 HypervisorInherit(bus, objPath,
48 HypervisorInherit::action::emit_object_added),
Patrick Williams30538e82023-10-20 11:18:54 -050049 bootProgressChangeSignal(
50 bus,
Patrick Williams9a286db2024-01-17 06:29:47 -060051 sdbusRule::propertiesChanged("/xyz/openbmc_project/state/host0",
52 BootProgress::interface),
Patrick Williams30538e82023-10-20 11:18:54 -050053 [this](sdbusplus::message_t& m) { bootProgressChangeEvent(m); })
Andrew Geisslerfe270d32021-01-27 14:06:46 -060054 {}
55
56 /** @brief Set value of HostTransition */
Patrick Williams4fae22a2025-02-01 08:22:14 -050057 server::Host::Transition requestedHostTransition(
58 server::Host::Transition value) override;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060059
60 /** @brief Set value of CurrentHostState */
Patrick Williams4fae22a2025-02-01 08:22:14 -050061 server::Host::HostState currentHostState(
62 server::Host::HostState value) override;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060063
Andrew Geisslerc74716e2021-02-09 15:11:10 -060064 /** @brief Return value of CurrentHostState */
Andrew Geisslere4a39de2023-08-22 15:11:09 -040065 server::Host::HostState currentHostState() const override;
Andrew Geisslerc74716e2021-02-09 15:11:10 -060066
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
Andrew Geisslerfe270d32021-01-27 14:06:46 -060074 private:
Andrew Geisslerc74716e2021-02-09 15:11:10 -060075 /** @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 */
Patrick Williamsf053e6f2022-07-22 19:26:54 -050083 void bootProgressChangeEvent(sdbusplus::message_t& msg);
Andrew Geisslerc74716e2021-02-09 15:11:10 -060084
Andrew Geisslerc74716e2021-02-09 15:11:10 -060085 /** @brief Watch BootProgress changes to know hypervisor state **/
86 sdbusplus::bus::match_t bootProgressChangeSignal;
Andrew Geisslerfe270d32021-01-27 14:06:46 -060087};
88
89} // namespace manager
90} // namespace state
91} // namespace phosphor