16b492fbfSDeepak Kodihalli #pragma once 26b492fbfSDeepak Kodihalli 36b492fbfSDeepak Kodihalli #include <string> 46b492fbfSDeepak Kodihalli #include <sdbusplus/bus.hpp> 56b492fbfSDeepak Kodihalli #include <sdbusplus/server/object.hpp> 69bb065b8SVishwanatha Subbanna #include <org/open_power/OCC/PassThrough/server.hpp> 76b492fbfSDeepak Kodihalli 86b492fbfSDeepak Kodihalli namespace open_power 96b492fbfSDeepak Kodihalli { 106b492fbfSDeepak Kodihalli namespace occ 116b492fbfSDeepak Kodihalli { 126b492fbfSDeepak Kodihalli 136b492fbfSDeepak Kodihalli using Iface = sdbusplus::server::object::object< 146b492fbfSDeepak Kodihalli sdbusplus::org::open_power::OCC::server::PassThrough>; 156b492fbfSDeepak Kodihalli 163e5422edSVishwanatha Subbanna // For waiting on signals 173e5422edSVishwanatha Subbanna namespace sdbusRule = sdbusplus::bus::match::rules; 183e5422edSVishwanatha Subbanna 196b492fbfSDeepak Kodihalli /** @class PassThrough 206b492fbfSDeepak Kodihalli * @brief Implements org.open_power.OCC.PassThrough 216b492fbfSDeepak Kodihalli */ 226b492fbfSDeepak Kodihalli class PassThrough : public Iface 236b492fbfSDeepak Kodihalli { 246b492fbfSDeepak Kodihalli public: 256b492fbfSDeepak Kodihalli PassThrough() = delete; 266b492fbfSDeepak Kodihalli PassThrough(const PassThrough&) = delete; 276b492fbfSDeepak Kodihalli PassThrough& operator=(const PassThrough&) = delete; 286b492fbfSDeepak Kodihalli PassThrough(PassThrough&&) = default; 296b492fbfSDeepak Kodihalli PassThrough& operator=(PassThrough&&) = default; 306b492fbfSDeepak Kodihalli 316b492fbfSDeepak Kodihalli /** @brief Ctor to put pass-through d-bus object on the bus 326b492fbfSDeepak Kodihalli * @param[in] bus - Bus to attach to 336b492fbfSDeepak Kodihalli * @param[in] path - Path to attach at 346b492fbfSDeepak Kodihalli */ 356b492fbfSDeepak Kodihalli PassThrough(sdbusplus::bus::bus& bus, 366b492fbfSDeepak Kodihalli const char* path); 376b492fbfSDeepak Kodihalli 383e5422edSVishwanatha Subbanna ~PassThrough() 393e5422edSVishwanatha Subbanna { 403e5422edSVishwanatha Subbanna closeDevice(); 413e5422edSVishwanatha Subbanna } 423e5422edSVishwanatha Subbanna 436b492fbfSDeepak Kodihalli /** @brief Pass through command to OCC 446b492fbfSDeepak Kodihalli * @param[in] command - command to pass-through 456b492fbfSDeepak Kodihalli * @returns OCC response as an array 466b492fbfSDeepak Kodihalli */ 476b492fbfSDeepak Kodihalli std::vector<std::int32_t> 486b492fbfSDeepak Kodihalli send(std::vector<std::int32_t> command) override; 496b492fbfSDeepak Kodihalli 506b492fbfSDeepak Kodihalli private: 516b492fbfSDeepak Kodihalli /** @brief Pass-through occ path on the bus */ 526b492fbfSDeepak Kodihalli std::string path; 53afd21a65SVishwanatha Subbanna 54afd21a65SVishwanatha Subbanna /** @brief OCC device path 55afd21a65SVishwanatha Subbanna * For now, here is the hard-coded mapping until 5638b08d79SVishwanatha Subbanna * the udev rule is in. 573e5422edSVishwanatha Subbanna * occ0 --> /dev/occ1 583e5422edSVishwanatha Subbanna * occ1 --> /dev/occ2 59afd21a65SVishwanatha Subbanna * ... 60afd21a65SVishwanatha Subbanna */ 613e5422edSVishwanatha Subbanna std::string devicePath; 6238b08d79SVishwanatha Subbanna 63*4f4712d8SEddie James /** @brief Indicates whether or not the OCC is currently active */ 64*4f4712d8SEddie James bool occActive = false; 65*4f4712d8SEddie James 663e5422edSVishwanatha Subbanna /** brief file descriptor associated with occ device */ 673e5422edSVishwanatha Subbanna int fd = -1; 6838b08d79SVishwanatha Subbanna 693e5422edSVishwanatha Subbanna /** @brief Subscribe to OCC Status signal 703e5422edSVishwanatha Subbanna * 713e5422edSVishwanatha Subbanna * Once the OCC status gets to active, only then we will get /dev/occ2 723e5422edSVishwanatha Subbanna * populated and hence need to wait on that before opening that 733e5422edSVishwanatha Subbanna */ 743e5422edSVishwanatha Subbanna sdbusplus::bus::match_t activeStatusSignal; 753e5422edSVishwanatha Subbanna 763e5422edSVishwanatha Subbanna /** Opens devicePath and populates file descritor */ 773e5422edSVishwanatha Subbanna void openDevice(); 783e5422edSVishwanatha Subbanna 793e5422edSVishwanatha Subbanna /** Closed the fd associated with opened device */ 803e5422edSVishwanatha Subbanna void closeDevice(); 813e5422edSVishwanatha Subbanna 823e5422edSVishwanatha Subbanna /** @brief Callback function on OCC Status change signals 833e5422edSVishwanatha Subbanna * 843e5422edSVishwanatha Subbanna * @param[in] msg - Data associated with subscribed signal 853e5422edSVishwanatha Subbanna */ 863e5422edSVishwanatha Subbanna void activeStatusEvent(sdbusplus::message::message& msg); 876b492fbfSDeepak Kodihalli }; 886b492fbfSDeepak Kodihalli 896b492fbfSDeepak Kodihalli } // namespace occ 906b492fbfSDeepak Kodihalli } // namespace open_power 91