107655065SVishwanatha Subbanna #pragma once 207655065SVishwanatha Subbanna 3*822eaf6dSWilliam A. Kennington III #include <ipmid-host/cmd-utils.hpp> 407655065SVishwanatha Subbanna #include <org/open_power/Control/Host/server.hpp> 502261c0cSPatrick Venture #include <sdbusplus/bus.hpp> 607655065SVishwanatha Subbanna namespace open_power 707655065SVishwanatha Subbanna { 807655065SVishwanatha Subbanna namespace host 907655065SVishwanatha Subbanna { 1007655065SVishwanatha Subbanna namespace command 1107655065SVishwanatha Subbanna { 1207655065SVishwanatha Subbanna 1307655065SVishwanatha Subbanna namespace Base = sdbusplus::org::open_power::Control::server; 1407655065SVishwanatha Subbanna using IpmiCmdData = phosphor::host::command::IpmiCmdData; 1507655065SVishwanatha Subbanna 1607655065SVishwanatha Subbanna /** @class Host 1707655065SVishwanatha Subbanna * @brief OpenBMC control host interface implementation. 1807655065SVishwanatha Subbanna * @details A concrete implementation for org.open_power.Control.Host 1907655065SVishwanatha Subbanna * DBus API. 2007655065SVishwanatha Subbanna */ 2107655065SVishwanatha Subbanna class Host : public sdbusplus::server::object::object<Base::Host> 2207655065SVishwanatha Subbanna { 2307655065SVishwanatha Subbanna public: 2407655065SVishwanatha Subbanna /** @brief Constructs Host Control Interface 2507655065SVishwanatha Subbanna * 2607655065SVishwanatha Subbanna * @param[in] bus - The Dbus bus object 2707655065SVishwanatha Subbanna * @param[in] objPath - The Dbus object path 2807655065SVishwanatha Subbanna */ 2902261c0cSPatrick Venture Host(sdbusplus::bus::bus& bus, const char* objPath) : 3002261c0cSPatrick Venture sdbusplus::server::object::object<Base::Host>(bus, objPath), bus(bus) 3107655065SVishwanatha Subbanna { 3207655065SVishwanatha Subbanna // Nothing to do 3307655065SVishwanatha Subbanna } 3407655065SVishwanatha Subbanna 3507655065SVishwanatha Subbanna /** @brief Sends input command to host 3607655065SVishwanatha Subbanna * Note that the command will be queued in a FIFO if 3707655065SVishwanatha Subbanna * other commands to the host have yet to be run 3807655065SVishwanatha Subbanna * 3907655065SVishwanatha Subbanna * @param[in] command - Input command to execute 4007655065SVishwanatha Subbanna * @param[in] data - Data associated with the command 4107655065SVishwanatha Subbanna */ 4207655065SVishwanatha Subbanna void execute(Command command, 4307655065SVishwanatha Subbanna sdbusplus::message::variant<uint8_t> data) override; 4407655065SVishwanatha Subbanna 4507655065SVishwanatha Subbanna private: 4607655065SVishwanatha Subbanna /** @brief sdbusplus DBus bus connection. */ 4707655065SVishwanatha Subbanna sdbusplus::bus::bus& bus; 4807655065SVishwanatha Subbanna 4907655065SVishwanatha Subbanna /** @brief Callback function to be invoked by command manager 5007655065SVishwanatha Subbanna * 5107655065SVishwanatha Subbanna * @detail Conveys the status of the last Host bound command. 5207655065SVishwanatha Subbanna * Depending on the status, a CommandComplete or 5307655065SVishwanatha Subbanna * CommandFailure signal would be sent 5407655065SVishwanatha Subbanna * 5507655065SVishwanatha Subbanna * @param[in] cmd - IPMI command and data sent to Host 5607655065SVishwanatha Subbanna * @param[in] status - Success or Failure 5707655065SVishwanatha Subbanna */ 5807655065SVishwanatha Subbanna void commandStatusHandler(IpmiCmdData cmd, bool status); 5907655065SVishwanatha Subbanna }; 6007655065SVishwanatha Subbanna 6107655065SVishwanatha Subbanna } // namespace command 6207655065SVishwanatha Subbanna } // namespace host 6302261c0cSPatrick Venture } // namespace open_power 64