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