libdrm_amdgpu_sys/amdgpu/
sensor_info.rs1use crate::AMDGPU::*;
2use crate::*;
3use core::mem::{size_of, MaybeUninit};
4
5impl DeviceHandle {
6 pub fn sensor_info(&self, sensor_type: SENSOR_TYPE) -> Result<u32, i32> {
7 #[cfg(not(feature = "dynamic_loading"))]
8 let func = bindings::amdgpu_query_sensor_info;
9 #[cfg(feature = "dynamic_loading")]
10 let func = self.libdrm_amdgpu.amdgpu_query_sensor_info;
11
12 unsafe {
13 let mut val: MaybeUninit<u32> = MaybeUninit::zeroed();
14
15 let r = func(
16 self.amdgpu_dev,
17 sensor_type as u32,
18 size_of::<u32>() as u32,
19 val.as_mut_ptr() as *mut ::core::ffi::c_void,
20 );
21
22 let val = val.assume_init();
23
24 query_error!(r);
25
26 Ok(val)
27 }
28 }
29}
30
31use bindings::{
32 AMDGPU_INFO_SENSOR_GFX_MCLK,
33 AMDGPU_INFO_SENSOR_GFX_SCLK,
34 AMDGPU_INFO_SENSOR_GPU_AVG_POWER,
35 AMDGPU_INFO_SENSOR_GPU_LOAD,
36 AMDGPU_INFO_SENSOR_GPU_TEMP,
37 AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK,
38 AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK,
39 AMDGPU_INFO_SENSOR_VDDGFX,
40 AMDGPU_INFO_SENSOR_VDDNB,
41 AMDGPU_INFO_SENSOR_PEAK_PSTATE_GFX_MCLK,
42 AMDGPU_INFO_SENSOR_PEAK_PSTATE_GFX_SCLK,
43};
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd)]
47#[repr(u32)]
48pub enum SENSOR_TYPE {
49 GFX_SCLK = AMDGPU_INFO_SENSOR_GFX_SCLK,
50 GFX_MCLK = AMDGPU_INFO_SENSOR_GFX_MCLK,
51 GPU_TEMP = AMDGPU_INFO_SENSOR_GPU_TEMP,
52 GPU_LOAD = AMDGPU_INFO_SENSOR_GPU_LOAD,
53 GPU_AVG_POWER = AMDGPU_INFO_SENSOR_GPU_AVG_POWER,
54 VDDNB = AMDGPU_INFO_SENSOR_VDDNB,
55 VDDGFX = AMDGPU_INFO_SENSOR_VDDGFX,
56 STABLE_PSTATE_GFX_SCLK = AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK,
57 STABLE_PSTATE_GFX_MCLK = AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK,
58 PEAK_PSTATE_GFX_SCLK = AMDGPU_INFO_SENSOR_PEAK_PSTATE_GFX_SCLK,
59 PEAK_PSTATE_GFX_MCLK = AMDGPU_INFO_SENSOR_PEAK_PSTATE_GFX_MCLK,
60 GPU_INPUT_POWER = 0xC,
61}
62
63use std::fmt;
64impl fmt::Display for SENSOR_TYPE {
65 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
66 write!(f, "{:?}", self)
67 }
68}