1*902c649bSHarshit Aghera /* 2*902c649bSHarshit Aghera * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & 3*902c649bSHarshit Aghera * AFFILIATES. All rights reserved. 4*902c649bSHarshit Aghera * SPDX-License-Identifier: Apache-2.0 5*902c649bSHarshit Aghera */ 6*902c649bSHarshit Aghera 7*902c649bSHarshit Aghera #pragma once 8*902c649bSHarshit Aghera 9*902c649bSHarshit Aghera #include "MctpRequester.hpp" 10*902c649bSHarshit Aghera #include "Thresholds.hpp" 11*902c649bSHarshit Aghera #include "sensor.hpp" 12*902c649bSHarshit Aghera 13*902c649bSHarshit Aghera #include <NvidiaGpuMctpVdm.hpp> 14*902c649bSHarshit Aghera #include <sdbusplus/asio/connection.hpp> 15*902c649bSHarshit Aghera #include <sdbusplus/asio/object_server.hpp> 16*902c649bSHarshit Aghera 17*902c649bSHarshit Aghera #include <array> 18*902c649bSHarshit Aghera #include <cstdint> 19*902c649bSHarshit Aghera #include <memory> 20*902c649bSHarshit Aghera #include <string> 21*902c649bSHarshit Aghera #include <vector> 22*902c649bSHarshit Aghera 23*902c649bSHarshit Aghera constexpr uint8_t gpuPowerSensorId{0}; 24*902c649bSHarshit Aghera 25*902c649bSHarshit Aghera struct NvidiaGpuPowerSensor : public Sensor 26*902c649bSHarshit Aghera { 27*902c649bSHarshit Aghera public: 28*902c649bSHarshit Aghera NvidiaGpuPowerSensor( 29*902c649bSHarshit Aghera std::shared_ptr<sdbusplus::asio::connection>& conn, 30*902c649bSHarshit Aghera mctp::MctpRequester& mctpRequester, const std::string& name, 31*902c649bSHarshit Aghera const std::string& sensorConfiguration, uint8_t eid, uint8_t sensorId, 32*902c649bSHarshit Aghera sdbusplus::asio::object_server& objectServer, 33*902c649bSHarshit Aghera std::vector<thresholds::Threshold>&& thresholdData); 34*902c649bSHarshit Aghera 35*902c649bSHarshit Aghera ~NvidiaGpuPowerSensor() override; 36*902c649bSHarshit Aghera 37*902c649bSHarshit Aghera void checkThresholds() override; 38*902c649bSHarshit Aghera 39*902c649bSHarshit Aghera void update(); 40*902c649bSHarshit Aghera 41*902c649bSHarshit Aghera private: 42*902c649bSHarshit Aghera void processResponse(int sendRecvMsgResult); 43*902c649bSHarshit Aghera 44*902c649bSHarshit Aghera uint8_t eid{}; 45*902c649bSHarshit Aghera 46*902c649bSHarshit Aghera uint8_t sensorId; 47*902c649bSHarshit Aghera 48*902c649bSHarshit Aghera uint8_t averagingInterval; 49*902c649bSHarshit Aghera 50*902c649bSHarshit Aghera std::shared_ptr<sdbusplus::asio::connection> conn; 51*902c649bSHarshit Aghera 52*902c649bSHarshit Aghera mctp::MctpRequester& mctpRequester; 53*902c649bSHarshit Aghera 54*902c649bSHarshit Aghera sdbusplus::asio::object_server& objectServer; 55*902c649bSHarshit Aghera 56*902c649bSHarshit Aghera std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawRequest)> request{}; 57*902c649bSHarshit Aghera 58*902c649bSHarshit Aghera std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawResponse)> response{}; 59*902c649bSHarshit Aghera }; 60