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