1use status::NvAPI_Status;
2use handles::NvPhysicalGpuHandle;
3
4nvapi! {
5 pub type GPU_GetTachReadingFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, pValue: *mut u32) -> NvAPI_Status;
6
7 pub unsafe fn NvAPI_GPU_GetTachReading;
9}
10
11pub mod private {
13 use status::NvAPI_Status;
14 use handles::NvPhysicalGpuHandle;
15
16 pub const NVAPI_MIN_COOLER_LEVEL: usize = 0;
17 pub const NVAPI_MAX_COOLER_LEVEL: usize = 100;
18 pub const NVAPI_MAX_COOLER_LEVELS: usize = 24;
19 pub const NVAPI_MAX_COOLERS_PER_GPU: usize = 3;
20
21 nvenum! {
22 pub enum NV_COOLER_TYPE / CoolerType {
23 NVAPI_COOLER_TYPE_NONE / None = 0,
24 NVAPI_COOLER_TYPE_FAN / Fan = 1,
25 NVAPI_COOLER_TYPE_WATER / Water = 2,
26 NVAPI_COOLER_TYPE_LIQUID_NO2 / LiquidNO2 = 3,
27 }
28 }
29
30 nvenum_display! {
31 CoolerType => _
32 }
33
34 nvenum! {
35 pub enum NV_COOLER_CONTROLLER / CoolerController {
36 NVAPI_COOLER_CONTROLLER_NONE / None = 0,
37 NVAPI_COOLER_CONTROLLER_ADI / ADI = 1,
38 NVAPI_COOLER_CONTROLLER_INTERNAL / Internal = 2,
39 }
40 }
41
42 nvenum_display! {
43 CoolerController => _
44 }
45
46 nvenum! {
47 pub enum NV_COOLER_POLICY / CoolerPolicy {
48 NVAPI_COOLER_POLICY_NONE / None = 0,
49 NVAPI_COOLER_POLICY_MANUAL / Manual = 1,
51 NVAPI_COOLER_POLICY_PERF / Performance = 2,
53 NVAPI_COOLER_POLICY_TEMPERATURE_DISCRETE / TemperatureDiscrete = 4,
55 NVAPI_COOLER_POLICY_TEMPERATURE_CONTINUOUS / TemperatureContinuous = 8,
57 NVAPI_COOLER_POLICY_HYBRID / Hybrid = 9, NVAPI_COOLER_POLICY_SILENT / Silent = 16,
61 NVAPI_COOLER_POLICY_UNKNOWN_32 / Unknown32 = 32,
63 }
64 }
65
66 nvenum_display! {
67 CoolerPolicy => {
68 TemperatureDiscrete = "Discrete Thermal",
69 TemperatureContinuous = "Continuous Thermal",
70 Silent = "Silent",
71 _ = _,
72 }
73 }
74
75 nvenum! {
76 pub enum NV_COOLER_TARGET / CoolerTarget {
77 NVAPI_COOLER_TARGET_NONE / None = 0,
78 NVAPI_COOLER_TARGET_GPU / GPU = 1,
79 NVAPI_COOLER_TARGET_MEMORY / Memory = 2,
80 NVAPI_COOLER_TARGET_POWER_SUPPLY / PowerSupply = 4,
81 NVAPI_COOLER_TARGET_ALL / All = 7,
83 }
84 }
85
86 nvenum_display! {
87 CoolerTarget => {
88 GPU = "Core",
89 PowerSupply = "VRM",
90 _ = _,
91 }
92 }
93
94 nvenum! {
95 pub enum NV_COOLER_CONTROL / CoolerControl {
96 NVAPI_COOLER_CONTROL_NONE / None = 0,
97 NVAPI_COOLER_CONTROL_TOGGLE / Toggle = 1,
99 NVAPI_COOLER_CONTROL_VARIABLE / Variable = 2,
101 }
102 }
103
104 nvenum_display! {
105 CoolerControl => _
106 }
107
108 nvenum! {
109 pub enum NV_COOLER_ACTIVITY_LEVEL / CoolerActivityLevel {
110 NVAPI_INACTIVE / Inactive = 0,
111 NVAPI_ACTIVE / Active = 1,
112 }
113 }
114
115 impl CoolerActivityLevel {
116 pub fn get(&self) -> bool {
117 match *self {
118 CoolerActivityLevel::Active => true,
119 CoolerActivityLevel::Inactive => false,
120 }
121 }
122 }
123
124 nvstruct! {
125 pub struct NV_GPU_COOLER_SETTINGS_COOLER {
126 pub type_: NV_COOLER_TYPE,
128 pub controller: NV_COOLER_CONTROLLER,
130 pub defaultMinLevel: u32,
132 pub defaultMaxLevel: u32,
134 pub currentMinLevel: u32,
136 pub currentMaxLevel: u32,
138 pub currentLevel: u32,
140 pub defaultPolicy: NV_COOLER_POLICY,
142 pub currentPolicy: NV_COOLER_POLICY,
144 pub target: NV_COOLER_TARGET,
146 pub controlType: NV_COOLER_CONTROL,
148 pub active: NV_COOLER_ACTIVITY_LEVEL,
150 }
151 }
152
153 nvstruct! {
154 pub struct NV_GPU_COOLER_SETTINGS_V1 {
155 pub version: u32,
156 pub count: u32,
157 pub cooler: [NV_GPU_COOLER_SETTINGS_COOLER; NVAPI_MAX_COOLERS_PER_GPU],
158 }
159 }
160
161 const NV_GPU_COOLER_SETTINGS_COOLER_SIZE: usize = 4 * 12;
162
163 nvversion! { NV_GPU_COOLER_SETTINGS_VER_1(NV_GPU_COOLER_SETTINGS_V1 = 4 * 2 + NV_GPU_COOLER_SETTINGS_COOLER_SIZE * NVAPI_MAX_COOLERS_PER_GPU, 1) }
164 nvversion! { NV_GPU_COOLER_SETTINGS_VER = NV_GPU_COOLER_SETTINGS_VER_1 }
165
166 pub type NV_GPU_COOLER_SETTINGS = NV_GPU_COOLER_SETTINGS_V1;
167
168 nvapi! {
169 pub type GPU_GetCoolerSettingsFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: u32, pCoolerInfo: *mut NV_GPU_COOLER_SETTINGS) -> NvAPI_Status;
170
171 pub unsafe fn NvAPI_GPU_GetCoolerSettings;
178 }
179
180 nvstruct! {
181 pub struct NV_GPU_SETCOOLER_LEVEL_COOLER {
182 pub currentLevel: u32,
184 pub currentPolicy: NV_COOLER_POLICY,
186 }
187 }
188
189 nvstruct! {
190 pub struct NV_GPU_SETCOOLER_LEVEL_V1 {
191 pub version: u32,
192 pub cooler: [NV_GPU_SETCOOLER_LEVEL_COOLER; NVAPI_MAX_COOLERS_PER_GPU],
193 }
194 }
195
196 const NV_GPU_SETCOOLER_LEVEL_COOLER_SIZE: usize = 4 * 2;
197
198 nvversion! { NV_GPU_SETCOOLER_LEVEL_VER_1(NV_GPU_SETCOOLER_LEVEL_V1 = 4 + NV_GPU_SETCOOLER_LEVEL_COOLER_SIZE * NVAPI_MAX_COOLERS_PER_GPU, 1) }
199 nvversion! { NV_GPU_SETCOOLER_LEVEL_VER = NV_GPU_SETCOOLER_LEVEL_VER_1 }
200
201 pub type NV_GPU_SETCOOLER_LEVEL = NV_GPU_SETCOOLER_LEVEL_V1;
202
203 nvapi! {
204 pub type GPU_SetCoolerLevelsFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: u32, pCoolerLevels: *const NV_GPU_SETCOOLER_LEVEL) -> NvAPI_Status;
205
206 pub unsafe fn NvAPI_GPU_SetCoolerLevels;
219 }
220
221 nvapi! {
222 pub type GPU_RestoreCoolerSettingsFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: *const u32, coolerCount: u32) -> NvAPI_Status;
223
224 pub unsafe fn NvAPI_GPU_RestoreCoolerSettings;
231 }
232
233 nvstruct! {
234 pub struct NV_GPU_COOLER_POLICY_LEVEL {
235 pub levelId: u32,
237 pub currentLevel: u32,
239 pub defaultLevel: u32,
241 }
242 }
243
244 const NV_GPU_COOLER_POLICY_LEVEL_SIZE: usize = 4 * 3;
245
246 nvstruct! {
247 pub struct NV_GPU_COOLER_POLICY_TABLE_V1 {
248 pub version: u32,
250 pub policy: NV_COOLER_POLICY,
252 pub policyCoolerLevel: [NV_GPU_COOLER_POLICY_LEVEL; NVAPI_MAX_COOLER_LEVELS],
253 }
254 }
255
256 nvversion! { NV_GPU_COOLER_POLICY_TABLE_VER_1(NV_GPU_COOLER_POLICY_TABLE_V1 = 4 * 2 + NV_GPU_COOLER_POLICY_LEVEL_SIZE * NVAPI_MAX_COOLER_LEVELS, 1) }
257 nvversion! { NV_GPU_COOLER_POLICY_TABLE_VER = NV_GPU_COOLER_POLICY_TABLE_VER_1 }
258
259 pub type NV_GPU_COOLER_POLICY_TABLE = NV_GPU_COOLER_POLICY_TABLE_V1;
260
261 nvapi! {
262 pub type GPU_GetCoolerPolicyTableFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: u32, pCoolerTable: *mut NV_GPU_COOLER_POLICY_TABLE, count: *mut u32) -> NvAPI_Status;
263
264 pub unsafe fn NvAPI_GPU_GetCoolerPolicyTable;
267 }
268
269 nvapi! {
270 pub type GPU_SetCoolerPolicyTableFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: u32, pCoolerTable: *const NV_GPU_COOLER_POLICY_TABLE, count: u32) -> NvAPI_Status;
271
272 pub unsafe fn NvAPI_GPU_SetCoolerPolicyTable;
279 }
280
281 nvapi! {
282 pub type GPU_RestoreCoolerPolicyTableFn = extern "C" fn(hPhysicalGPU: NvPhysicalGpuHandle, coolerIndex: *const u32, coolerCount: u32, policy: NV_COOLER_POLICY) -> NvAPI_Status;
283
284 pub unsafe fn NvAPI_GPU_RestoreCoolerPolicyTable;
291 }
292}