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