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