1*e0b80e1eSHarshit Aghera /* 2*e0b80e1eSHarshit Aghera * SPDX-FileCopyrightText: Copyright OpenBMC Authors 3*e0b80e1eSHarshit Aghera * SPDX-License-Identifier: Apache-2.0 4*e0b80e1eSHarshit Aghera */ 5*e0b80e1eSHarshit Aghera 6*e0b80e1eSHarshit Aghera #pragma once 7*e0b80e1eSHarshit Aghera 8*e0b80e1eSHarshit Aghera #include "MctpRequester.hpp" 9*e0b80e1eSHarshit Aghera #include "NvidiaDeviceDiscovery.hpp" 10*e0b80e1eSHarshit Aghera #include "NvidiaPcieInterface.hpp" 11*e0b80e1eSHarshit Aghera 12*e0b80e1eSHarshit Aghera #include <boost/asio/io_context.hpp> 13*e0b80e1eSHarshit Aghera #include <boost/asio/steady_timer.hpp> 14*e0b80e1eSHarshit Aghera #include <sdbusplus/asio/connection.hpp> 15*e0b80e1eSHarshit Aghera #include <sdbusplus/asio/object_server.hpp> 16*e0b80e1eSHarshit Aghera 17*e0b80e1eSHarshit Aghera #include <chrono> 18*e0b80e1eSHarshit Aghera #include <cstdint> 19*e0b80e1eSHarshit Aghera #include <memory> 20*e0b80e1eSHarshit Aghera #include <string> 21*e0b80e1eSHarshit Aghera 22*e0b80e1eSHarshit Aghera constexpr const char* pcieDevicePathPrefix = 23*e0b80e1eSHarshit Aghera "/xyz/openbmc_project/inventory/pcie_devices/"; 24*e0b80e1eSHarshit Aghera 25*e0b80e1eSHarshit Aghera class PcieDevice 26*e0b80e1eSHarshit Aghera { 27*e0b80e1eSHarshit Aghera public: 28*e0b80e1eSHarshit Aghera PcieDevice(const SensorConfigs& configs, const std::string& name, 29*e0b80e1eSHarshit Aghera const std::string& path, 30*e0b80e1eSHarshit Aghera const std::shared_ptr<sdbusplus::asio::connection>& conn, 31*e0b80e1eSHarshit Aghera uint8_t eid, boost::asio::io_context& io, 32*e0b80e1eSHarshit Aghera mctp::MctpRequester& mctpRequester, 33*e0b80e1eSHarshit Aghera sdbusplus::asio::object_server& objectServer); 34*e0b80e1eSHarshit Aghera getPath() const35*e0b80e1eSHarshit Aghera const std::string& getPath() const 36*e0b80e1eSHarshit Aghera { 37*e0b80e1eSHarshit Aghera return path; 38*e0b80e1eSHarshit Aghera } 39*e0b80e1eSHarshit Aghera 40*e0b80e1eSHarshit Aghera void init(); 41*e0b80e1eSHarshit Aghera 42*e0b80e1eSHarshit Aghera private: 43*e0b80e1eSHarshit Aghera void makeSensors(); 44*e0b80e1eSHarshit Aghera 45*e0b80e1eSHarshit Aghera void read(); 46*e0b80e1eSHarshit Aghera 47*e0b80e1eSHarshit Aghera uint8_t eid{}; 48*e0b80e1eSHarshit Aghera 49*e0b80e1eSHarshit Aghera std::chrono::milliseconds sensorPollMs; 50*e0b80e1eSHarshit Aghera 51*e0b80e1eSHarshit Aghera boost::asio::steady_timer waitTimer; 52*e0b80e1eSHarshit Aghera 53*e0b80e1eSHarshit Aghera mctp::MctpRequester& mctpRequester; 54*e0b80e1eSHarshit Aghera 55*e0b80e1eSHarshit Aghera std::shared_ptr<sdbusplus::asio::connection> conn; 56*e0b80e1eSHarshit Aghera 57*e0b80e1eSHarshit Aghera sdbusplus::asio::object_server& objectServer; 58*e0b80e1eSHarshit Aghera 59*e0b80e1eSHarshit Aghera SensorConfigs configs; 60*e0b80e1eSHarshit Aghera 61*e0b80e1eSHarshit Aghera std::string name; 62*e0b80e1eSHarshit Aghera 63*e0b80e1eSHarshit Aghera std::string path; 64*e0b80e1eSHarshit Aghera 65*e0b80e1eSHarshit Aghera std::shared_ptr<NvidiaPcieInterface> pcieInterface; 66*e0b80e1eSHarshit Aghera }; 67