1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use status::NvAPI_Status;
use handles::NvPhysicalGpuHandle;
nvenum! {
pub enum NV_THERMAL_TARGET / ThermalTarget {
NVAPI_THERMAL_TARGET_NONE / None = 0,
NVAPI_THERMAL_TARGET_GPU / Gpu = 1,
NVAPI_THERMAL_TARGET_MEMORY / Memory = 2,
NVAPI_THERMAL_TARGET_POWER_SUPPLY / PowerSupply = 4,
NVAPI_THERMAL_TARGET_BOARD / Board = 8,
NVAPI_THERMAL_TARGET_VCD_BOARD / VcdBoard = 9,
NVAPI_THERMAL_TARGET_VCD_INLET / VcdInlet = 10,
NVAPI_THERMAL_TARGET_VCD_OUTLET / VcdOutlet = 11,
NVAPI_THERMAL_TARGET_ALL / All = 15,
NVAPI_THERMAL_TARGET_UNKNOWN / Unknown = -1,
}
}
nvenum! {
pub enum NV_THERMAL_CONTROLLER / ThermalController {
NVAPI_THERMAL_CONTROLLER_NONE / None = 0,
NVAPI_THERMAL_CONTROLLER_GPU_INTERNAL / GpuInternal = 1,
NVAPI_THERMAL_CONTROLLER_ADM1032 / Adm1032 = 2,
NVAPI_THERMAL_CONTROLLER_MAX6649 / Max6649 = 3,
NVAPI_THERMAL_CONTROLLER_MAX1617 / Max1617 = 4,
NVAPI_THERMAL_CONTROLLER_LM99 / Lm99 = 5,
NVAPI_THERMAL_CONTROLLER_LM89 / Lm89 = 6,
NVAPI_THERMAL_CONTROLLER_LM64 / Lm64 = 7,
NVAPI_THERMAL_CONTROLLER_ADT7473 / Adt7473 = 8,
NVAPI_THERMAL_CONTROLLER_SBMAX6649 / Sbmax6649 = 9,
NVAPI_THERMAL_CONTROLLER_VBIOSEVT / VbiosEvt = 10,
NVAPI_THERMAL_CONTROLLER_OS / Os = 11,
NVAPI_THERMAL_CONTROLLER_UNKNOWN / Unknown = -1,
}
}
pub const NVAPI_MAX_THERMAL_SENSORS_PER_GPU: usize = 3;
nvstruct! {
pub struct NV_GPU_THERMAL_SETTINGS_V1 {
pub version: u32,
pub count: u32,
pub sensor: [NV_GPU_THERMAL_SETTINGS_SENSOR; NVAPI_MAX_THERMAL_SENSORS_PER_GPU],
}
}
nvstruct! {
pub struct NV_GPU_THERMAL_SETTINGS_SENSOR {
pub controller: NV_THERMAL_CONTROLLER,
pub defaultMinTemp: i32,
pub defaultMaxTemp: i32,
pub currentTemp: i32,
pub target: NV_THERMAL_TARGET,
}
}
pub type NV_GPU_THERMAL_SETTINGS_V2 = NV_GPU_THERMAL_SETTINGS_V1;
pub type NV_GPU_THERMAL_SETTINGS = NV_GPU_THERMAL_SETTINGS_V2;
const NV_GPU_THERMAL_SETTINGS_V1_SIZE: usize = 4 * 2 + (4 * 5) * NVAPI_MAX_THERMAL_SENSORS_PER_GPU;
nvversion! { NV_GPU_THERMAL_SETTINGS_VER_1(NV_GPU_THERMAL_SETTINGS_V1 = NV_GPU_THERMAL_SETTINGS_V1_SIZE, 1) }
nvversion! { NV_GPU_THERMAL_SETTINGS_VER_2(NV_GPU_THERMAL_SETTINGS_V2 = NV_GPU_THERMAL_SETTINGS_V1_SIZE, 2) }
nvversion! { NV_GPU_THERMAL_SETTINGS_VER = NV_GPU_THERMAL_SETTINGS_VER_2 }
nvapi! {
pub type GPU_GetThermalSettingsFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, sensorIndex: u32, pThermalSettings: *mut NV_GPU_THERMAL_SETTINGS) -> NvAPI_Status;
pub unsafe fn NvAPI_GPU_GetThermalSettings;
}