1dd2c6fdcSAndrew Geissler #pragma once 2dd2c6fdcSAndrew Geissler 3dd2c6fdcSAndrew Geissler #include <sdbusplus/bus.hpp> 4dd2c6fdcSAndrew Geissler #include <xyz/openbmc_project/Control/Host/server.hpp> 5*3eb117a3SVishwanatha Subbanna #include <host-cmd-manager.hpp> 6dd2c6fdcSAndrew Geissler namespace phosphor 7dd2c6fdcSAndrew Geissler { 8dd2c6fdcSAndrew Geissler namespace host 9dd2c6fdcSAndrew Geissler { 10*3eb117a3SVishwanatha Subbanna namespace command 11*3eb117a3SVishwanatha Subbanna { 1212866370SAndrew Geissler 13dd2c6fdcSAndrew Geissler /** @class Host 14dd2c6fdcSAndrew Geissler * @brief OpenBMC control host interface implementation. 15dd2c6fdcSAndrew Geissler * @details A concrete implementation for xyz.openbmc_project.Control.Host 16dd2c6fdcSAndrew Geissler * DBus API. 17dd2c6fdcSAndrew Geissler */ 18dd2c6fdcSAndrew Geissler class Host : public sdbusplus::server::object::object< 19dd2c6fdcSAndrew Geissler sdbusplus::xyz::openbmc_project::Control::server::Host> 20dd2c6fdcSAndrew Geissler { 21dd2c6fdcSAndrew Geissler public: 22dd2c6fdcSAndrew Geissler /** @brief Constructs Host Control Interface 23dd2c6fdcSAndrew Geissler * 24dd2c6fdcSAndrew Geissler * @param[in] bus - The Dbus bus object 25dd2c6fdcSAndrew Geissler * @param[in] objPath - The Dbus object path 26dd2c6fdcSAndrew Geissler */ 27dd2c6fdcSAndrew Geissler Host(sdbusplus::bus::bus& bus, 28*3eb117a3SVishwanatha Subbanna const char* objPath) : 29dd2c6fdcSAndrew Geissler sdbusplus::server::object::object< 30dd2c6fdcSAndrew Geissler sdbusplus::xyz::openbmc_project::Control::server::Host>( 311b9d4e5cSAndrew Geissler bus, objPath), 32*3eb117a3SVishwanatha Subbanna bus(bus) 33*3eb117a3SVishwanatha Subbanna { 34*3eb117a3SVishwanatha Subbanna // Nothing to do 35*3eb117a3SVishwanatha Subbanna } 3662817fa9SAndrew Geissler 3762817fa9SAndrew Geissler /** @brief Send input command to host 38*3eb117a3SVishwanatha Subbanna * Note that the command will be queued in a FIFO if 39*3eb117a3SVishwanatha Subbanna * other commands to the host have yet to be run 4062817fa9SAndrew Geissler * 4162817fa9SAndrew Geissler * @param[in] command - Input command to execute 4262817fa9SAndrew Geissler */ 4362817fa9SAndrew Geissler void execute(Command command) override; 441b9d4e5cSAndrew Geissler 451b9d4e5cSAndrew Geissler private: 46*3eb117a3SVishwanatha Subbanna /** @brief sdbusplus DBus bus connection. */ 471b9d4e5cSAndrew Geissler sdbusplus::bus::bus& bus; 4812866370SAndrew Geissler 49*3eb117a3SVishwanatha Subbanna /** @brief Callback function to be invoked by command manager 50*3eb117a3SVishwanatha Subbanna * 51*3eb117a3SVishwanatha Subbanna * @detail Conveys the status of the last Host bound command. 52*3eb117a3SVishwanatha Subbanna * Depending on the status, a CommandComplete or 53*3eb117a3SVishwanatha Subbanna * CommandFailure signal would be sent 54*3eb117a3SVishwanatha Subbanna * 55*3eb117a3SVishwanatha Subbanna * @param[in] cmd - IPMI command and data sent to Host 56*3eb117a3SVishwanatha Subbanna * @param[in] status - Success or Failure 57*3eb117a3SVishwanatha Subbanna */ 58*3eb117a3SVishwanatha Subbanna void commandStatusHandler(IpmiCmdData cmd, bool status); 59dd2c6fdcSAndrew Geissler }; 60dd2c6fdcSAndrew Geissler 61*3eb117a3SVishwanatha Subbanna } // namespace command 62dd2c6fdcSAndrew Geissler } // namespace host 63dd2c6fdcSAndrew Geissler } // namespace phosphor 64