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