16b492fbfSDeepak Kodihalli #pragma once 26b492fbfSDeepak Kodihalli 3*94df8c90SGunnar Mills #include <org/open_power/OCC/PassThrough/server.hpp> 46b492fbfSDeepak Kodihalli #include <sdbusplus/bus.hpp> 56b492fbfSDeepak Kodihalli #include <sdbusplus/server/object.hpp> 6*94df8c90SGunnar Mills #include <string> 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 */ 35*94df8c90SGunnar Mills PassThrough(sdbusplus::bus::bus& bus, const char* path); 366b492fbfSDeepak Kodihalli 373e5422edSVishwanatha Subbanna ~PassThrough() 383e5422edSVishwanatha Subbanna { 393e5422edSVishwanatha Subbanna closeDevice(); 403e5422edSVishwanatha Subbanna } 413e5422edSVishwanatha Subbanna 426b492fbfSDeepak Kodihalli /** @brief Pass through command to OCC 436b492fbfSDeepak Kodihalli * @param[in] command - command to pass-through 446b492fbfSDeepak Kodihalli * @returns OCC response as an array 456b492fbfSDeepak Kodihalli */ 46*94df8c90SGunnar Mills std::vector<std::int32_t> send(std::vector<std::int32_t> command) override; 476b492fbfSDeepak Kodihalli 486b492fbfSDeepak Kodihalli private: 496b492fbfSDeepak Kodihalli /** @brief Pass-through occ path on the bus */ 506b492fbfSDeepak Kodihalli std::string path; 51afd21a65SVishwanatha Subbanna 52afd21a65SVishwanatha Subbanna /** @brief OCC device path 53afd21a65SVishwanatha Subbanna * For now, here is the hard-coded mapping until 5438b08d79SVishwanatha Subbanna * the udev rule is in. 553e5422edSVishwanatha Subbanna * occ0 --> /dev/occ1 563e5422edSVishwanatha Subbanna * occ1 --> /dev/occ2 57afd21a65SVishwanatha Subbanna * ... 58afd21a65SVishwanatha Subbanna */ 593e5422edSVishwanatha Subbanna std::string devicePath; 6038b08d79SVishwanatha Subbanna 614f4712d8SEddie James /** @brief Indicates whether or not the OCC is currently active */ 624f4712d8SEddie James bool occActive = false; 634f4712d8SEddie James 643e5422edSVishwanatha Subbanna /** brief file descriptor associated with occ device */ 653e5422edSVishwanatha Subbanna int fd = -1; 6638b08d79SVishwanatha Subbanna 673e5422edSVishwanatha Subbanna /** @brief Subscribe to OCC Status signal 683e5422edSVishwanatha Subbanna * 693e5422edSVishwanatha Subbanna * Once the OCC status gets to active, only then we will get /dev/occ2 703e5422edSVishwanatha Subbanna * populated and hence need to wait on that before opening that 713e5422edSVishwanatha Subbanna */ 723e5422edSVishwanatha Subbanna sdbusplus::bus::match_t activeStatusSignal; 733e5422edSVishwanatha Subbanna 743e5422edSVishwanatha Subbanna /** Opens devicePath and populates file descritor */ 753e5422edSVishwanatha Subbanna void openDevice(); 763e5422edSVishwanatha Subbanna 773e5422edSVishwanatha Subbanna /** Closed the fd associated with opened device */ 783e5422edSVishwanatha Subbanna void closeDevice(); 793e5422edSVishwanatha Subbanna 803e5422edSVishwanatha Subbanna /** @brief Callback function on OCC Status change signals 813e5422edSVishwanatha Subbanna * 823e5422edSVishwanatha Subbanna * @param[in] msg - Data associated with subscribed signal 833e5422edSVishwanatha Subbanna */ 843e5422edSVishwanatha Subbanna void activeStatusEvent(sdbusplus::message::message& msg); 856b492fbfSDeepak Kodihalli }; 866b492fbfSDeepak Kodihalli 876b492fbfSDeepak Kodihalli } // namespace occ 886b492fbfSDeepak Kodihalli } // namespace open_power 89