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