xref: /openbmc/dbus-sensors/src/nvidia-gpu/NvidiaPcieDevice.hpp (revision e0b80e1e58bddcf218369f2f9e3ba2002b59b6f9)
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