blob: c7f7511588a02cb3be30722a70d9c6a9771cb818 [file] [log] [blame]
Harshit Aghera560e6af2025-04-21 20:04:56 +05301/*
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 <OcpMctpVdm.hpp>
10
11#include <cstdint>
12#include <span>
13
14namespace gpu
15{
16
17constexpr uint16_t nvidiaPciVendorId = 0x10de;
18
19enum class MessageType : uint8_t
20{
21 DEVICE_CAPABILITY_DISCOVERY = 0,
22 PLATFORM_ENVIRONMENTAL = 3
23};
24
25enum class DeviceCapabilityDiscoveryCommands : uint8_t
26{
27 QUERY_DEVICE_IDENTIFICATION = 0x09,
28};
29
30enum class PlatformEnvironmentalCommands : uint8_t
31{
32 GET_TEMPERATURE_READING = 0x00,
Harshit Aghera5e7decc2025-05-07 16:20:16 +053033 READ_THERMAL_PARAMETERS = 0x02,
Harshit Aghera902c6492025-05-08 15:57:42 +053034 GET_CURRENT_POWER_DRAW = 0x03,
Harshit Aghera560e6af2025-04-21 20:04:56 +053035};
36
37enum class DeviceIdentification : uint8_t
38{
39 DEVICE_GPU = 0
40};
41
42struct QueryDeviceIdentificationRequest
43{
44 ocp::accelerator_management::CommonRequest hdr;
45} __attribute__((packed));
46
47struct QueryDeviceIdentificationResponse
48{
49 ocp::accelerator_management::CommonResponse hdr;
50 uint8_t device_identification;
51 uint8_t instance_id;
52} __attribute__((packed));
53
54struct GetNumericSensorReadingRequest
55{
56 ocp::accelerator_management::CommonRequest hdr;
57 uint8_t sensor_id;
58} __attribute__((packed));
59
60using GetTemperatureReadingRequest = GetNumericSensorReadingRequest;
61
Harshit Aghera5e7decc2025-05-07 16:20:16 +053062using ReadThermalParametersRequest = GetNumericSensorReadingRequest;
63
Harshit Aghera902c6492025-05-08 15:57:42 +053064struct GetCurrentPowerDrawRequest
65{
66 ocp::accelerator_management::CommonRequest hdr;
67 uint8_t sensorId;
68 uint8_t averagingInterval;
69} __attribute__((packed));
70
Harshit Aghera560e6af2025-04-21 20:04:56 +053071struct GetTemperatureReadingResponse
72{
73 ocp::accelerator_management::CommonResponse hdr;
74 int32_t reading;
75} __attribute__((packed));
76
Harshit Aghera5e7decc2025-05-07 16:20:16 +053077struct ReadThermalParametersResponse
78{
79 ocp::accelerator_management::CommonResponse hdr;
80 int32_t threshold;
81} __attribute__((packed));
82
Harshit Aghera902c6492025-05-08 15:57:42 +053083struct GetCurrentPowerDrawResponse
84{
85 ocp::accelerator_management::CommonResponse hdr;
86 uint32_t power;
87} __attribute__((packed));
88
Harshit Aghera560e6af2025-04-21 20:04:56 +053089int packHeader(const ocp::accelerator_management::BindingPciVidInfo& hdr,
90 ocp::accelerator_management::BindingPciVid& msg);
91
92int encodeQueryDeviceIdentificationRequest(uint8_t instanceId,
93 std::span<uint8_t> buf);
94
95int decodeQueryDeviceIdentificationResponse(
96 std::span<const uint8_t> buf,
97 ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
98 uint8_t& deviceIdentification, uint8_t& deviceInstance);
99
100int encodeGetTemperatureReadingRequest(uint8_t instanceId, uint8_t sensorId,
101 std::span<uint8_t> buf);
102
103int decodeGetTemperatureReadingResponse(
104 std::span<const uint8_t> buf,
105 ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
106 double& temperatureReading);
107
Harshit Aghera5e7decc2025-05-07 16:20:16 +0530108int encodeReadThermalParametersRequest(uint8_t instanceId, uint8_t sensorId,
109 std::span<uint8_t> buf);
110
111int decodeReadThermalParametersResponse(
112 std::span<const uint8_t> buf,
113 ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
114 int32_t& threshold);
115
Harshit Aghera902c6492025-05-08 15:57:42 +0530116int encodeGetCurrentPowerDrawRequest(uint8_t instanceId, uint8_t sensorId,
117 uint8_t averagingInterval,
118 std::span<uint8_t> buf);
119
120int decodeGetCurrentPowerDrawResponse(
121 std::span<const uint8_t> buf,
122 ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
123 uint32_t& power);
Harshit Aghera560e6af2025-04-21 20:04:56 +0530124} // namespace gpu