libdrm_amdgpu_sys/amdgpu/
sensor_info.rs

1use 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/// Used for [DeviceHandle::sensor_info]
46#[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}