xref: /openbmc/dbus-sensors/src/nvidia-gpu/NvidiaGpuPowerSensor.hpp (revision 902c649b631ada141ee5910f7ee2a45026d5b084)
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