1use crate::error::NvmlError;
2use crate::ffi::bindings::*;
3#[cfg(feature = "serde")]
4use serde_derive::{Deserialize, Serialize};
5use wrapcenum_derive::EnumWrapper;
6
7#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11#[wrap(c_enum = "nvmlRestrictedAPI_enum")]
12pub enum Api {
13 #[wrap(c_variant = "NVML_RESTRICTED_API_SET_APPLICATION_CLOCKS")]
20 ApplicationClocks,
21 #[wrap(c_variant = "NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS")]
25 AutoBoostedClocks,
26}
27
28#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
31#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
32#[wrap(c_enum = "nvmlClockType_enum")]
33pub enum Clock {
34 #[wrap(c_variant = "NVML_CLOCK_GRAPHICS")]
36 Graphics,
37 #[wrap(c_variant = "NVML_CLOCK_SM")]
41 SM,
42 #[wrap(c_variant = "NVML_CLOCK_MEM")]
44 Memory,
45 #[wrap(c_variant = "NVML_CLOCK_VIDEO")]
47 Video,
48}
49
50#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
53#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
54#[wrap(c_enum = "nvmlClockId_enum")]
55pub enum ClockId {
56 #[wrap(c_variant = "NVML_CLOCK_ID_CURRENT")]
58 Current,
59 #[wrap(c_variant = "NVML_CLOCK_ID_APP_CLOCK_TARGET")]
61 TargetAppClock,
62 #[wrap(c_variant = "NVML_CLOCK_ID_APP_CLOCK_DEFAULT")]
64 DefaultAppClock,
65 #[wrap(c_variant = "NVML_CLOCK_ID_CUSTOMER_BOOST_MAX")]
67 CustomerMaxBoost,
68}
69
70#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
73#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
74#[wrap(c_enum = "nvmlBrandType_enum")]
75pub enum Brand {
76 #[wrap(c_variant = "NVML_BRAND_UNKNOWN")]
77 Unknown,
78 #[wrap(c_variant = "NVML_BRAND_QUADRO")]
80 Quadro,
81 #[wrap(c_variant = "NVML_BRAND_TESLA")]
83 Tesla,
84 #[wrap(c_variant = "NVML_BRAND_NVS")]
86 NVS,
87 #[wrap(c_variant = "NVML_BRAND_GRID")]
91 GRID,
92 #[wrap(c_variant = "NVML_BRAND_GEFORCE")]
94 GeForce,
95 #[wrap(c_variant = "NVML_BRAND_TITAN")]
97 Titan,
98 #[wrap(c_variant = "NVML_BRAND_NVIDIA_VAPPS")]
100 VApps,
101 #[wrap(c_variant = "NVML_BRAND_NVIDIA_VPC")]
103 VPC,
104 #[wrap(c_variant = "NVML_BRAND_NVIDIA_VCS")]
106 VCS,
107 #[wrap(c_variant = "NVML_BRAND_NVIDIA_VWS")]
109 VWS,
110 #[wrap(c_variant = "NVML_BRAND_NVIDIA_CLOUD_GAMING")]
112 CloudGaming,
113 #[wrap(c_variant = "NVML_BRAND_NVIDIA_VGAMING")]
116 VGaming,
117 #[wrap(c_variant = "NVML_BRAND_QUADRO_RTX")]
119 QuadroRTX,
120 #[wrap(c_variant = "NVML_BRAND_NVIDIA_RTX")]
122 NvidiaRTX,
123 #[wrap(c_variant = "NVML_BRAND_NVIDIA")]
125 Nvidia,
126 #[wrap(c_variant = "NVML_BRAND_GEFORCE_RTX")]
128 GeForceRTX,
129 #[wrap(c_variant = "NVML_BRAND_TITAN_RTX")]
131 TitanRTX,
132}
133
134#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
142#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
143#[wrap(c_enum = "nvmlBridgeChipType_enum")]
144pub enum BridgeChip {
145 #[wrap(c_variant = "NVML_BRIDGE_CHIP_PLX")]
146 PLX,
147 #[wrap(c_variant = "NVML_BRIDGE_CHIP_BRO4")]
148 BRO4,
149}
150
151#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
154#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
155#[wrap(c_enum = "nvmlMemoryErrorType_enum")]
156pub enum MemoryError {
157 #[wrap(c_variant = "NVML_MEMORY_ERROR_TYPE_CORRECTED")]
164 Corrected,
165 #[wrap(c_variant = "NVML_MEMORY_ERROR_TYPE_UNCORRECTED")]
172 Uncorrected,
173}
174
175#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
186#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
187#[wrap(c_enum = "nvmlEccCounterType_enum")]
188pub enum EccCounter {
189 #[wrap(c_variant = "NVML_VOLATILE_ECC")]
191 Volatile,
192 #[wrap(c_variant = "NVML_AGGREGATE_ECC")]
195 Aggregate,
196}
197
198#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
201#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
202#[wrap(c_enum = "nvmlMemoryLocation_enum")]
203pub enum MemoryLocation {
204 #[wrap(c_variant = "NVML_MEMORY_LOCATION_L1_CACHE")]
206 L1Cache,
207 #[wrap(c_variant = "NVML_MEMORY_LOCATION_L2_CACHE")]
209 L2Cache,
210 #[wrap(c_variant = "NVML_MEMORY_LOCATION_DEVICE_MEMORY")]
212 Device,
213 #[wrap(c_variant = "NVML_MEMORY_LOCATION_REGISTER_FILE")]
215 RegisterFile,
216 #[wrap(c_variant = "NVML_MEMORY_LOCATION_TEXTURE_MEMORY")]
218 Texture,
219 #[wrap(c_variant = "NVML_MEMORY_LOCATION_TEXTURE_SHM")]
221 Shared,
222 #[wrap(c_variant = "NVML_MEMORY_LOCATION_CBU")]
223 Cbu,
224 #[wrap(c_variant = "NVML_MEMORY_LOCATION_SRAM")]
226 SRAM,
227}
228
229#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
232#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
233#[wrap(c_enum = "nvmlDriverModel_enum")]
234#[cfg(target_os = "windows")]
235pub enum DriverModel {
236 #[wrap(c_variant = "NVML_DRIVER_WDDM")]
238 WDDM,
239 #[wrap(c_variant = "NVML_DRIVER_WDM")]
241 WDM,
242}
243
244#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
252#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
253#[wrap(c_enum = "nvmlGom_enum")]
254pub enum OperationMode {
255 #[wrap(c_variant = "NVML_GOM_ALL_ON")]
257 AllOn,
258 #[wrap(c_variant = "NVML_GOM_COMPUTE")]
260 Compute,
261 #[wrap(c_variant = "NVML_GOM_LOW_DP")]
264 LowDP,
265}
266
267#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
270#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
271#[wrap(c_enum = "nvmlInforomObject_enum")]
272pub enum InfoRom {
273 #[wrap(c_variant = "NVML_INFOROM_OEM")]
275 OEM,
276 #[wrap(c_variant = "NVML_INFOROM_ECC")]
278 ECC,
279 #[wrap(c_variant = "NVML_INFOROM_POWER")]
281 Power,
282}
283
284#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
288#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
289#[wrap(c_enum = "nvmlPcieUtilCounter_enum")]
290pub enum PcieUtilCounter {
291 #[wrap(c_variant = "NVML_PCIE_UTIL_TX_BYTES")]
292 Send,
293 #[wrap(c_variant = "NVML_PCIE_UTIL_RX_BYTES")]
294 Receive,
295}
296
297#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
309#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
310#[wrap(c_enum = "nvmlPStates_enum")]
311pub enum PerformanceState {
312 #[wrap(c_variant = "NVML_PSTATE_0")]
314 Zero,
315 #[wrap(c_variant = "NVML_PSTATE_1")]
316 One,
317 #[wrap(c_variant = "NVML_PSTATE_2")]
318 Two,
319 #[wrap(c_variant = "NVML_PSTATE_3")]
320 Three,
321 #[wrap(c_variant = "NVML_PSTATE_4")]
322 Four,
323 #[wrap(c_variant = "NVML_PSTATE_5")]
324 Five,
325 #[wrap(c_variant = "NVML_PSTATE_6")]
326 Six,
327 #[wrap(c_variant = "NVML_PSTATE_7")]
328 Seven,
329 #[wrap(c_variant = "NVML_PSTATE_8")]
330 Eight,
331 #[wrap(c_variant = "NVML_PSTATE_9")]
332 Nine,
333 #[wrap(c_variant = "NVML_PSTATE_10")]
334 Ten,
335 #[wrap(c_variant = "NVML_PSTATE_11")]
336 Eleven,
337 #[wrap(c_variant = "NVML_PSTATE_12")]
338 Twelve,
339 #[wrap(c_variant = "NVML_PSTATE_13")]
340 Thirteen,
341 #[wrap(c_variant = "NVML_PSTATE_14")]
342 Fourteen,
343 #[wrap(c_variant = "NVML_PSTATE_15")]
345 Fifteen,
346 #[wrap(c_variant = "NVML_PSTATE_UNKNOWN")]
348 Unknown,
349}
350
351#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
354#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
355#[wrap(c_enum = "nvmlPageRetirementCause_enum")]
356pub enum RetirementCause {
357 #[wrap(c_variant = "NVML_PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS")]
359 MultipleSingleBitEccErrors,
360 #[wrap(c_variant = "NVML_PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR")]
362 DoubleBitEccError,
363}
364
365#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
368#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
369#[wrap(c_enum = "nvmlSamplingType_enum")]
370pub enum Sampling {
371 #[wrap(c_variant = "NVML_TOTAL_POWER_SAMPLES")]
373 Power,
374 #[wrap(c_variant = "NVML_GPU_UTILIZATION_SAMPLES")]
377 GpuUtilization,
378 #[wrap(c_variant = "NVML_MEMORY_UTILIZATION_SAMPLES")]
381 MemoryUtilization,
382 #[wrap(c_variant = "NVML_ENC_UTILIZATION_SAMPLES")]
384 EncoderUtilization,
385 #[wrap(c_variant = "NVML_DEC_UTILIZATION_SAMPLES")]
387 DecoderUtilization,
388 #[wrap(c_variant = "NVML_PROCESSOR_CLK_SAMPLES")]
390 ProcessorClock,
391 #[wrap(c_variant = "NVML_MEMORY_CLK_SAMPLES")]
393 MemoryClock,
394}
395
396#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
398#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
399#[wrap(c_enum = "nvmlTemperatureSensors_enum")]
400pub enum TemperatureSensor {
401 #[wrap(c_variant = "NVML_TEMPERATURE_GPU")]
403 Gpu,
404}
405
406#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
408#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
409#[wrap(c_enum = "nvmlTemperatureThresholds_enum")]
410pub enum TemperatureThreshold {
411 #[wrap(c_variant = "NVML_TEMPERATURE_THRESHOLD_SHUTDOWN")]
413 Shutdown,
414 #[wrap(c_variant = "NVML_TEMPERATURE_THRESHOLD_SLOWDOWN")]
416 Slowdown,
417 #[wrap(c_variant = "NVML_TEMPERATURE_THRESHOLD_MEM_MAX")]
419 MemoryMax,
420 #[wrap(c_variant = "NVML_TEMPERATURE_THRESHOLD_GPU_MAX")]
422 GpuMax,
423}
424
425#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
428#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
429#[wrap(c_enum = "nvmlGpuLevel_enum")]
430pub enum TopologyLevel {
431 #[wrap(c_variant = "NVML_TOPOLOGY_INTERNAL")]
433 Internal,
434 #[wrap(c_variant = "NVML_TOPOLOGY_SINGLE")]
436 Single,
437 #[wrap(c_variant = "NVML_TOPOLOGY_MULTIPLE")]
439 Multiple,
440 #[wrap(c_variant = "NVML_TOPOLOGY_HOSTBRIDGE")]
442 HostBridge,
443 #[wrap(c_variant = "NVML_TOPOLOGY_NODE")]
450 Node,
451 #[wrap(c_variant = "NVML_TOPOLOGY_SYSTEM")]
453 System,
454}
455
456#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
459#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
460#[wrap(c_enum = "nvmlPerfPolicyType_enum")]
461pub enum PerformancePolicy {
462 #[wrap(c_variant = "NVML_PERF_POLICY_POWER")]
463 Power,
464 #[wrap(c_variant = "NVML_PERF_POLICY_THERMAL")]
465 Thermal,
466 #[wrap(c_variant = "NVML_PERF_POLICY_SYNC_BOOST")]
467 SyncBoost,
468 #[wrap(c_variant = "NVML_PERF_POLICY_BOARD_LIMIT")]
469 BoardLimit,
470 #[wrap(c_variant = "NVML_PERF_POLICY_LOW_UTILIZATION")]
471 LowUtilization,
472 #[wrap(c_variant = "NVML_PERF_POLICY_RELIABILITY")]
474 Reliability,
475
476 #[wrap(c_variant = "NVML_PERF_POLICY_TOTAL_APP_CLOCKS")]
478 TotalAppClocks,
479 #[wrap(c_variant = "NVML_PERF_POLICY_TOTAL_BASE_CLOCKS")]
481 TotalBaseClocks,
482}
483
484#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
489#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
490#[wrap(c_enum = "nvmlComputeMode_enum")]
491pub enum ComputeMode {
492 #[wrap(c_variant = "NVML_COMPUTEMODE_DEFAULT")]
494 Default,
495 #[wrap(c_variant = "NVML_COMPUTEMODE_EXCLUSIVE_THREAD")]
500 ExclusiveThread,
501 #[wrap(c_variant = "NVML_COMPUTEMODE_PROHIBITED")]
503 Prohibited,
504 #[wrap(c_variant = "NVML_COMPUTEMODE_EXCLUSIVE_PROCESS")]
506 ExclusiveProcess,
507}
508
509#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
512#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
513#[wrap(c_enum = "nvmlGpuP2PStatus_enum")]
514pub enum P2pStatus {
515 #[wrap(c_variant = "NVML_P2P_STATUS_OK")]
516 Ok,
517 #[wrap(c_variant = "NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED")]
518 ChipsetNotSupported,
519 #[wrap(c_variant = "NVML_P2P_STATUS_GPU_NOT_SUPPORTED")]
520 GpuNotSupported,
521 #[wrap(c_variant = "NVML_P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED")]
522 IohTopologyNotSupported,
523 #[wrap(c_variant = "NVML_P2P_STATUS_DISABLED_BY_REGKEY")]
524 DisabledByRegkey,
525 #[wrap(c_variant = "NVML_P2P_STATUS_NOT_SUPPORTED")]
526 NotSupported,
527 #[wrap(c_variant = "NVML_P2P_STATUS_UNKNOWN")]
528 Unknown,
529}
530
531#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
533#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
534#[wrap(c_enum = "nvmlGpuP2PCapsIndex_enum")]
535pub enum P2pCapabilitiesIndex {
536 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_READ")]
537 Read,
538 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_WRITE")]
539 Write,
540 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_NVLINK")]
541 NvLink,
542 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_ATOMICS")]
543 Atomics,
544 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_PROP")]
545 Prop,
546 #[wrap(c_variant = "NVML_P2P_CAPS_INDEX_UNKNOWN")]
547 Unknown,
548}
549
550#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
553#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
554#[wrap(c_enum = "nvmlValueType_enum")]
555pub enum SampleValueType {
556 #[wrap(c_variant = "NVML_VALUE_TYPE_DOUBLE")]
557 Double,
558 #[wrap(c_variant = "NVML_VALUE_TYPE_UNSIGNED_INT")]
559 UnsignedInt,
560 #[wrap(c_variant = "NVML_VALUE_TYPE_UNSIGNED_LONG")]
561 UnsignedLong,
562 #[wrap(c_variant = "NVML_VALUE_TYPE_UNSIGNED_LONG_LONG")]
563 UnsignedLongLong,
564 #[wrap(c_variant = "NVML_VALUE_TYPE_SIGNED_LONG_LONG")]
565 SignedLongLong,
566}
567
568#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
570#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
571#[wrap(c_enum = "nvmlEncoderQueryType_enum")]
572pub enum EncoderType {
573 #[wrap(c_variant = "NVML_ENCODER_QUERY_H264")]
574 H264,
575 #[wrap(c_variant = "NVML_ENCODER_QUERY_HEVC")]
576 HEVC,
577}
578
579#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
583#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
584#[wrap(c_enum = "nvmlFBCSessionType_enum")]
585pub enum FbcSessionType {
586 #[wrap(c_variant = "NVML_FBC_SESSION_TYPE_UNKNOWN")]
587 Unknown,
588 #[wrap(c_variant = "NVML_FBC_SESSION_TYPE_TOSYS")]
589 ToSys,
590 #[wrap(c_variant = "NVML_FBC_SESSION_TYPE_CUDA")]
591 Cuda,
592 #[wrap(c_variant = "NVML_FBC_SESSION_TYPE_VID")]
593 Vid,
594 #[wrap(c_variant = "NVML_FBC_SESSION_TYPE_HWENC")]
595 HwEnc,
596}
597
598#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
600#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
601#[wrap(c_enum = "nvmlDetachGpuState_enum")]
602pub enum DetachGpuState {
603 #[wrap(c_variant = "NVML_DETACH_GPU_KEEP")]
604 Keep,
605 #[wrap(c_variant = "NVML_DETACH_GPU_REMOVE")]
606 Remove,
607}
608
609#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
611#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
612#[wrap(c_enum = "nvmlPcieLinkState_enum")]
613pub enum PcieLinkState {
614 #[wrap(c_variant = "NVML_PCIE_LINK_KEEP")]
615 Keep,
616 #[wrap(c_variant = "NVML_PCIE_LINK_SHUT_DOWN")]
617 ShutDown,
618}
619
620#[derive(EnumWrapper, Debug, Clone, Eq, PartialEq, Hash)]
622#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
623#[wrap(c_enum = "nvmlClockLimitId_enum")]
624pub enum ClockLimitId {
625 #[wrap(c_variant = "NVML_CLOCK_LIMIT_ID_TDP")]
627 Tdp,
628 #[wrap(c_variant = "NVML_CLOCK_LIMIT_ID_UNLIMITED")]
630 Unlimited,
631}