1902c649bSHarshit Aghera /* 2902c649bSHarshit Aghera * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & 3902c649bSHarshit Aghera * AFFILIATES. All rights reserved. 4902c649bSHarshit Aghera * SPDX-License-Identifier: Apache-2.0 5902c649bSHarshit Aghera */ 6902c649bSHarshit Aghera 7902c649bSHarshit Aghera #pragma once 8902c649bSHarshit Aghera 9902c649bSHarshit Aghera #include "MctpRequester.hpp" 10902c649bSHarshit Aghera #include "Thresholds.hpp" 11902c649bSHarshit Aghera #include "sensor.hpp" 12902c649bSHarshit Aghera 13902c649bSHarshit Aghera #include <NvidiaGpuMctpVdm.hpp> 14902c649bSHarshit Aghera #include <sdbusplus/asio/connection.hpp> 15902c649bSHarshit Aghera #include <sdbusplus/asio/object_server.hpp> 16902c649bSHarshit Aghera 17902c649bSHarshit Aghera #include <array> 18902c649bSHarshit Aghera #include <cstdint> 19902c649bSHarshit Aghera #include <memory> 20902c649bSHarshit Aghera #include <string> 21902c649bSHarshit Aghera #include <vector> 22902c649bSHarshit Aghera 23902c649bSHarshit Aghera constexpr uint8_t gpuPowerSensorId{0}; 24902c649bSHarshit Aghera 25902c649bSHarshit Aghera struct NvidiaGpuPowerSensor : public Sensor 26902c649bSHarshit Aghera { 27902c649bSHarshit Aghera public: 28902c649bSHarshit Aghera NvidiaGpuPowerSensor( 29902c649bSHarshit Aghera std::shared_ptr<sdbusplus::asio::connection>& conn, 30902c649bSHarshit Aghera mctp::MctpRequester& mctpRequester, const std::string& name, 31902c649bSHarshit Aghera const std::string& sensorConfiguration, uint8_t eid, uint8_t sensorId, 32902c649bSHarshit Aghera sdbusplus::asio::object_server& objectServer, 33902c649bSHarshit Aghera std::vector<thresholds::Threshold>&& thresholdData); 34902c649bSHarshit Aghera 35902c649bSHarshit Aghera ~NvidiaGpuPowerSensor() override; 36902c649bSHarshit Aghera 37902c649bSHarshit Aghera void checkThresholds() override; 38902c649bSHarshit Aghera 39902c649bSHarshit Aghera void update(); 40902c649bSHarshit Aghera 41902c649bSHarshit Aghera private: 42902c649bSHarshit Aghera void processResponse(int sendRecvMsgResult); 43902c649bSHarshit Aghera 44902c649bSHarshit Aghera uint8_t eid{}; 45902c649bSHarshit Aghera 46902c649bSHarshit Aghera uint8_t sensorId; 47902c649bSHarshit Aghera 48*aba6fcacSEd Tanous uint8_t averagingInterval = 0; 49902c649bSHarshit Aghera 50902c649bSHarshit Aghera std::shared_ptr<sdbusplus::asio::connection> conn; 51902c649bSHarshit Aghera 52902c649bSHarshit Aghera mctp::MctpRequester& mctpRequester; 53902c649bSHarshit Aghera 54902c649bSHarshit Aghera sdbusplus::asio::object_server& objectServer; 55902c649bSHarshit Aghera 56902c649bSHarshit Aghera std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawRequest)> request{}; 57902c649bSHarshit Aghera 58902c649bSHarshit Aghera std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawResponse)> response{}; 59902c649bSHarshit Aghera }; 60