/* * SPDX-FileCopyrightText: Copyright OpenBMC Authors * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include "Inventory.hpp" #include "MctpRequester.hpp" #include "NvidiaDeviceDiscovery.hpp" #include "NvidiaGpuPowerSensor.hpp" #include "NvidiaGpuSensor.hpp" #include #include #include #include #include #include #include #include #include #include #include #include class GpuDevice : public std::enable_shared_from_this { public: GpuDevice(const SensorConfigs& configs, const std::string& name, const std::string& path, const std::shared_ptr& conn, uint8_t eid, boost::asio::io_context& io, mctp::MctpRequester& mctpRequester, sdbusplus::asio::object_server& objectServer); const std::string& getPath() const { return path; } void init(); private: void makeSensors(); void read(); void processTLimitThresholds(const std::error_code& ec); void getTLimitThresholds(); uint8_t eid{}; void getNextThermalParameter(); void readThermalParameterCallback(const std::error_code& ec, std::span buffer); std::chrono::milliseconds sensorPollMs; boost::asio::steady_timer waitTimer; mctp::MctpRequester& mctpRequester; std::shared_ptr conn; sdbusplus::asio::object_server& objectServer; std::shared_ptr tempSensor; std::shared_ptr tLimitSensor; std::shared_ptr dramTempSensor; std::shared_ptr powerSensor; std::shared_ptr peakPower; std::shared_ptr energySensor; std::shared_ptr voltageSensor; std::array thermalParamReqMsg{}; std::array thresholds{}; size_t current_threshold_index{}; SensorConfigs configs; std::string name; std::string path; std::shared_ptr inventory; };