1dd2c6fdcSAndrew Geissler #pragma once 2dd2c6fdcSAndrew Geissler 30b02be92SPatrick Venture #include <host-cmd-manager.hpp> 4dd2c6fdcSAndrew Geissler #include <sdbusplus/bus.hpp> 5c7021b86SAndrew 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 15c7021b86SAndrew Geissler * @brief OpenBMC control and condition host interface implementation. 16dd2c6fdcSAndrew Geissler * @details A concrete implementation for xyz.openbmc_project.Control.Host 17c7021b86SAndrew Geissler * and xyz.openbmc_project.Condition.HostFirmware DBus API's. 18dd2c6fdcSAndrew Geissler */ 19fbc6c9d7SPatrick Williams class Host : 20fbc6c9d7SPatrick Williams public sdbusplus::server::object_t< 21*523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::control::Host, 22*523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::condition::HostFirmware> 23dd2c6fdcSAndrew Geissler { 24dd2c6fdcSAndrew Geissler public: 25c7021b86SAndrew 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 */ Host(sdbusplus::bus_t & bus,const char * objPath)305d82f474SPatrick Williams Host(sdbusplus::bus_t& bus, const char* objPath) : 315d82f474SPatrick Williams sdbusplus::server::object_t< 32*523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::control::Host, 33*523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>( 34c7021b86SAndrew 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 48c7021b86SAndrew Geissler /** @brief Override reads to CurrentFirmwareCondition */ 49c7021b86SAndrew Geissler FirmwareCondition currentFirmwareCondition() const override; 50c7021b86SAndrew Geissler 511b9d4e5cSAndrew Geissler private: 523eb117a3SVishwanatha Subbanna /** @brief sdbusplus DBus bus connection. */ 535d82f474SPatrick Williams sdbusplus::bus_t& 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