1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & 3 * AFFILIATES. All rights reserved. 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #pragma once 8 9 #include "MctpRequester.hpp" 10 #include "NvidiaDeviceDiscovery.hpp" 11 #include "NvidiaGpuPowerSensor.hpp" 12 #include "NvidiaGpuSensor.hpp" 13 14 #include <NvidiaGpuEnergySensor.hpp> 15 #include <NvidiaGpuVoltageSensor.hpp> 16 #include <boost/asio/io_context.hpp> 17 #include <boost/asio/steady_timer.hpp> 18 #include <sdbusplus/asio/connection.hpp> 19 #include <sdbusplus/asio/object_server.hpp> 20 21 #include <chrono> 22 #include <cstdint> 23 #include <memory> 24 #include <string> 25 #include <vector> 26 27 class GpuDevice 28 { 29 public: 30 GpuDevice(const SensorConfigs& configs, const std::string& name, 31 const std::string& path, 32 const std::shared_ptr<sdbusplus::asio::connection>& conn, 33 uint8_t eid, boost::asio::io_context& io, 34 mctp::MctpRequester& mctpRequester, 35 sdbusplus::asio::object_server& objectServer); 36 37 const std::string& getPath() const 38 { 39 return path; 40 } 41 42 private: 43 void makeSensors(); 44 45 void read(); 46 47 void processTLimitThresholds(uint8_t rc, 48 const std::vector<int32_t>& thresholds); 49 50 uint8_t eid{}; 51 52 std::chrono::milliseconds sensorPollMs; 53 54 boost::asio::steady_timer waitTimer; 55 56 mctp::MctpRequester& mctpRequester; 57 58 std::shared_ptr<sdbusplus::asio::connection> conn; 59 60 sdbusplus::asio::object_server& objectServer; 61 62 std::shared_ptr<NvidiaGpuTempSensor> tempSensor; 63 std::shared_ptr<NvidiaGpuTempSensor> tLimitSensor; 64 std::shared_ptr<NvidiaGpuTempSensor> dramTempSensor; 65 std::shared_ptr<NvidiaGpuPowerSensor> powerSensor; 66 std::shared_ptr<NvidiaGpuEnergySensor> energySensor; 67 std::shared_ptr<NvidiaGpuVoltageSensor> voltageSensor; 68 69 SensorConfigs configs; 70 71 std::string name; 72 73 std::string path; 74 }; 75