1 #pragma once 2 3 #include <string> 4 #include <vector> 5 #include <sdbusplus/bus.hpp> 6 #include <sdbusplus/server/object.hpp> 7 #include "org/open_power/OCC/PassThrough/server.hpp" 8 #include "config.h" 9 10 namespace open_power 11 { 12 namespace occ 13 { 14 namespace pass_through 15 { 16 17 /** @brief Make occ pass-through d-bus object pathname 18 * @param[in] occ - occ name 19 * @returns occ pass-through path 20 */ 21 inline auto object(const std::string& occ) 22 { 23 return std::string(OCC_PASS_THROUGH_ROOT) + 24 '/' + 25 occ; 26 } 27 28 /** @brief Put occ pass through objects on the bus 29 */ 30 void run(); 31 32 using Iface = sdbusplus::server::object::object< 33 sdbusplus::org::open_power::OCC::server::PassThrough>; 34 35 /** @class PassThrough 36 * @brief Implements org.open_power.OCC.PassThrough 37 */ 38 class PassThrough : public Iface 39 { 40 public: 41 PassThrough() = delete; 42 PassThrough(const PassThrough&) = delete; 43 PassThrough& operator=(const PassThrough&) = delete; 44 PassThrough(PassThrough&&) = default; 45 PassThrough& operator=(PassThrough&&) = default; 46 ~PassThrough() = default; 47 48 /** @brief Ctor to put pass-through d-bus object on the bus 49 * @param[in] bus - Bus to attach to 50 * @param[in] path - Path to attach at 51 */ 52 PassThrough(sdbusplus::bus::bus& bus, 53 const char* path); 54 55 /** @brief Pass through command to OCC 56 * @param[in] command - command to pass-through 57 * @returns OCC response as an array 58 */ 59 std::vector<std::int32_t> 60 send(std::vector<std::int32_t> command) override; 61 62 private: 63 /** @brief Pass-through occ path on the bus */ 64 std::string path; 65 66 /** @brief OCC device path 67 * For now, here is the hard-coded mapping until 68 * the udev rule is in 69 * occ0 --> /dev/occfifo1 70 * occ1 --> /dev/occfifo2 71 * ... 72 */ 73 std::string devicePath = "/dev/occfifo"; 74 }; 75 76 } // namespace pass_through 77 } // namespace occ 78 } // namespace open_power 79