1dd2c6fdcSAndrew Geissler #pragma once 2dd2c6fdcSAndrew Geissler 30b02be92SPatrick Venture #include <host-cmd-manager.hpp> 4dd2c6fdcSAndrew Geissler #include <sdbusplus/bus.hpp> 5*c7021b86SAndrew Geissler #include <xyz/openbmc_project/Condition/HostFirmware/server.hpp> 6dd2c6fdcSAndrew Geissler #include <xyz/openbmc_project/Control/Host/server.hpp> 7dd2c6fdcSAndrew Geissler namespace phosphor 8dd2c6fdcSAndrew Geissler { 9dd2c6fdcSAndrew Geissler namespace host 10dd2c6fdcSAndrew Geissler { 113eb117a3SVishwanatha Subbanna namespace command 123eb117a3SVishwanatha Subbanna { 1312866370SAndrew Geissler 14dd2c6fdcSAndrew Geissler /** @class Host 15*c7021b86SAndrew Geissler * @brief OpenBMC control and condition host interface implementation. 16dd2c6fdcSAndrew Geissler * @details A concrete implementation for xyz.openbmc_project.Control.Host 17*c7021b86SAndrew Geissler * and xyz.openbmc_project.Condition.HostFirmware DBus API's. 18dd2c6fdcSAndrew Geissler */ 19*c7021b86SAndrew Geissler class Host 20*c7021b86SAndrew Geissler : public sdbusplus::server::object::object< 21*c7021b86SAndrew Geissler sdbusplus::xyz::openbmc_project::Control::server::Host, 22*c7021b86SAndrew Geissler sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware> 23dd2c6fdcSAndrew Geissler { 24dd2c6fdcSAndrew Geissler public: 25*c7021b86SAndrew Geissler /** @brief Constructs Host Control and Condition Interfaces 26dd2c6fdcSAndrew Geissler * 27dd2c6fdcSAndrew Geissler * @param[in] bus - The Dbus bus object 28dd2c6fdcSAndrew Geissler * @param[in] objPath - The Dbus object path 29dd2c6fdcSAndrew Geissler */ 300b02be92SPatrick Venture Host(sdbusplus::bus::bus& bus, const char* objPath) : 31dd2c6fdcSAndrew Geissler sdbusplus::server::object::object< 32*c7021b86SAndrew Geissler sdbusplus::xyz::openbmc_project::Control::server::Host, 33*c7021b86SAndrew Geissler sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware>( 34*c7021b86SAndrew Geissler bus, objPath), 353eb117a3SVishwanatha Subbanna bus(bus) 363eb117a3SVishwanatha Subbanna { 373eb117a3SVishwanatha Subbanna // Nothing to do 383eb117a3SVishwanatha Subbanna } 3962817fa9SAndrew Geissler 4062817fa9SAndrew Geissler /** @brief Send input command to host 413eb117a3SVishwanatha Subbanna * Note that the command will be queued in a FIFO if 423eb117a3SVishwanatha Subbanna * other commands to the host have yet to be run 4362817fa9SAndrew Geissler * 4462817fa9SAndrew Geissler * @param[in] command - Input command to execute 4562817fa9SAndrew Geissler */ 4662817fa9SAndrew Geissler void execute(Command command) override; 471b9d4e5cSAndrew Geissler 48*c7021b86SAndrew Geissler /** @brief Override reads to CurrentFirmwareCondition */ 49*c7021b86SAndrew Geissler FirmwareCondition currentFirmwareCondition() const override; 50*c7021b86SAndrew Geissler 511b9d4e5cSAndrew Geissler private: 523eb117a3SVishwanatha Subbanna /** @brief sdbusplus DBus bus connection. */ 531b9d4e5cSAndrew Geissler sdbusplus::bus::bus& bus; 5412866370SAndrew Geissler 553eb117a3SVishwanatha Subbanna /** @brief Callback function to be invoked by command manager 563eb117a3SVishwanatha Subbanna * 573eb117a3SVishwanatha Subbanna * @detail Conveys the status of the last Host bound command. 583eb117a3SVishwanatha Subbanna * Depending on the status, a CommandComplete or 593eb117a3SVishwanatha Subbanna * CommandFailure signal would be sent 603eb117a3SVishwanatha Subbanna * 613eb117a3SVishwanatha Subbanna * @param[in] cmd - IPMI command and data sent to Host 623eb117a3SVishwanatha Subbanna * @param[in] status - Success or Failure 633eb117a3SVishwanatha Subbanna */ 643eb117a3SVishwanatha Subbanna void commandStatusHandler(IpmiCmdData cmd, bool status); 65dd2c6fdcSAndrew Geissler }; 66dd2c6fdcSAndrew Geissler 673eb117a3SVishwanatha Subbanna } // namespace command 68dd2c6fdcSAndrew Geissler } // namespace host 69dd2c6fdcSAndrew Geissler } // namespace phosphor 70