16b492fbfSDeepak Kodihalli #pragma once 26b492fbfSDeepak Kodihalli 36b492fbfSDeepak Kodihalli #include <string> 46b492fbfSDeepak Kodihalli #include <vector> 56b492fbfSDeepak Kodihalli #include <sdbusplus/bus.hpp> 66b492fbfSDeepak Kodihalli #include <sdbusplus/server/object.hpp> 76b492fbfSDeepak Kodihalli #include "org/open_power/OCC/PassThrough/server.hpp" 86b492fbfSDeepak Kodihalli #include "config.h" 96b492fbfSDeepak Kodihalli 106b492fbfSDeepak Kodihalli namespace open_power 116b492fbfSDeepak Kodihalli { 126b492fbfSDeepak Kodihalli namespace occ 136b492fbfSDeepak Kodihalli { 146b492fbfSDeepak Kodihalli namespace pass_through 156b492fbfSDeepak Kodihalli { 166b492fbfSDeepak Kodihalli 176b492fbfSDeepak Kodihalli /** @brief Make occ pass-through d-bus object pathname 186b492fbfSDeepak Kodihalli * @param[in] occ - occ name 196b492fbfSDeepak Kodihalli * @returns occ pass-through path 206b492fbfSDeepak Kodihalli */ 216b492fbfSDeepak Kodihalli inline auto object(const std::string& occ) 226b492fbfSDeepak Kodihalli { 236b492fbfSDeepak Kodihalli return std::string(OCC_PASS_THROUGH_ROOT) + 246b492fbfSDeepak Kodihalli '/' + 256b492fbfSDeepak Kodihalli occ; 266b492fbfSDeepak Kodihalli } 276b492fbfSDeepak Kodihalli 286b492fbfSDeepak Kodihalli /** @brief Put occ pass through objects on the bus 296b492fbfSDeepak Kodihalli */ 306b492fbfSDeepak Kodihalli void run(); 316b492fbfSDeepak Kodihalli 326b492fbfSDeepak Kodihalli using Iface = sdbusplus::server::object::object< 336b492fbfSDeepak Kodihalli sdbusplus::org::open_power::OCC::server::PassThrough>; 346b492fbfSDeepak Kodihalli 356b492fbfSDeepak Kodihalli /** @class PassThrough 366b492fbfSDeepak Kodihalli * @brief Implements org.open_power.OCC.PassThrough 376b492fbfSDeepak Kodihalli */ 386b492fbfSDeepak Kodihalli class PassThrough : public Iface 396b492fbfSDeepak Kodihalli { 406b492fbfSDeepak Kodihalli public: 416b492fbfSDeepak Kodihalli PassThrough() = delete; 426b492fbfSDeepak Kodihalli PassThrough(const PassThrough&) = delete; 436b492fbfSDeepak Kodihalli PassThrough& operator=(const PassThrough&) = delete; 446b492fbfSDeepak Kodihalli PassThrough(PassThrough&&) = default; 456b492fbfSDeepak Kodihalli PassThrough& operator=(PassThrough&&) = default; 466b492fbfSDeepak Kodihalli ~PassThrough() = default; 476b492fbfSDeepak Kodihalli 486b492fbfSDeepak Kodihalli /** @brief Ctor to put pass-through d-bus object on the bus 496b492fbfSDeepak Kodihalli * @param[in] bus - Bus to attach to 506b492fbfSDeepak Kodihalli * @param[in] path - Path to attach at 516b492fbfSDeepak Kodihalli */ 526b492fbfSDeepak Kodihalli PassThrough(sdbusplus::bus::bus& bus, 536b492fbfSDeepak Kodihalli const char* path); 546b492fbfSDeepak Kodihalli 556b492fbfSDeepak Kodihalli /** @brief Pass through command to OCC 566b492fbfSDeepak Kodihalli * @param[in] command - command to pass-through 576b492fbfSDeepak Kodihalli * @returns OCC response as an array 586b492fbfSDeepak Kodihalli */ 596b492fbfSDeepak Kodihalli std::vector<std::int32_t> 606b492fbfSDeepak Kodihalli send(std::vector<std::int32_t> command) override; 616b492fbfSDeepak Kodihalli 626b492fbfSDeepak Kodihalli private: 636b492fbfSDeepak Kodihalli /** @brief Pass-through occ path on the bus */ 646b492fbfSDeepak Kodihalli std::string path; 65*afd21a65SVishwanatha Subbanna 66*afd21a65SVishwanatha Subbanna /** @brief OCC device path 67*afd21a65SVishwanatha Subbanna * For now, here is the hard-coded mapping until 68*afd21a65SVishwanatha Subbanna * the udev rule is in 69*afd21a65SVishwanatha Subbanna * occ0 --> /dev/occfifo1 70*afd21a65SVishwanatha Subbanna * occ1 --> /dev/occfifo2 71*afd21a65SVishwanatha Subbanna * ... 72*afd21a65SVishwanatha Subbanna */ 73*afd21a65SVishwanatha Subbanna std::string devicePath = "/dev/occfifo"; 746b492fbfSDeepak Kodihalli }; 756b492fbfSDeepak Kodihalli 766b492fbfSDeepak Kodihalli } // namespace pass_through 776b492fbfSDeepak Kodihalli } // namespace occ 786b492fbfSDeepak Kodihalli } // namespace open_power 79