xref: /openbmc/dbus-sensors/src/nvidia-gpu/NvidiaGpuEnergySensor.hpp (revision 775199d2599981d2c4460c7c1e91a607829e9f0c)
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