diff --git a/projects/amdsmi/CMakeLists.txt b/projects/amdsmi/CMakeLists.txt index 5b024faee1..36713e8c33 100755 --- a/projects/amdsmi/CMakeLists.txt +++ b/projects/amdsmi/CMakeLists.txt @@ -165,9 +165,10 @@ if(PYTHON3 AND PIP3) COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi/ + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/tools/generator.py ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/ COMMAND - python3 ${CMAKE_CURRENT_SOURCE_DIR}/tools/generator.py ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi.h - ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/ ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/ + python3 ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/generator.py -o ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi_wrapper.py + -i ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi.h -l ${CMAKE_CURRENT_BINARY_DIR}/src/libamd_smi.so COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi_wrapper.py ${CMAKE_CURRENT_SOURCE_DIR}/py-interface/ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper) diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index 5fde4b7788..b1450a856f 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -71,7 +71,7 @@ typedef enum amdsmi_init_flags { AMDSMI_INIT_NON_AMD_GPUS = (1 << 3) } amdsmi_init_flags_t; -/* Maximum size definitions GPUVSMI */ +/* Maximum size definitions AMDSMI */ #define AMDSMI_MAX_MM_IP_COUNT 8 #define AMDSMI_MAX_DATE_LENGTH 32 /**< YYYY-MM-DD:HH:MM:SS.MSC */ #define AMDSMI_MAX_STRING_LENGTH 64 @@ -252,6 +252,7 @@ typedef enum amdsmi_fw_block { typedef struct { uint64_t lower_bound; //!< Lower bound of range uint64_t upper_bound; //!< Upper bound of range + uint64_t reserved[2]; } amdsmi_range_t; /// @cond Ignore in docs. typedef amdsmi_range_t amdsmi_range; @@ -262,6 +263,7 @@ typedef struct amdsmi_xgmi_info { uint64_t xgmi_hive_id; uint64_t xgmi_node_id; uint32_t index; + uint32_t reserved[9]; } amdsmi_xgmi_info_t; /** @@ -272,16 +274,19 @@ typedef struct amdsmi_gpu_caps { uint32_t gfxip_major; uint32_t gfxip_minor; uint16_t gfxip_cu_count; + uint32_t reserved[5]; } gfx; struct { uint8_t mm_ip_count; uint8_t mm_ip_list[AMDSMI_MAX_MM_IP_COUNT]; + uint32_t reserved[5]; } mm; bool ras_supported; uint8_t max_vf_num; uint32_t gfx_ip_count; uint32_t dma_ip_count; + uint32_t reserved[5]; } amdsmi_gpu_caps_t; typedef struct amdsmi_vram_info { @@ -292,6 +297,7 @@ typedef struct amdsmi_vram_info { typedef struct amdsmi_frequency_range { amdsmi_range_t supported_freq_range; amdsmi_range_t current_freq_range; + uint32_t reserved[8]; } amdsmi_frequency_range_t; typedef union amdsmi_bdf { @@ -310,6 +316,7 @@ typedef struct amdsmi_power_cap_info { uint64_t dpm_cap; uint64_t min_power_cap; uint64_t max_power_cap; + uint64_t reserved[3]; } amdsmi_power_cap_info_t; typedef struct amdsmi_vbios_info { @@ -318,6 +325,7 @@ typedef struct amdsmi_vbios_info { char build_date[AMDSMI_MAX_DATE_LENGTH]; char part_number[AMDSMI_MAX_STRING_LENGTH]; char vbios_version_string[AMDSMI_NORMAL_STRING_LENGTH]; + uint32_t reserved[15]; } amdsmi_vbios_info_t; typedef struct amdsmi_fw_info { @@ -325,7 +333,9 @@ typedef struct amdsmi_fw_info { struct { amdsmi_fw_block_t fw_id; uint64_t fw_version; + uint64_t reserved[2]; } fw_info_list[FW_ID__MAX]; + uint32_t reserved[7]; } amdsmi_fw_info_t; typedef struct amdsmi_asic_info { @@ -350,14 +360,17 @@ typedef struct amdsmi_board_info { typedef struct amdsmi_temperature { uint32_t cur_temp; + uint32_t reserved[7]; } amdsmi_temperature_t; typedef struct amdsmi_temperature_limit { uint32_t limit; + uint32_t reserved[7]; } amdsmi_temperature_limit_t; typedef struct amdsmi_power_limit { uint32_t limit; + uint32_t reserved[7]; } amdsmi_power_limit_t; typedef struct amdsmi_power_measure { @@ -366,6 +379,7 @@ typedef struct amdsmi_power_measure { uint32_t voltage_gfx; // GFX voltage measurement in mV uint32_t voltage_soc; // SOC voltage measurement in mV uint32_t voltage_mem; // MEM voltage measurement in mV + uint32_t reserved[10]; } amdsmi_power_measure_t; typedef struct amdsmi_clk_measure { @@ -373,12 +387,14 @@ typedef struct amdsmi_clk_measure { uint32_t avg_clk; uint32_t min_clk; uint32_t max_clk; + uint32_t reserved[4]; } amdsmi_clk_measure_t; typedef struct amdsmi_engine_usage { uint32_t gfx_activity; uint32_t umc_activity; uint32_t mm_activity[AMDSMI_MAX_MM_IP_COUNT]; + uint32_t reserved[6]; } amdsmi_engine_usage_t; typedef uint32_t amdsmi_process_handle; @@ -399,7 +415,8 @@ typedef struct amdsmi_process_info { uint64_t cpu_mem; uint64_t vram_mem; } memory_usage; /** in bytes */ - char container_name[AMDSMI_NORMAL_STRING_LENGTH]; + char container_name[AMDSMI_NORMAL_STRING_LENGTH]; + uint32_t reserved[10]; } amdsmi_proc_info_t; //! Guaranteed maximum possible number of supported frequencies @@ -924,6 +941,7 @@ typedef struct { uint32_t minor; //!< Minor version uint32_t patch; //!< Patch, build or stepping version const char *build; //!< Build string + uint32_t reserved[4]; } amdsmi_version_t; /// @cond Ignore in docs. typedef amdsmi_version_t amdsmi_version; @@ -1093,6 +1111,7 @@ typedef struct { typedef struct { uint64_t correctable_count; //!< Accumulated correctable errors uint64_t uncorrectable_count; //!< Accumulated uncorrectable errors + uint64_t reserved[2]; } amdsmi_error_count_t; /** @@ -1101,6 +1120,7 @@ typedef struct { typedef struct amdsmi_pcie_info { uint16_t pcie_lanes; uint32_t pcie_speed; + uint32_t reserved[6]; } amdsmi_pcie_info_t; /** * @brief This structure contains information specific to a process. diff --git a/projects/amdsmi/py-interface/README.md b/projects/amdsmi/py-interface/README.md index b6a106de60..e410c9c895 100644 --- a/projects/amdsmi/py-interface/README.md +++ b/projects/amdsmi/py-interface/README.md @@ -663,7 +663,7 @@ Description: Returns the clock measure for the given GPU Input parameters: * `device_handle` device which to query -* `clock_type` one of `AmdSmiClockType` enum values: +* `clock_type` one of `AmdSmiClkType` enum values: Field | Description ---|--- @@ -701,7 +701,7 @@ try: print("No GPUs on machine") else: for device in devices: - clock_measure = amdsmi_get_clock_measure(device, AmdSmiClockType.GFX) + clock_measure = amdsmi_get_clock_measure(device, AmdSmiClkType.GFX) print(clock_measure['cur_clk']) print(clock_measure['avg_clk']) print(clock_measure['min_clk']) @@ -901,7 +901,7 @@ Description: Returns the supported frequency target range for the given GPU Input parameters: * `device_handle` device which to query -* `clock_type` one of `AmdSmiClockType` enum values: +* `clock_type` one of `AmdSmiClkType` enum values: Field | Description ---|--- @@ -941,21 +941,21 @@ try: for device in devices: print("=============== GFX DOMAIN ================") freq_range = amdsmi_get_target_frequency_range(device, - AmdSmiClockType.GFX) + AmdSmiClkType.GFX) print(freq_range['supported_upper_bound']) print(freq_range['supported_lower_bound']) print(freq_range['current_upper_bound']) print(freq_range['current_lower_bound']) print("=============== MEM DOMAIN ================") freq_range = amdsmi_get_target_frequency_range(device, - AmdSmiClockType.MEM) + AmdSmiClkType.MEM) print(freq_range['supported_upper_bound']) print(freq_range['supported_lower_bound']) print(freq_range['current_upper_bound']) print(freq_range['current_lower_bound']) print("=============== VCLK0 DOMAIN ================") freq_range = amdsmi_get_target_frequency_range(device, - AmdSmiClockType.VCLK0) + AmdSmiClkType.VCLK0) print(freq_range['supported_upper_bound']) print(freq_range['supported_lower_bound']) print(freq_range['current_upper_bound']) @@ -1461,7 +1461,7 @@ try: print("No GPUs on machine") else: for device in devices: - amdsmi_dev_set_clk_range(device, 0, 1000, AmdSmiClockType.AMDSMI_CLK_TYPE_SYS) + amdsmi_dev_set_clk_range(device, 0, 1000, AmdSmiClkType.AMDSMI_CLK_TYPE_SYS) except AmdSmiException as e: print(e) ``` @@ -1774,7 +1774,7 @@ try: device, AmdSmiFreqInd.AMDSMI_FREQ_IND_MAX, 1000, - AmdSmiClockType.AMDSMI_CLK_TYPE_SYS + AmdSmiClkType.AMDSMI_CLK_TYPE_SYS ) except AmdSmiException as e: print(e) @@ -2221,7 +2221,7 @@ try: print("No GPUs on machine") else: for device in devices: - amdsmi_dev_get_gpu_clk_freq(device, AmdSmiClockType.SYS) + amdsmi_dev_get_gpu_clk_freq(device, AmdSmiClkType.SYS) except AmdSmiException as e: print(e) ``` @@ -2705,7 +2705,7 @@ specified clock Input parameters: * `device_handle` handle for the given device * `clk_type` the type of clock for which the set of frequencies will be modified -as AmdSmiClockType +as AmdSmiClkType * `freq_bitmask` bitmask indicating the indices of the frequencies that are to be enabled (1) and disabled (0). Only the lowest ::amdsmi_frequencies_t.num_supported bits of this mask are relevant. @@ -2726,7 +2726,7 @@ try: else: for device in devices: freq_bitmask = 0 - amdsmi_dev_set_clk_freq(device, AmdSmiClockType.GFX, freq_bitmask) + amdsmi_dev_set_clk_freq(device, AmdSmiClkType.GFX, freq_bitmask) except AmdSmiException as e: print(e) ``` diff --git a/projects/amdsmi/py-interface/__init__.py b/projects/amdsmi/py-interface/__init__.py index e01c0f22f7..3a1bbac5f3 100644 --- a/projects/amdsmi/py-interface/__init__.py +++ b/projects/amdsmi/py-interface/__init__.py @@ -186,7 +186,7 @@ from .amdsmi_interface import AmdSmiContainerTypes from .amdsmi_interface import AmdSmiDeviceType from .amdsmi_interface import AmdSmiMmIp from .amdsmi_interface import AmdSmiFWBlock -from .amdsmi_interface import AmdSmiClockType +from .amdsmi_interface import AmdSmiClkType from .amdsmi_interface import AmdSmiTemperatureType from .amdsmi_interface import AmdSmiDevPerfLevel from .amdsmi_interface import AmdSmiSwComponent diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index 6156a7da5b..45dfca6e00 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -104,7 +104,7 @@ class AmdSmiFWBlock(IntEnum): FW_ID_DMCU = amdsmi_wrapper.FW_ID_DMCU -class AmdSmiClockType(IntEnum): +class AmdSmiClkType(IntEnum): SYS = amdsmi_wrapper.CLK_TYPE_SYS GFX = amdsmi_wrapper.CLK_TYPE_GFX DF = amdsmi_wrapper.CLK_TYPE_DF @@ -746,8 +746,8 @@ def amdsmi_get_clock_measure( raise AmdSmiParameterException( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - if not isinstance(clock_type, AmdSmiClockType): - raise AmdSmiParameterException(clock_type, AmdSmiClockType) + if not isinstance(clock_type, AmdSmiClkType): + raise AmdSmiParameterException(clock_type, AmdSmiClkType) clock_measure = amdsmi_wrapper.amdsmi_clk_measure_t() _check_res( @@ -862,8 +862,8 @@ def amdsmi_get_target_frequency_range( raise AmdSmiParameterException( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - if not isinstance(clock_type, AmdSmiClockType): - raise AmdSmiParameterException(clock_type, AmdSmiClockType) + if not isinstance(clock_type, AmdSmiClkType): + raise AmdSmiParameterException(clock_type, AmdSmiClkType) freq_range = amdsmi_wrapper.amdsmi_frequency_range_t() _check_res( @@ -966,7 +966,7 @@ def amdsmi_get_process_list( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - max_processes = amdsmi_wrapper.c_uint32(0) + max_processes = ctypes.c_uint32(0) process_list = (amdsmi_wrapper.amdsmi_process_handle * max_processes.value)() _check_res( @@ -999,7 +999,7 @@ def amdsmi_get_process_info( raise AmdSmiParameterException( process, amdsmi_wrapper.amdsmi_process_handle) - info = amdsmi_wrapper.amdsmi_process_info() + info = amdsmi_wrapper.amdsmi_proc_info_t() _check_res( amdsmi_wrapper.amdsmi_get_process_info( device_handle, process, ctypes.byref(info) @@ -1539,7 +1539,7 @@ def amdsmi_counter_get_available_counters( ) if not isinstance(event_group, AmdSmiEventGroup): raise AmdSmiParameterException(event_group, AmdSmiEventGroup) - available = amdsmi_wrapper.c_uint32() + available = ctypes.c_uint32() _check_res( amdsmi_wrapper. amdsmi_counter_get_available_counters( @@ -1575,7 +1575,7 @@ def amdsmi_dev_get_power_profile_presets( if not isinstance(sensor_idx, int): raise AmdSmiParameterException(sensor_idx, int) - sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx) + sensor_idx = ctypes.c_uint32(sensor_idx) status = amdsmi_wrapper.amdsmi_power_profile_status_t() _check_res( @@ -1609,7 +1609,7 @@ def amdsmi_set_perf_determinism_mode( ) if not isinstance(clock_value, int): raise AmdSmiParameterException(clock_value, int) - clock_value = amdsmi_wrapper.c_uint64(clock_value) + clock_value = ctypes.c_uint64(clock_value) _check_res( amdsmi_wrapper.amdsmi_set_perf_determinism_mode( @@ -1628,8 +1628,8 @@ def amdsmi_dev_set_fan_speed( raise AmdSmiParameterException(sensor_idx, int) if not isinstance(fan_speed, int): raise AmdSmiParameterException(fan_speed, int) - sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx) - fan_speed = amdsmi_wrapper.c_uint64(fan_speed) + sensor_idx = ctypes.c_uint32(sensor_idx) + fan_speed = ctypes.c_uint64(fan_speed) _check_res( amdsmi_wrapper.amdsmi_dev_set_fan_speed( @@ -1646,25 +1646,25 @@ def amdsmi_dev_reset_fan( ) if not isinstance(sensor_idx, int): raise AmdSmiParameterException(sensor_idx, int) - sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx) + sensor_idx = ctypes.c_uint32(sensor_idx) _check_res(amdsmi_wrapper.amdsmi_dev_reset_fan(device_handle, sensor_idx)) def amdsmi_dev_set_clk_freq( device_handle: amdsmi_wrapper.amdsmi_device_handle, - clk_type: AmdSmiClockType, + clk_type: AmdSmiClkType, freq_bitmask: int, ): if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - if not isinstance(clk_type, AmdSmiClockType): + if not isinstance(clk_type, AmdSmiClkType): raise AmdSmiParameterException(clk_type, AmdSmiParameterException) if not isinstance(freq_bitmask, int): raise AmdSmiParameterException(freq_bitmask, int) - freq_bitmask = amdsmi_wrapper.c_uint64(freq_bitmask) + freq_bitmask = ctypes.c_uint64(freq_bitmask) _check_res( amdsmi_wrapper. amdsmi_dev_set_clk_freq( device_handle, clk_type, freq_bitmask @@ -1681,7 +1681,7 @@ def amdsmi_dev_set_overdrive_level_v1( ) if not isinstance(overdrive_value, int): raise AmdSmiParameterException(overdrive_value, int) - overdrive_value = amdsmi_wrapper.c_uint32(overdrive_value) + overdrive_value = ctypes.c_uint32(overdrive_value) _check_res( amdsmi_wrapper. amdsmi_dev_set_overdrive_level_v1( @@ -1698,7 +1698,7 @@ def amdsmi_dev_set_overdrive_level( ) if not isinstance(overdrive_value, int): raise AmdSmiParameterException(overdrive_value, int) - overdrive_value = amdsmi_wrapper.c_uint32(overdrive_value) + overdrive_value = ctypes.c_uint32(overdrive_value) _check_res( amdsmi_wrapper. amdsmi_dev_set_overdrive_level( @@ -2001,7 +2001,7 @@ def amdsmi_dev_set_clk_range( device_handle: amdsmi_wrapper.amdsmi_device_handle, min_clk_value: int, max_clk_value: int, - clk_type: AmdSmiClockType, + clk_type: AmdSmiClkType, ) -> None: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( @@ -2014,8 +2014,8 @@ def amdsmi_dev_set_clk_range( if not isinstance(max_clk_value, int): raise AmdSmiParameterException(min_clk_value, int) - if not isinstance(clk_type, AmdSmiClockType): - raise AmdSmiParameterException(clk_type, AmdSmiClockType) + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) _check_res( amdsmi_wrapper.amdsmi_dev_set_clk_range( @@ -2052,7 +2052,7 @@ def amdsmi_dev_set_od_clk_info( device_handle: amdsmi_wrapper.amdsmi_device_handle, level: AmdSmiFreqInd, value: int, - clk_type: AmdSmiClockType, + clk_type: AmdSmiClkType, ) -> None: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( @@ -2065,8 +2065,8 @@ def amdsmi_dev_set_od_clk_info( if not isinstance(value, int): raise AmdSmiParameterException(value, int) - if not isinstance(clk_type, AmdSmiClockType): - raise AmdSmiParameterException(clk_type, AmdSmiClockType) + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) _check_res( amdsmi_wrapper. amdsmi_dev_set_od_clk_info( @@ -2167,7 +2167,7 @@ def amdsmi_dev_get_fan_rpms( ) if not isinstance(sensor_idx, int): raise AmdSmiParameterException(sensor_idx, int) - fan_speed = amdsmi_wrapper.c_int64() + fan_speed = ctypes.c_int64() _check_res( amdsmi_wrapper.amdsmi_dev_get_fan_rpms( device_handle, sensor_idx, ctypes.byref(fan_speed) @@ -2186,7 +2186,7 @@ def amdsmi_dev_get_fan_speed( ) if not isinstance(sensor_idx, int): raise AmdSmiParameterException(sensor_idx, int) - fan_speed = amdsmi_wrapper.c_int64() + fan_speed = ctypes.c_int64() _check_res( amdsmi_wrapper.amdsmi_dev_get_fan_speed( device_handle, sensor_idx, ctypes.byref(fan_speed) @@ -2205,7 +2205,7 @@ def amdsmi_dev_get_fan_speed_max( ) if not isinstance(sensor_idx, int): raise AmdSmiParameterException(sensor_idx, int) - fan_speed = amdsmi_wrapper.c_uint64() + fan_speed = ctypes.c_uint64() _check_res( amdsmi_wrapper.amdsmi_dev_get_fan_speed_max( device_handle, sensor_idx, ctypes.byref(fan_speed) @@ -2229,7 +2229,7 @@ def amdsmi_dev_get_temp_metric( if not isinstance(metric, AmdSmiTemperatureMetric): raise AmdSmiParameterException(metric, AmdSmiTemperatureMetric) - temp_value = amdsmi_wrapper.c_int64() + temp_value = ctypes.c_int64() _check_res( amdsmi_wrapper. amdsmi_dev_get_temp_metric( device_handle, sensor_type, metric, ctypes.byref(temp_value) @@ -2253,7 +2253,7 @@ def amdsmi_dev_get_volt_metric( if not isinstance(metric, AmdSmiVoltageMetric): raise AmdSmiParameterException(metric, AmdSmiVoltageMetric) - voltage = amdsmi_wrapper.c_int64() + voltage = ctypes.c_int64() _check_res( amdsmi_wrapper. amdsmi_dev_get_volt_metric( device_handle, sensor_type, metric, ctypes.byref(voltage) @@ -2271,7 +2271,7 @@ def amdsmi_dev_get_busy_percent( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - busy_percent = amdsmi_wrapper.c_uint32() + busy_percent = ctypes.c_uint32() _check_res( amdsmi_wrapper.amdsmi_dev_get_busy_percent( device_handle, ctypes.byref(busy_percent) @@ -2300,8 +2300,8 @@ def amdsmi_get_utilization_count( counter.type = counter_type counters.append(counter) - count = amdsmi_wrapper.c_uint32(len(counters)) - timestamp = amdsmi_wrapper.c_uint64() + count = ctypes.c_uint32(len(counters)) + timestamp = ctypes.c_uint64() util_counter_list = (amdsmi_wrapper.amdsmi_utilization_counter_t * len(counters))( *counters ) @@ -2373,7 +2373,7 @@ def amdsmi_dev_get_overdrive_level( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - od_level = amdsmi_wrapper.c_uint32() + od_level = ctypes.c_uint32() _check_res( amdsmi_wrapper.amdsmi_dev_get_overdrive_level( device_handle, ctypes.byref(od_level) @@ -2384,14 +2384,14 @@ def amdsmi_dev_get_overdrive_level( def amdsmi_dev_get_gpu_clk_freq( - device_handle: amdsmi_wrapper.amdsmi_device_handle, clk_type: AmdSmiClockType + device_handle: amdsmi_wrapper.amdsmi_device_handle, clk_type: AmdSmiClkType ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( device_handle, amdsmi_wrapper.amdsmi_device_handle ) - if not isinstance(clk_type, AmdSmiClockType): - raise AmdSmiParameterException(clk_type, AmdSmiClockType) + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) freq = amdsmi_wrapper.amdsmi_frequencies_t() _check_res( @@ -2507,7 +2507,7 @@ def amdsmi_dev_get_od_volt_curve_regions( if not isinstance(num_regions, int): raise AmdSmiParameterException(num_regions, int) - region_count = amdsmi_wrapper.c_uint32(num_regions) + region_count = ctypes.c_uint32(num_regions) buffer = (amdsmi_wrapper.amdsmi_freq_volt_region_t * num_regions)() _check_res( amdsmi_wrapper. amdsmi_dev_get_od_volt_curve_regions( diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 35b4c4d972..f4c614fa53 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -20,15 +20,10 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -from ctypes import * -from ctypes import POINTER -from subprocess import run -from subprocess import PIPE import os - # -*- coding: utf-8 -*- # -# TARGET arch is: ['-I/usr/lib/llvm-6.0/lib/clang/6.0.0/include/'] +# TARGET arch is: ['-I/usr/lib/llvm-6.0/lib/clang/6.0.0/include'] # WORD_SIZE is: 8 # POINTER_SIZE is: 8 # LONGDOUBLE_SIZE is: 16 @@ -171,6 +166,8 @@ def char_pointer_cast(string, encoding='utf-8'): +_libraries = {} +_libraries['libamd_smi.so'] = ctypes.CDLL(os.path.join(os.path.dirname(__file__), 'libamd_smi.so')) @@ -216,8 +213,8 @@ CONTAINER_DOCKER = 1 amdsmi_container_types = ctypes.c_uint32 # enum amdsmi_container_types_t = amdsmi_container_types amdsmi_container_types_t__enumvalues = amdsmi_container_types__enumvalues -amdsmi_device_handle = ctypes.c_void_p -amdsmi_socket_handle = ctypes.c_void_p +amdsmi_device_handle = ctypes.POINTER(None) +amdsmi_socket_handle = ctypes.POINTER(None) # values for enumeration 'device_type' device_type__enumvalues = { @@ -236,6 +233,71 @@ device_type = ctypes.c_uint32 # enum device_type_t = device_type device_type_t__enumvalues = device_type__enumvalues +# values for enumeration 'amdsmi_status_t' +amdsmi_status_t__enumvalues = { + 0: 'AMDSMI_STATUS_SUCCESS', + 1: 'AMDSMI_STATUS_INVAL', + 2: 'AMDSMI_STATUS_NOT_SUPPORTED', + 3: 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', + 4: 'AMDSMI_STATUS_FAIL_LOAD_MODULE', + 5: 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', + 6: 'AMDSMI_STATUS_DRM_ERROR', + 7: 'AMDSMI_STATUS_API_FAILED', + 8: 'AMDSMI_STATUS_TIMEOUT', + 9: 'AMDSMI_STATUS_RETRY', + 10: 'AMDSMI_STATUS_NO_PERM', + 11: 'AMDSMI_STATUS_INTERRUPT', + 12: 'AMDSMI_STATUS_IO', + 13: 'AMDSMI_STATUS_ADDRESS_FAULT', + 14: 'AMDSMI_STATUS_FILE_ERROR', + 15: 'AMDSMI_STATUS_OUT_OF_RESOURCES', + 16: 'AMDSMI_STATUS_INTERNAL_EXCEPTION', + 17: 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', + 18: 'AMDSMI_STATUS_INIT_ERROR', + 19: 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', + 30: 'AMDSMI_STATUS_BUSY', + 31: 'AMDSMI_STATUS_NOT_FOUND', + 32: 'AMDSMI_STATUS_NOT_INIT', + 33: 'AMDSMI_STATUS_NO_SLOT', + 40: 'AMDSMI_STATUS_NO_DATA', + 41: 'AMDSMI_STATUS_INSUFFICIENT_SIZE', + 42: 'AMDSMI_STATUS_UNEXPECTED_SIZE', + 43: 'AMDSMI_STATUS_UNEXPECTED_DATA', + 4294967294: 'AMDSMI_STATUS_MAP_ERROR', + 4294967295: 'AMDSMI_STATUS_UNKNOWN_ERROR', +} +AMDSMI_STATUS_SUCCESS = 0 +AMDSMI_STATUS_INVAL = 1 +AMDSMI_STATUS_NOT_SUPPORTED = 2 +AMDSMI_STATUS_NOT_YET_IMPLEMENTED = 3 +AMDSMI_STATUS_FAIL_LOAD_MODULE = 4 +AMDSMI_STATUS_FAIL_LOAD_SYMBOL = 5 +AMDSMI_STATUS_DRM_ERROR = 6 +AMDSMI_STATUS_API_FAILED = 7 +AMDSMI_STATUS_TIMEOUT = 8 +AMDSMI_STATUS_RETRY = 9 +AMDSMI_STATUS_NO_PERM = 10 +AMDSMI_STATUS_INTERRUPT = 11 +AMDSMI_STATUS_IO = 12 +AMDSMI_STATUS_ADDRESS_FAULT = 13 +AMDSMI_STATUS_FILE_ERROR = 14 +AMDSMI_STATUS_OUT_OF_RESOURCES = 15 +AMDSMI_STATUS_INTERNAL_EXCEPTION = 16 +AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS = 17 +AMDSMI_STATUS_INIT_ERROR = 18 +AMDSMI_STATUS_REFCOUNT_OVERFLOW = 19 +AMDSMI_STATUS_BUSY = 30 +AMDSMI_STATUS_NOT_FOUND = 31 +AMDSMI_STATUS_NOT_INIT = 32 +AMDSMI_STATUS_NO_SLOT = 33 +AMDSMI_STATUS_NO_DATA = 40 +AMDSMI_STATUS_INSUFFICIENT_SIZE = 41 +AMDSMI_STATUS_UNEXPECTED_SIZE = 42 +AMDSMI_STATUS_UNEXPECTED_DATA = 43 +AMDSMI_STATUS_MAP_ERROR = 4294967294 +AMDSMI_STATUS_UNKNOWN_ERROR = 4294967295 +amdsmi_status_t = ctypes.c_uint32 # enum + # values for enumeration 'amdsmi_clk_type' amdsmi_clk_type__enumvalues = { 0: 'CLK_TYPE_SYS', @@ -396,157 +458,170 @@ FW_ID__MAX = 46 amdsmi_fw_block = ctypes.c_uint32 # enum amdsmi_fw_block_t = amdsmi_fw_block amdsmi_fw_block_t__enumvalues = amdsmi_fw_block__enumvalues -class c__SA_amdsmi_range_t(Structure): +class struct_c__SA_amdsmi_range_t(Structure): pass -c__SA_amdsmi_range_t._pack_ = 1 # source:False -c__SA_amdsmi_range_t._fields_ = [ +struct_c__SA_amdsmi_range_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_range_t._fields_ = [ ('lower_bound', ctypes.c_uint64), ('upper_bound', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_range_t = c__SA_amdsmi_range_t -amdsmi_range = c__SA_amdsmi_range_t -class amdsmi_xgmi_info(Structure): +amdsmi_range_t = struct_c__SA_amdsmi_range_t +amdsmi_range = struct_c__SA_amdsmi_range_t +class struct_amdsmi_xgmi_info(Structure): pass -amdsmi_xgmi_info._pack_ = 1 # source:False -amdsmi_xgmi_info._fields_ = [ +struct_amdsmi_xgmi_info._pack_ = 1 # source:False +struct_amdsmi_xgmi_info._fields_ = [ ('xgmi_lanes', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), ('xgmi_hive_id', ctypes.c_uint64), ('xgmi_node_id', ctypes.c_uint64), ('index', ctypes.c_uint32), - ('PADDING_1', ctypes.c_ubyte * 4), + ('reserved', ctypes.c_uint32 * 9), ] -amdsmi_xgmi_info_t = amdsmi_xgmi_info -class amdsmi_gpu_caps(Structure): +amdsmi_xgmi_info_t = struct_amdsmi_xgmi_info +class struct_amdsmi_gpu_caps(Structure): pass -class amdsmi_gpu_caps_1(Structure): +class struct_amdsmi_gpu_caps_0(Structure): pass -amdsmi_gpu_caps_1._pack_ = 1 # source:False -amdsmi_gpu_caps_1._fields_ = [ - ('mm_ip_count', ctypes.c_ubyte), - ('mm_ip_list', ctypes.c_ubyte * 8), -] - -class amdsmi_gpu_caps_0(Structure): - pass - -amdsmi_gpu_caps_0._pack_ = 1 # source:False -amdsmi_gpu_caps_0._fields_ = [ +struct_amdsmi_gpu_caps_0._pack_ = 1 # source:False +struct_amdsmi_gpu_caps_0._fields_ = [ ('gfxip_major', ctypes.c_uint32), ('gfxip_minor', ctypes.c_uint32), ('gfxip_cu_count', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), + ('reserved', ctypes.c_uint32 * 5), ] -amdsmi_gpu_caps._pack_ = 1 # source:False -amdsmi_gpu_caps._fields_ = [ - ('gfx', amdsmi_gpu_caps_0), - ('mm', amdsmi_gpu_caps_1), - ('ras_supported', ctypes.c_bool), - ('max_vf_num', ctypes.c_ubyte), - ('PADDING_0', ctypes.c_ubyte), - ('gfx_ip_count', ctypes.c_uint32), - ('dma_ip_count', ctypes.c_uint32), -] - -amdsmi_gpu_caps_t = amdsmi_gpu_caps -class amdsmi_vram_info(Structure): +class struct_amdsmi_gpu_caps_1(Structure): pass -amdsmi_vram_info._pack_ = 1 # source:False -amdsmi_vram_info._fields_ = [ +struct_amdsmi_gpu_caps_1._pack_ = 1 # source:False +struct_amdsmi_gpu_caps_1._fields_ = [ + ('mm_ip_count', ctypes.c_ubyte), + ('mm_ip_list', ctypes.c_ubyte * 8), + ('PADDING_0', ctypes.c_ubyte * 3), + ('reserved', ctypes.c_uint32 * 5), +] + +struct_amdsmi_gpu_caps._pack_ = 1 # source:False +struct_amdsmi_gpu_caps._fields_ = [ + ('gfx', struct_amdsmi_gpu_caps_0), + ('mm', struct_amdsmi_gpu_caps_1), + ('ras_supported', ctypes.c_bool), + ('max_vf_num', ctypes.c_ubyte), + ('PADDING_0', ctypes.c_ubyte * 2), + ('gfx_ip_count', ctypes.c_uint32), + ('dma_ip_count', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 5), +] + +amdsmi_gpu_caps_t = struct_amdsmi_gpu_caps +class struct_amdsmi_vram_info(Structure): + pass + +struct_amdsmi_vram_info._pack_ = 1 # source:False +struct_amdsmi_vram_info._fields_ = [ ('vram_total', ctypes.c_uint32), ('vram_used', ctypes.c_uint32), ] -amdsmi_vram_info_t = amdsmi_vram_info -class amdsmi_frequency_range(Structure): - _pack_ = 1 # source:False - _fields_ = [ +amdsmi_vram_info_t = struct_amdsmi_vram_info +class struct_amdsmi_frequency_range(Structure): + pass + +struct_amdsmi_frequency_range._pack_ = 1 # source:False +struct_amdsmi_frequency_range._fields_ = [ ('supported_freq_range', amdsmi_range_t), ('current_freq_range', amdsmi_range_t), - ] + ('reserved', ctypes.c_uint32 * 8), +] -amdsmi_frequency_range_t = amdsmi_frequency_range -class amdsmi_bdf(Union): +amdsmi_frequency_range_t = struct_amdsmi_frequency_range +class union_amdsmi_bdf(Union): pass -class amdsmi_bdf_0(Structure): +class struct_amdsmi_bdf_0(Structure): pass -amdsmi_bdf_0._pack_ = 1 # source:False -amdsmi_bdf_0._fields_ = [ +struct_amdsmi_bdf_0._pack_ = 1 # source:False +struct_amdsmi_bdf_0._fields_ = [ ('function_number', ctypes.c_uint64, 3), ('device_number', ctypes.c_uint64, 5), ('bus_number', ctypes.c_uint64, 8), ('domain_number', ctypes.c_uint64, 48), ] -amdsmi_bdf._pack_ = 1 # source:False -amdsmi_bdf._fields_ = [ - ('amdsmi_bdf_0', amdsmi_bdf_0), +union_amdsmi_bdf._pack_ = 1 # source:False +union_amdsmi_bdf._fields_ = [ + ('amdsmi_bdf_0', struct_amdsmi_bdf_0), ('as_uint', ctypes.c_uint64), ] -amdsmi_bdf_t = amdsmi_bdf -class amdsmi_power_cap_info(Structure): +amdsmi_bdf_t = union_amdsmi_bdf +class struct_amdsmi_power_cap_info(Structure): pass -amdsmi_power_cap_info._pack_ = 1 # source:False -amdsmi_power_cap_info._fields_ = [ +struct_amdsmi_power_cap_info._pack_ = 1 # source:False +struct_amdsmi_power_cap_info._fields_ = [ ('power_cap', ctypes.c_uint64), ('default_power_cap', ctypes.c_uint64), ('dpm_cap', ctypes.c_uint64), ('min_power_cap', ctypes.c_uint64), ('max_power_cap', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 3), ] -amdsmi_power_cap_info_t = amdsmi_power_cap_info -class amdsmi_vbios_info(Structure): +amdsmi_power_cap_info_t = struct_amdsmi_power_cap_info +class struct_amdsmi_vbios_info(Structure): pass -amdsmi_vbios_info._pack_ = 1 # source:False -amdsmi_vbios_info._fields_ = [ +struct_amdsmi_vbios_info._pack_ = 1 # source:False +struct_amdsmi_vbios_info._fields_ = [ ('name', ctypes.c_char * 64), ('vbios_version', ctypes.c_uint32), ('build_date', ctypes.c_char * 32), ('part_number', ctypes.c_char * 64), ('vbios_version_string', ctypes.c_char * 32), + ('reserved', ctypes.c_uint32 * 15), ] -amdsmi_vbios_info_t = amdsmi_vbios_info -class amdsmi_fw_info(Structure): +amdsmi_vbios_info_t = struct_amdsmi_vbios_info +class struct_amdsmi_fw_info(Structure): pass -class amdsmi_fw_info_0(Structure): +class struct_amdsmi_fw_info_0(Structure): pass -amdsmi_fw_info_0._pack_ = 1 # source:False -amdsmi_fw_info_0._fields_ = [ +struct_amdsmi_fw_info_0._pack_ = 1 # source:False +struct_amdsmi_fw_info_0._fields_ = [ ('fw_id', amdsmi_fw_block_t), ('PADDING_0', ctypes.c_ubyte * 4), ('fw_version', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_fw_info._pack_ = 1 # source:False -amdsmi_fw_info._fields_ = [ +struct_amdsmi_fw_info._pack_ = 1 # source:False +struct_amdsmi_fw_info._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), - ('fw_info_list', amdsmi_fw_info_0 * 46), + ('fw_info_list', struct_amdsmi_fw_info_0 * 46), + ('reserved', ctypes.c_uint32 * 7), + ('PADDING_1', ctypes.c_ubyte * 4), ] -amdsmi_fw_info_t = amdsmi_fw_info -class amdsmi_asic_info(Structure): +amdsmi_fw_info_t = struct_amdsmi_fw_info +class struct_amdsmi_asic_info(Structure): pass -amdsmi_asic_info._pack_ = 1 # source:False -amdsmi_asic_info._fields_ = [ +struct_amdsmi_asic_info._pack_ = 1 # source:False +struct_amdsmi_asic_info._fields_ = [ ('market_name', ctypes.c_char * 64), ('family', ctypes.c_uint32), ('vendor_id', ctypes.c_uint32), @@ -558,12 +633,12 @@ amdsmi_asic_info._fields_ = [ ('PADDING_1', ctypes.c_ubyte * 4), ] -amdsmi_asic_info_t = amdsmi_asic_info -class amdsmi_board_info(Structure): +amdsmi_asic_info_t = struct_amdsmi_asic_info +class struct_amdsmi_board_info(Structure): pass -amdsmi_board_info._pack_ = 1 # source:False -amdsmi_board_info._fields_ = [ +struct_amdsmi_board_info._pack_ = 1 # source:False +struct_amdsmi_board_info._fields_ = [ ('serial_number', ctypes.c_uint64), ('is_master', ctypes.c_bool), ('model_number', ctypes.c_char * 32), @@ -574,91 +649,97 @@ amdsmi_board_info._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 7), ] -amdsmi_board_info_t = amdsmi_board_info -class amdsmi_temperature(Structure): +amdsmi_board_info_t = struct_amdsmi_board_info +class struct_amdsmi_temperature(Structure): pass -amdsmi_temperature._pack_ = 1 # source:False -amdsmi_temperature._fields_ = [ +struct_amdsmi_temperature._pack_ = 1 # source:False +struct_amdsmi_temperature._fields_ = [ ('cur_temp', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] -amdsmi_temperature_t = amdsmi_temperature -class amdsmi_temperature_limit(Structure): +amdsmi_temperature_t = struct_amdsmi_temperature +class struct_amdsmi_temperature_limit(Structure): pass -amdsmi_temperature_limit._pack_ = 1 # source:False -amdsmi_temperature_limit._fields_ = [ +struct_amdsmi_temperature_limit._pack_ = 1 # source:False +struct_amdsmi_temperature_limit._fields_ = [ ('limit', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] -amdsmi_temperature_limit_t = amdsmi_temperature_limit -class amdsmi_power_limit(Structure): +amdsmi_temperature_limit_t = struct_amdsmi_temperature_limit +class struct_amdsmi_power_limit(Structure): pass -amdsmi_power_limit._pack_ = 1 # source:False -amdsmi_power_limit._fields_ = [ +struct_amdsmi_power_limit._pack_ = 1 # source:False +struct_amdsmi_power_limit._fields_ = [ ('limit', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 7), ] -amdsmi_power_limit_t = amdsmi_power_limit -class amdsmi_power_measure(Structure): +amdsmi_power_limit_t = struct_amdsmi_power_limit +class struct_amdsmi_power_measure(Structure): pass -amdsmi_power_measure._pack_ = 1 # source:False -amdsmi_power_measure._fields_ = [ +struct_amdsmi_power_measure._pack_ = 1 # source:False +struct_amdsmi_power_measure._fields_ = [ ('average_socket_power', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('energy_accumulator', ctypes.c_uint64), ('voltage_gfx', ctypes.c_uint32), ('voltage_soc', ctypes.c_uint32), ('voltage_mem', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 10), ('PADDING_1', ctypes.c_ubyte * 4), ] -amdsmi_power_measure_t = amdsmi_power_measure -class amdsmi_clk_measure(Structure): +amdsmi_power_measure_t = struct_amdsmi_power_measure +class struct_amdsmi_clk_measure(Structure): pass -amdsmi_clk_measure._pack_ = 1 # source:False -amdsmi_clk_measure._fields_ = [ +struct_amdsmi_clk_measure._pack_ = 1 # source:False +struct_amdsmi_clk_measure._fields_ = [ ('cur_clk', ctypes.c_uint32), ('avg_clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 4), ] -amdsmi_clk_measure_t = amdsmi_clk_measure -class amdsmi_engine_usage(Structure): +amdsmi_clk_measure_t = struct_amdsmi_clk_measure +class struct_amdsmi_engine_usage(Structure): pass -amdsmi_engine_usage._pack_ = 1 # source:False -amdsmi_engine_usage._fields_ = [ +struct_amdsmi_engine_usage._pack_ = 1 # source:False +struct_amdsmi_engine_usage._fields_ = [ ('gfx_activity', ctypes.c_uint32), ('umc_activity', ctypes.c_uint32), ('mm_activity', ctypes.c_uint32 * 8), + ('reserved', ctypes.c_uint32 * 6), ] -amdsmi_engine_usage_t = amdsmi_engine_usage +amdsmi_engine_usage_t = struct_amdsmi_engine_usage amdsmi_process_handle = ctypes.c_uint32 -class amdsmi_process_info(Structure): +class struct_amdsmi_process_info(Structure): pass -class amdsmi_process_info_1(Structure): +class struct_amdsmi_process_info_1(Structure): pass -amdsmi_process_info_1._pack_ = 1 # source:False -amdsmi_process_info_1._fields_ = [ +struct_amdsmi_process_info_1._pack_ = 1 # source:False +struct_amdsmi_process_info_1._fields_ = [ ('gtt_mem', ctypes.c_uint64), ('cpu_mem', ctypes.c_uint64), ('vram_mem', ctypes.c_uint64), ] -class amdsmi_process_info_0(Structure): +class struct_amdsmi_process_info_0(Structure): pass -amdsmi_process_info_0._pack_ = 1 # source:False -amdsmi_process_info_0._fields_ = [ +struct_amdsmi_process_info_0._pack_ = 1 # source:False +struct_amdsmi_process_info_0._fields_ = [ ('gfx', ctypes.c_uint16 * 8), ('compute', ctypes.c_uint16 * 8), ('sdma', ctypes.c_uint16 * 8), @@ -666,18 +747,19 @@ amdsmi_process_info_0._fields_ = [ ('dec', ctypes.c_uint16 * 8), ] -amdsmi_process_info._pack_ = 1 # source:False -amdsmi_process_info._fields_ = [ +struct_amdsmi_process_info._pack_ = 1 # source:False +struct_amdsmi_process_info._fields_ = [ ('name', ctypes.c_char * 32), ('pid', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('mem', ctypes.c_uint64), - ('engine_usage', amdsmi_process_info_0), - ('memory_usage', amdsmi_process_info_1), + ('engine_usage', struct_amdsmi_process_info_0), + ('memory_usage', struct_amdsmi_process_info_1), ('container_name', ctypes.c_char * 32), + ('reserved', ctypes.c_uint32 * 10), ] -amdsmi_proc_info_t = amdsmi_process_info +amdsmi_proc_info_t = struct_amdsmi_process_info # values for enumeration 'c__EA_amdsmi_dev_perf_level_t' c__EA_amdsmi_dev_perf_level_t__enumvalues = { @@ -796,17 +878,17 @@ AMDSMI_CNTR_CMD_STOP = 1 c__EA_amdsmi_counter_command_t = ctypes.c_uint32 # enum amdsmi_counter_command_t = c__EA_amdsmi_counter_command_t amdsmi_counter_command_t__enumvalues = c__EA_amdsmi_counter_command_t__enumvalues -class c__SA_amdsmi_counter_value_t(Structure): +class struct_c__SA_amdsmi_counter_value_t(Structure): pass -c__SA_amdsmi_counter_value_t._pack_ = 1 # source:False -c__SA_amdsmi_counter_value_t._fields_ = [ +struct_c__SA_amdsmi_counter_value_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_counter_value_t._fields_ = [ ('value', ctypes.c_uint64), ('time_enabled', ctypes.c_uint64), ('time_running', ctypes.c_uint64), ] -amdsmi_counter_value_t = c__SA_amdsmi_counter_value_t +amdsmi_counter_value_t = struct_c__SA_amdsmi_counter_value_t # values for enumeration 'c__EA_amdsmi_evt_notification_type_t' c__EA_amdsmi_evt_notification_type_t__enumvalues = { @@ -826,18 +908,18 @@ AMDSMI_EVT_NOTIF_LAST = 4 c__EA_amdsmi_evt_notification_type_t = ctypes.c_uint32 # enum amdsmi_evt_notification_type_t = c__EA_amdsmi_evt_notification_type_t amdsmi_evt_notification_type_t__enumvalues = c__EA_amdsmi_evt_notification_type_t__enumvalues -class c__SA_amdsmi_evt_notification_data_t(Structure): +class struct_c__SA_amdsmi_evt_notification_data_t(Structure): pass -c__SA_amdsmi_evt_notification_data_t._pack_ = 1 # source:False -c__SA_amdsmi_evt_notification_data_t._fields_ = [ - ('device_handle', ctypes.c_void_p), +struct_c__SA_amdsmi_evt_notification_data_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_evt_notification_data_t._fields_ = [ + ('device_handle', ctypes.POINTER(None)), ('event', amdsmi_evt_notification_type_t), ('message', ctypes.c_char * 64), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_evt_notification_data_t = c__SA_amdsmi_evt_notification_data_t +amdsmi_evt_notification_data_t = struct_c__SA_amdsmi_evt_notification_data_t # values for enumeration 'c__EA_amdsmi_temperature_metric_t' c__EA_amdsmi_temperature_metric_t__enumvalues = { @@ -1110,112 +1192,113 @@ AMDSMI_UTILIZATION_COUNTER_LAST = 1 c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE = ctypes.c_uint32 # enum AMDSMI_UTILIZATION_COUNTER_TYPE = c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues = c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues -class c__SA_amdsmi_utilization_counter_t(Structure): +class struct_c__SA_amdsmi_utilization_counter_t(Structure): pass -c__SA_amdsmi_utilization_counter_t._pack_ = 1 # source:False -c__SA_amdsmi_utilization_counter_t._fields_ = [ +struct_c__SA_amdsmi_utilization_counter_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_utilization_counter_t._fields_ = [ ('type', AMDSMI_UTILIZATION_COUNTER_TYPE), ('PADDING_0', ctypes.c_ubyte * 4), ('value', ctypes.c_uint64), ] -amdsmi_utilization_counter_t = c__SA_amdsmi_utilization_counter_t -class c__SA_amdsmi_retired_page_record_t(Structure): +amdsmi_utilization_counter_t = struct_c__SA_amdsmi_utilization_counter_t +class struct_c__SA_amdsmi_retired_page_record_t(Structure): pass -c__SA_amdsmi_retired_page_record_t._pack_ = 1 # source:False -c__SA_amdsmi_retired_page_record_t._fields_ = [ +struct_c__SA_amdsmi_retired_page_record_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_retired_page_record_t._fields_ = [ ('page_address', ctypes.c_uint64), ('page_size', ctypes.c_uint64), ('status', amdsmi_memory_page_status_t), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_retired_page_record_t = c__SA_amdsmi_retired_page_record_t -class c__SA_amdsmi_power_profile_status_t(Structure): +amdsmi_retired_page_record_t = struct_c__SA_amdsmi_retired_page_record_t +class struct_c__SA_amdsmi_power_profile_status_t(Structure): pass -c__SA_amdsmi_power_profile_status_t._pack_ = 1 # source:False -c__SA_amdsmi_power_profile_status_t._fields_ = [ +struct_c__SA_amdsmi_power_profile_status_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_power_profile_status_t._fields_ = [ ('available_profiles', ctypes.c_uint64), ('current', amdsmi_power_profile_preset_masks_t), ('num_profiles', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_power_profile_status_t = c__SA_amdsmi_power_profile_status_t -amdsmi_power_profile_status = c__SA_amdsmi_power_profile_status_t -class c__SA_amdsmi_frequencies_t(Structure): +amdsmi_power_profile_status_t = struct_c__SA_amdsmi_power_profile_status_t +amdsmi_power_profile_status = struct_c__SA_amdsmi_power_profile_status_t +class struct_c__SA_amdsmi_frequencies_t(Structure): pass -c__SA_amdsmi_frequencies_t._pack_ = 1 # source:False -c__SA_amdsmi_frequencies_t._fields_ = [ +struct_c__SA_amdsmi_frequencies_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_frequencies_t._fields_ = [ ('num_supported', ctypes.c_uint32), ('current', ctypes.c_uint32), ('frequency', ctypes.c_uint64 * 32), ] -amdsmi_frequencies_t = c__SA_amdsmi_frequencies_t -amdsmi_frequencies = c__SA_amdsmi_frequencies_t -class c__SA_amdsmi_pcie_bandwidth_t(Structure): +amdsmi_frequencies_t = struct_c__SA_amdsmi_frequencies_t +amdsmi_frequencies = struct_c__SA_amdsmi_frequencies_t +class struct_c__SA_amdsmi_pcie_bandwidth_t(Structure): pass -c__SA_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False -c__SA_amdsmi_pcie_bandwidth_t._fields_ = [ +struct_c__SA_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_pcie_bandwidth_t._fields_ = [ ('transfer_rate', amdsmi_frequencies_t), ('lanes', ctypes.c_uint32 * 32), ] -amdsmi_pcie_bandwidth_t = c__SA_amdsmi_pcie_bandwidth_t -amdsmi_pcie_bandwidth = c__SA_amdsmi_pcie_bandwidth_t -class c__SA_amdsmi_version_t(Structure): +amdsmi_pcie_bandwidth_t = struct_c__SA_amdsmi_pcie_bandwidth_t +amdsmi_pcie_bandwidth = struct_c__SA_amdsmi_pcie_bandwidth_t +class struct_c__SA_amdsmi_version_t(Structure): pass -c__SA_amdsmi_version_t._pack_ = 1 # source:False -c__SA_amdsmi_version_t._fields_ = [ +struct_c__SA_amdsmi_version_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_version_t._fields_ = [ ('major', ctypes.c_uint32), ('minor', ctypes.c_uint32), ('patch', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('build', ctypes.POINTER(ctypes.c_char)), + ('reserved', ctypes.c_uint32 * 4), ] -amdsmi_version_t = c__SA_amdsmi_version_t -amdsmi_version = c__SA_amdsmi_version_t -class c__SA_amdsmi_od_vddc_point_t(Structure): +amdsmi_version_t = struct_c__SA_amdsmi_version_t +amdsmi_version = struct_c__SA_amdsmi_version_t +class struct_c__SA_amdsmi_od_vddc_point_t(Structure): pass -c__SA_amdsmi_od_vddc_point_t._pack_ = 1 # source:False -c__SA_amdsmi_od_vddc_point_t._fields_ = [ +struct_c__SA_amdsmi_od_vddc_point_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_od_vddc_point_t._fields_ = [ ('frequency', ctypes.c_uint64), ('voltage', ctypes.c_uint64), ] -amdsmi_od_vddc_point_t = c__SA_amdsmi_od_vddc_point_t -amdsmi_od_vddc_point = c__SA_amdsmi_od_vddc_point_t -class c__SA_amdsmi_freq_volt_region_t(Structure): +amdsmi_od_vddc_point_t = struct_c__SA_amdsmi_od_vddc_point_t +amdsmi_od_vddc_point = struct_c__SA_amdsmi_od_vddc_point_t +class struct_c__SA_amdsmi_freq_volt_region_t(Structure): _pack_ = 1 # source:False _fields_ = [ ('freq_range', amdsmi_range_t), ('volt_range', amdsmi_range_t), ] -amdsmi_freq_volt_region_t = c__SA_amdsmi_freq_volt_region_t -amdsmi_freq_volt_region = c__SA_amdsmi_freq_volt_region_t -class c__SA_amdsmi_od_volt_curve_t(Structure): +amdsmi_freq_volt_region_t = struct_c__SA_amdsmi_freq_volt_region_t +amdsmi_freq_volt_region = struct_c__SA_amdsmi_freq_volt_region_t +class struct_c__SA_amdsmi_od_volt_curve_t(Structure): _pack_ = 1 # source:False _fields_ = [ - ('vc_points', c__SA_amdsmi_od_vddc_point_t * 3), + ('vc_points', struct_c__SA_amdsmi_od_vddc_point_t * 3), ] -amdsmi_od_volt_curve_t = c__SA_amdsmi_od_volt_curve_t -amdsmi_od_volt_curve = c__SA_amdsmi_od_volt_curve_t -class c__SA_amdsmi_od_volt_freq_data_t(Structure): +amdsmi_od_volt_curve_t = struct_c__SA_amdsmi_od_volt_curve_t +amdsmi_od_volt_curve = struct_c__SA_amdsmi_od_volt_curve_t +class struct_c__SA_amdsmi_od_volt_freq_data_t(Structure): pass -c__SA_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False -c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ +struct_c__SA_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ ('curr_sclk_range', amdsmi_range_t), ('curr_mclk_range', amdsmi_range_t), ('sclk_freq_limits', amdsmi_range_t), @@ -1225,24 +1308,24 @@ c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_od_volt_freq_data_t = c__SA_amdsmi_od_volt_freq_data_t -amdsmi_od_volt_freq_data = c__SA_amdsmi_od_volt_freq_data_t -class amd_metrics_table_header_t(Structure): +amdsmi_od_volt_freq_data_t = struct_c__SA_amdsmi_od_volt_freq_data_t +amdsmi_od_volt_freq_data = struct_c__SA_amdsmi_od_volt_freq_data_t +class struct_amd_metrics_table_header_t(Structure): pass -amd_metrics_table_header_t._pack_ = 1 # source:False -amd_metrics_table_header_t._fields_ = [ +struct_amd_metrics_table_header_t._pack_ = 1 # source:False +struct_amd_metrics_table_header_t._fields_ = [ ('structure_size', ctypes.c_uint16), ('format_revision', ctypes.c_ubyte), ('content_revision', ctypes.c_ubyte), ] -class c__SA_amdsmi_gpu_metrics_t(Structure): +class struct_c__SA_amdsmi_gpu_metrics_t(Structure): pass -c__SA_amdsmi_gpu_metrics_t._pack_ = 1 # source:False -c__SA_amdsmi_gpu_metrics_t._fields_ = [ - ('common_header', amd_metrics_table_header_t), +struct_c__SA_amdsmi_gpu_metrics_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_gpu_metrics_t._fields_ = [ + ('common_header', struct_amd_metrics_table_header_t), ('temperature_edge', ctypes.c_uint16), ('temperature_hotspot', ctypes.c_uint16), ('temperature_mem', ctypes.c_uint16), @@ -1279,33 +1362,35 @@ c__SA_amdsmi_gpu_metrics_t._fields_ = [ ('temperature_hbm', ctypes.c_uint16 * 4), ] -amdsmi_gpu_metrics_t = c__SA_amdsmi_gpu_metrics_t -class c__SA_amdsmi_error_count_t(Structure): +amdsmi_gpu_metrics_t = struct_c__SA_amdsmi_gpu_metrics_t +class struct_c__SA_amdsmi_error_count_t(Structure): pass -c__SA_amdsmi_error_count_t._pack_ = 1 # source:False -c__SA_amdsmi_error_count_t._fields_ = [ +struct_c__SA_amdsmi_error_count_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_error_count_t._fields_ = [ ('correctable_count', ctypes.c_uint64), ('uncorrectable_count', ctypes.c_uint64), + ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_error_count_t = c__SA_amdsmi_error_count_t -class amdsmi_pcie_info(Structure): +amdsmi_error_count_t = struct_c__SA_amdsmi_error_count_t +class struct_amdsmi_pcie_info(Structure): pass -amdsmi_pcie_info._pack_ = 1 # source:False -amdsmi_pcie_info._fields_ = [ +struct_amdsmi_pcie_info._pack_ = 1 # source:False +struct_amdsmi_pcie_info._fields_ = [ ('pcie_lanes', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), ('pcie_speed', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 6), ] -amdsmi_pcie_info_t = amdsmi_pcie_info -class c__SA_amdsmi_process_info_t(Structure): +amdsmi_pcie_info_t = struct_amdsmi_pcie_info +class struct_c__SA_amdsmi_process_info_t(Structure): pass -c__SA_amdsmi_process_info_t._pack_ = 1 # source:False -c__SA_amdsmi_process_info_t._fields_ = [ +struct_c__SA_amdsmi_process_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_process_info_t._fields_ = [ ('process_id', ctypes.c_uint32), ('pasid', ctypes.c_uint32), ('vram_usage', ctypes.c_uint64), @@ -1314,15 +1399,15 @@ c__SA_amdsmi_process_info_t._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_process_info_t = c__SA_amdsmi_process_info_t -class amdsmi_func_id_iter_handle(Structure): +amdsmi_process_info_t = struct_c__SA_amdsmi_process_info_t +class struct_amdsmi_func_id_iter_handle(Structure): pass -amdsmi_func_id_iter_handle_t = ctypes.POINTER(amdsmi_func_id_iter_handle) -class amd_id(Union): +amdsmi_func_id_iter_handle_t = ctypes.POINTER(struct_amdsmi_func_id_iter_handle) +class union_amd_id(Union): pass -class amd_id_0(Union): +class union_amd_id_0(Union): _pack_ = 1 # source:False _fields_ = [ ('memory_type', amdsmi_memory_type_t), @@ -1334,14 +1419,344 @@ class amd_id_0(Union): ('gpu_block_type', amdsmi_gpu_block_t), ] -amd_id._pack_ = 1 # source:False -amd_id._fields_ = [ +union_amd_id._pack_ = 1 # source:False +union_amd_id._fields_ = [ ('id', ctypes.c_uint64), ('name', ctypes.POINTER(ctypes.c_char)), - ('amd_id_0', amd_id_0), + ('amd_id_0', union_amd_id_0), ] -amdsmi_func_id_value_t = amd_id +amdsmi_func_id_value_t = union_amd_id +uint64_t = ctypes.c_uint64 +amdsmi_init = _libraries['libamd_smi.so'].amdsmi_init +amdsmi_init.restype = amdsmi_status_t +amdsmi_init.argtypes = [uint64_t] +amdsmi_shut_down = _libraries['libamd_smi.so'].amdsmi_shut_down +amdsmi_shut_down.restype = amdsmi_status_t +amdsmi_shut_down.argtypes = [] +amdsmi_get_socket_handles = _libraries['libamd_smi.so'].amdsmi_get_socket_handles +amdsmi_get_socket_handles.restype = amdsmi_status_t +amdsmi_get_socket_handles.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] +size_t = ctypes.c_uint64 +amdsmi_get_socket_info = _libraries['libamd_smi.so'].amdsmi_get_socket_info +amdsmi_get_socket_info.restype = amdsmi_status_t +amdsmi_get_socket_info.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_char), size_t] +amdsmi_get_device_handles = _libraries['libamd_smi.so'].amdsmi_get_device_handles +amdsmi_get_device_handles.restype = amdsmi_status_t +amdsmi_get_device_handles.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] +amdsmi_get_device_type = _libraries['libamd_smi.so'].amdsmi_get_device_type +amdsmi_get_device_type.restype = amdsmi_status_t +amdsmi_get_device_type.argtypes = [amdsmi_device_handle, ctypes.POINTER(device_type)] +amdsmi_get_device_handle_from_bdf = _libraries['libamd_smi.so'].amdsmi_get_device_handle_from_bdf +amdsmi_get_device_handle_from_bdf.restype = amdsmi_status_t +amdsmi_get_device_handle_from_bdf.argtypes = [amdsmi_bdf_t, ctypes.POINTER(ctypes.POINTER(None))] +amdsmi_dev_get_id = _libraries['libamd_smi.so'].amdsmi_dev_get_id +amdsmi_dev_get_id.restype = amdsmi_status_t +amdsmi_dev_get_id.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint16)] +amdsmi_dev_get_vendor_name = _libraries['libamd_smi.so'].amdsmi_dev_get_vendor_name +amdsmi_dev_get_vendor_name.restype = amdsmi_status_t +amdsmi_dev_get_vendor_name.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_char), size_t] +uint32_t = ctypes.c_uint32 +amdsmi_dev_get_vram_vendor = _libraries['libamd_smi.so'].amdsmi_dev_get_vram_vendor +amdsmi_dev_get_vram_vendor.restype = amdsmi_status_t +amdsmi_dev_get_vram_vendor.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_char), uint32_t] +amdsmi_dev_get_subsystem_id = _libraries['libamd_smi.so'].amdsmi_dev_get_subsystem_id +amdsmi_dev_get_subsystem_id.restype = amdsmi_status_t +amdsmi_dev_get_subsystem_id.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint16)] +amdsmi_dev_get_subsystem_name = _libraries['libamd_smi.so'].amdsmi_dev_get_subsystem_name +amdsmi_dev_get_subsystem_name.restype = amdsmi_status_t +amdsmi_dev_get_subsystem_name.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_char), size_t] +amdsmi_dev_get_drm_render_minor = _libraries['libamd_smi.so'].amdsmi_dev_get_drm_render_minor +amdsmi_dev_get_drm_render_minor.restype = amdsmi_status_t +amdsmi_dev_get_drm_render_minor.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_dev_get_pci_bandwidth = _libraries['libamd_smi.so'].amdsmi_dev_get_pci_bandwidth +amdsmi_dev_get_pci_bandwidth.restype = amdsmi_status_t +amdsmi_dev_get_pci_bandwidth.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_bandwidth_t)] +amdsmi_dev_get_pci_id = _libraries['libamd_smi.so'].amdsmi_dev_get_pci_id +amdsmi_dev_get_pci_id.restype = amdsmi_status_t +amdsmi_dev_get_pci_id.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_topo_get_numa_affinity = _libraries['libamd_smi.so'].amdsmi_topo_get_numa_affinity +amdsmi_topo_get_numa_affinity.restype = amdsmi_status_t +amdsmi_topo_get_numa_affinity.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_dev_get_pci_throughput = _libraries['libamd_smi.so'].amdsmi_dev_get_pci_throughput +amdsmi_dev_get_pci_throughput.restype = amdsmi_status_t +amdsmi_dev_get_pci_throughput.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_get_pci_replay_counter = _libraries['libamd_smi.so'].amdsmi_dev_get_pci_replay_counter +amdsmi_dev_get_pci_replay_counter.restype = amdsmi_status_t +amdsmi_dev_get_pci_replay_counter.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_set_pci_bandwidth = _libraries['libamd_smi.so'].amdsmi_dev_set_pci_bandwidth +amdsmi_dev_set_pci_bandwidth.restype = amdsmi_status_t +amdsmi_dev_set_pci_bandwidth.argtypes = [amdsmi_device_handle, uint64_t] +amdsmi_dev_get_power_ave = _libraries['libamd_smi.so'].amdsmi_dev_get_power_ave +amdsmi_dev_get_power_ave.restype = amdsmi_status_t +amdsmi_dev_get_power_ave.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_get_energy_count = _libraries['libamd_smi.so'].amdsmi_dev_get_energy_count +amdsmi_dev_get_energy_count.restype = amdsmi_status_t +amdsmi_dev_get_energy_count.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_set_power_cap = _libraries['libamd_smi.so'].amdsmi_dev_set_power_cap +amdsmi_dev_set_power_cap.restype = amdsmi_status_t +amdsmi_dev_set_power_cap.argtypes = [amdsmi_device_handle, uint32_t, uint64_t] +amdsmi_dev_set_power_profile = _libraries['libamd_smi.so'].amdsmi_dev_set_power_profile +amdsmi_dev_set_power_profile.restype = amdsmi_status_t +amdsmi_dev_set_power_profile.argtypes = [amdsmi_device_handle, uint32_t, amdsmi_power_profile_preset_masks_t] +amdsmi_dev_get_memory_total = _libraries['libamd_smi.so'].amdsmi_dev_get_memory_total +amdsmi_dev_get_memory_total.restype = amdsmi_status_t +amdsmi_dev_get_memory_total.argtypes = [amdsmi_device_handle, amdsmi_memory_type_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_get_memory_usage = _libraries['libamd_smi.so'].amdsmi_dev_get_memory_usage +amdsmi_dev_get_memory_usage.restype = amdsmi_status_t +amdsmi_dev_get_memory_usage.argtypes = [amdsmi_device_handle, amdsmi_memory_type_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_bad_page_info = _libraries['libamd_smi.so'].amdsmi_get_bad_page_info +amdsmi_get_bad_page_info.restype = amdsmi_status_t +amdsmi_get_bad_page_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] +amdsmi_get_ras_block_features_enabled = _libraries['libamd_smi.so'].amdsmi_get_ras_block_features_enabled +amdsmi_get_ras_block_features_enabled.restype = amdsmi_status_t +amdsmi_get_ras_block_features_enabled.argtypes = [amdsmi_device_handle, amdsmi_gpu_block, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] +amdsmi_dev_get_memory_busy_percent = _libraries['libamd_smi.so'].amdsmi_dev_get_memory_busy_percent +amdsmi_dev_get_memory_busy_percent.restype = amdsmi_status_t +amdsmi_dev_get_memory_busy_percent.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_dev_get_memory_reserved_pages = _libraries['libamd_smi.so'].amdsmi_dev_get_memory_reserved_pages +amdsmi_dev_get_memory_reserved_pages.restype = amdsmi_status_t +amdsmi_dev_get_memory_reserved_pages.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] +amdsmi_dev_get_fan_rpms = _libraries['libamd_smi.so'].amdsmi_dev_get_fan_rpms +amdsmi_dev_get_fan_rpms.restype = amdsmi_status_t +amdsmi_dev_get_fan_rpms.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(ctypes.c_int64)] +amdsmi_dev_get_fan_speed = _libraries['libamd_smi.so'].amdsmi_dev_get_fan_speed +amdsmi_dev_get_fan_speed.restype = amdsmi_status_t +amdsmi_dev_get_fan_speed.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(ctypes.c_int64)] +amdsmi_dev_get_fan_speed_max = _libraries['libamd_smi.so'].amdsmi_dev_get_fan_speed_max +amdsmi_dev_get_fan_speed_max.restype = amdsmi_status_t +amdsmi_dev_get_fan_speed_max.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_get_temp_metric = _libraries['libamd_smi.so'].amdsmi_dev_get_temp_metric +amdsmi_dev_get_temp_metric.restype = amdsmi_status_t +amdsmi_dev_get_temp_metric.argtypes = [amdsmi_device_handle, uint32_t, amdsmi_temperature_metric_t, ctypes.POINTER(ctypes.c_int64)] +amdsmi_dev_get_volt_metric = _libraries['libamd_smi.so'].amdsmi_dev_get_volt_metric +amdsmi_dev_get_volt_metric.restype = amdsmi_status_t +amdsmi_dev_get_volt_metric.argtypes = [amdsmi_device_handle, amdsmi_voltage_type_t, amdsmi_voltage_metric_t, ctypes.POINTER(ctypes.c_int64)] +amdsmi_dev_reset_fan = _libraries['libamd_smi.so'].amdsmi_dev_reset_fan +amdsmi_dev_reset_fan.restype = amdsmi_status_t +amdsmi_dev_reset_fan.argtypes = [amdsmi_device_handle, uint32_t] +amdsmi_dev_set_fan_speed = _libraries['libamd_smi.so'].amdsmi_dev_set_fan_speed +amdsmi_dev_set_fan_speed.restype = amdsmi_status_t +amdsmi_dev_set_fan_speed.argtypes = [amdsmi_device_handle, uint32_t, uint64_t] +amdsmi_dev_get_busy_percent = _libraries['libamd_smi.so'].amdsmi_dev_get_busy_percent +amdsmi_dev_get_busy_percent.restype = amdsmi_status_t +amdsmi_dev_get_busy_percent.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_utilization_count = _libraries['libamd_smi.so'].amdsmi_get_utilization_count +amdsmi_get_utilization_count.restype = amdsmi_status_t +amdsmi_get_utilization_count.argtypes = [amdsmi_device_handle, struct_c__SA_amdsmi_utilization_counter_t * 0, uint32_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_pcie_link_status = _libraries['libamd_smi.so'].amdsmi_get_pcie_link_status +amdsmi_get_pcie_link_status.restype = amdsmi_status_t +amdsmi_get_pcie_link_status.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_pcie_info)] +amdsmi_get_pcie_link_caps = _libraries['libamd_smi.so'].amdsmi_get_pcie_link_caps +amdsmi_get_pcie_link_caps.restype = amdsmi_status_t +amdsmi_get_pcie_link_caps.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_pcie_info)] +amdsmi_dev_get_perf_level = _libraries['libamd_smi.so'].amdsmi_dev_get_perf_level +amdsmi_dev_get_perf_level.restype = amdsmi_status_t +amdsmi_dev_get_perf_level.argtypes = [amdsmi_device_handle, ctypes.POINTER(c__EA_amdsmi_dev_perf_level_t)] +amdsmi_set_perf_determinism_mode = _libraries['libamd_smi.so'].amdsmi_set_perf_determinism_mode +amdsmi_set_perf_determinism_mode.restype = amdsmi_status_t +amdsmi_set_perf_determinism_mode.argtypes = [amdsmi_device_handle, uint64_t] +amdsmi_dev_get_overdrive_level = _libraries['libamd_smi.so'].amdsmi_dev_get_overdrive_level +amdsmi_dev_get_overdrive_level.restype = amdsmi_status_t +amdsmi_dev_get_overdrive_level.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_dev_get_gpu_clk_freq = _libraries['libamd_smi.so'].amdsmi_dev_get_gpu_clk_freq +amdsmi_dev_get_gpu_clk_freq.restype = amdsmi_status_t +amdsmi_dev_get_gpu_clk_freq.argtypes = [amdsmi_device_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_c__SA_amdsmi_frequencies_t)] +amdsmi_dev_reset_gpu = _libraries['libamd_smi.so'].amdsmi_dev_reset_gpu +amdsmi_dev_reset_gpu.restype = amdsmi_status_t +amdsmi_dev_reset_gpu.argtypes = [amdsmi_device_handle] +amdsmi_dev_get_od_volt_info = _libraries['libamd_smi.so'].amdsmi_dev_get_od_volt_info +amdsmi_dev_get_od_volt_info.restype = amdsmi_status_t +amdsmi_dev_get_od_volt_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_c__SA_amdsmi_od_volt_freq_data_t)] +amdsmi_dev_get_gpu_metrics_info = _libraries['libamd_smi.so'].amdsmi_dev_get_gpu_metrics_info +amdsmi_dev_get_gpu_metrics_info.restype = amdsmi_status_t +amdsmi_dev_get_gpu_metrics_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_c__SA_amdsmi_gpu_metrics_t)] +amdsmi_dev_set_clk_range = _libraries['libamd_smi.so'].amdsmi_dev_set_clk_range +amdsmi_dev_set_clk_range.restype = amdsmi_status_t +amdsmi_dev_set_clk_range.argtypes = [amdsmi_device_handle, uint64_t, uint64_t, amdsmi_clk_type_t] +amdsmi_dev_set_od_clk_info = _libraries['libamd_smi.so'].amdsmi_dev_set_od_clk_info +amdsmi_dev_set_od_clk_info.restype = amdsmi_status_t +amdsmi_dev_set_od_clk_info.argtypes = [amdsmi_device_handle, amdsmi_freq_ind_t, uint64_t, amdsmi_clk_type_t] +amdsmi_dev_set_od_volt_info = _libraries['libamd_smi.so'].amdsmi_dev_set_od_volt_info +amdsmi_dev_set_od_volt_info.restype = amdsmi_status_t +amdsmi_dev_set_od_volt_info.argtypes = [amdsmi_device_handle, uint32_t, uint64_t, uint64_t] +amdsmi_dev_get_od_volt_curve_regions = _libraries['libamd_smi.so'].amdsmi_dev_get_od_volt_curve_regions +amdsmi_dev_get_od_volt_curve_regions.restype = amdsmi_status_t +amdsmi_dev_get_od_volt_curve_regions.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_freq_volt_region_t)] +amdsmi_dev_get_power_profile_presets = _libraries['libamd_smi.so'].amdsmi_dev_get_power_profile_presets +amdsmi_dev_get_power_profile_presets.restype = amdsmi_status_t +amdsmi_dev_get_power_profile_presets.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_power_profile_status_t)] +amdsmi_dev_set_perf_level = _libraries['libamd_smi.so'].amdsmi_dev_set_perf_level +amdsmi_dev_set_perf_level.restype = amdsmi_status_t +amdsmi_dev_set_perf_level.argtypes = [amdsmi_device_handle, amdsmi_dev_perf_level_t] +amdsmi_dev_set_perf_level_v1 = _libraries['libamd_smi.so'].amdsmi_dev_set_perf_level_v1 +amdsmi_dev_set_perf_level_v1.restype = amdsmi_status_t +amdsmi_dev_set_perf_level_v1.argtypes = [amdsmi_device_handle, amdsmi_dev_perf_level_t] +amdsmi_dev_set_overdrive_level = _libraries['libamd_smi.so'].amdsmi_dev_set_overdrive_level +amdsmi_dev_set_overdrive_level.restype = amdsmi_status_t +amdsmi_dev_set_overdrive_level.argtypes = [amdsmi_device_handle, uint32_t] +amdsmi_dev_set_overdrive_level_v1 = _libraries['libamd_smi.so'].amdsmi_dev_set_overdrive_level_v1 +amdsmi_dev_set_overdrive_level_v1.restype = amdsmi_status_t +amdsmi_dev_set_overdrive_level_v1.argtypes = [amdsmi_device_handle, uint32_t] +amdsmi_dev_set_clk_freq = _libraries['libamd_smi.so'].amdsmi_dev_set_clk_freq +amdsmi_dev_set_clk_freq.restype = amdsmi_status_t +amdsmi_dev_set_clk_freq.argtypes = [amdsmi_device_handle, amdsmi_clk_type_t, uint64_t] +amdsmi_get_version = _libraries['libamd_smi.so'].amdsmi_get_version +amdsmi_get_version.restype = amdsmi_status_t +amdsmi_get_version.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_version_t)] +amdsmi_get_version_str = _libraries['libamd_smi.so'].amdsmi_get_version_str +amdsmi_get_version_str.restype = amdsmi_status_t +amdsmi_get_version_str.argtypes = [amdsmi_sw_component_t, ctypes.POINTER(ctypes.c_char), uint32_t] +amdsmi_dev_get_ecc_count = _libraries['libamd_smi.so'].amdsmi_dev_get_ecc_count +amdsmi_dev_get_ecc_count.restype = amdsmi_status_t +amdsmi_dev_get_ecc_count.argtypes = [amdsmi_device_handle, amdsmi_gpu_block_t, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] +amdsmi_dev_get_ecc_enabled = _libraries['libamd_smi.so'].amdsmi_dev_get_ecc_enabled +amdsmi_dev_get_ecc_enabled.restype = amdsmi_status_t +amdsmi_dev_get_ecc_enabled.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_get_ecc_status = _libraries['libamd_smi.so'].amdsmi_dev_get_ecc_status +amdsmi_dev_get_ecc_status.restype = amdsmi_status_t +amdsmi_dev_get_ecc_status.argtypes = [amdsmi_device_handle, amdsmi_gpu_block_t, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] +amdsmi_status_string = _libraries['libamd_smi.so'].amdsmi_status_string +amdsmi_status_string.restype = amdsmi_status_t +amdsmi_status_string.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] +amdsmi_dev_counter_group_supported = _libraries['libamd_smi.so'].amdsmi_dev_counter_group_supported +amdsmi_dev_counter_group_supported.restype = amdsmi_status_t +amdsmi_dev_counter_group_supported.argtypes = [amdsmi_device_handle, amdsmi_event_group_t] +amdsmi_dev_create_counter = _libraries['libamd_smi.so'].amdsmi_dev_create_counter +amdsmi_dev_create_counter.restype = amdsmi_status_t +amdsmi_dev_create_counter.argtypes = [amdsmi_device_handle, amdsmi_event_type_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_dev_destroy_counter = _libraries['libamd_smi.so'].amdsmi_dev_destroy_counter +amdsmi_dev_destroy_counter.restype = amdsmi_status_t +amdsmi_dev_destroy_counter.argtypes = [amdsmi_event_handle_t] +amdsmi_control_counter = _libraries['libamd_smi.so'].amdsmi_control_counter +amdsmi_control_counter.restype = amdsmi_status_t +amdsmi_control_counter.argtypes = [amdsmi_event_handle_t, amdsmi_counter_command_t, ctypes.POINTER(None)] +amdsmi_read_counter = _libraries['libamd_smi.so'].amdsmi_read_counter +amdsmi_read_counter.restype = amdsmi_status_t +amdsmi_read_counter.argtypes = [amdsmi_event_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_counter_value_t)] +amdsmi_counter_get_available_counters = _libraries['libamd_smi.so'].amdsmi_counter_get_available_counters +amdsmi_counter_get_available_counters.restype = amdsmi_status_t +amdsmi_counter_get_available_counters.argtypes = [amdsmi_device_handle, amdsmi_event_group_t, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_compute_process_info = _libraries['libamd_smi.so'].amdsmi_get_compute_process_info +amdsmi_get_compute_process_info.restype = amdsmi_status_t +amdsmi_get_compute_process_info.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_process_info_t), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_compute_process_info_by_pid = _libraries['libamd_smi.so'].amdsmi_get_compute_process_info_by_pid +amdsmi_get_compute_process_info_by_pid.restype = amdsmi_status_t +amdsmi_get_compute_process_info_by_pid.argtypes = [uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_process_info_t)] +amdsmi_get_compute_process_gpus = _libraries['libamd_smi.so'].amdsmi_get_compute_process_gpus +amdsmi_get_compute_process_gpus.restype = amdsmi_status_t +amdsmi_get_compute_process_gpus.argtypes = [uint32_t, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_dev_xgmi_error_status = _libraries['libamd_smi.so'].amdsmi_dev_xgmi_error_status +amdsmi_dev_xgmi_error_status.restype = amdsmi_status_t +amdsmi_dev_xgmi_error_status.argtypes = [amdsmi_device_handle, ctypes.POINTER(c__EA_amdsmi_xgmi_status_t)] +amdsmi_dev_reset_xgmi_error = _libraries['libamd_smi.so'].amdsmi_dev_reset_xgmi_error +amdsmi_dev_reset_xgmi_error.restype = amdsmi_status_t +amdsmi_dev_reset_xgmi_error.argtypes = [amdsmi_device_handle] +amdsmi_topo_get_numa_node_number = _libraries['libamd_smi.so'].amdsmi_topo_get_numa_node_number +amdsmi_topo_get_numa_node_number.restype = amdsmi_status_t +amdsmi_topo_get_numa_node_number.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_topo_get_link_weight = _libraries['libamd_smi.so'].amdsmi_topo_get_link_weight +amdsmi_topo_get_link_weight.restype = amdsmi_status_t +amdsmi_topo_get_link_weight.argtypes = [amdsmi_device_handle, amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_minmax_bandwidth = _libraries['libamd_smi.so'].amdsmi_get_minmax_bandwidth +amdsmi_get_minmax_bandwidth.restype = amdsmi_status_t +amdsmi_get_minmax_bandwidth.argtypes = [amdsmi_device_handle, amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64)] +amdsmi_topo_get_link_type = _libraries['libamd_smi.so'].amdsmi_topo_get_link_type +amdsmi_topo_get_link_type.restype = amdsmi_status_t +amdsmi_topo_get_link_type.argtypes = [amdsmi_device_handle, amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(_AMDSMI_IO_LINK_TYPE)] +amdsmi_is_P2P_accessible = _libraries['libamd_smi.so'].amdsmi_is_P2P_accessible +amdsmi_is_P2P_accessible.restype = amdsmi_status_t +amdsmi_is_P2P_accessible.argtypes = [amdsmi_device_handle, amdsmi_device_handle, ctypes.POINTER(ctypes.c_bool)] +amdsmi_dev_open_supported_func_iterator = _libraries['libamd_smi.so'].amdsmi_dev_open_supported_func_iterator +amdsmi_dev_open_supported_func_iterator.restype = amdsmi_status_t +amdsmi_dev_open_supported_func_iterator.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.POINTER(struct_amdsmi_func_id_iter_handle))] +amdsmi_dev_open_supported_variant_iterator = _libraries['libamd_smi.so'].amdsmi_dev_open_supported_variant_iterator +amdsmi_dev_open_supported_variant_iterator.restype = amdsmi_status_t +amdsmi_dev_open_supported_variant_iterator.argtypes = [amdsmi_func_id_iter_handle_t, ctypes.POINTER(ctypes.POINTER(struct_amdsmi_func_id_iter_handle))] +amdsmi_next_func_iter = _libraries['libamd_smi.so'].amdsmi_next_func_iter +amdsmi_next_func_iter.restype = amdsmi_status_t +amdsmi_next_func_iter.argtypes = [amdsmi_func_id_iter_handle_t] +amdsmi_dev_close_supported_func_iterator = _libraries['libamd_smi.so'].amdsmi_dev_close_supported_func_iterator +amdsmi_dev_close_supported_func_iterator.restype = amdsmi_status_t +amdsmi_dev_close_supported_func_iterator.argtypes = [ctypes.POINTER(ctypes.POINTER(struct_amdsmi_func_id_iter_handle))] +amdsmi_get_func_iter_value = _libraries['libamd_smi.so'].amdsmi_get_func_iter_value +amdsmi_get_func_iter_value.restype = amdsmi_status_t +amdsmi_get_func_iter_value.argtypes = [amdsmi_func_id_iter_handle_t, ctypes.POINTER(union_amd_id)] +amdsmi_init_event_notification = _libraries['libamd_smi.so'].amdsmi_init_event_notification +amdsmi_init_event_notification.restype = amdsmi_status_t +amdsmi_init_event_notification.argtypes = [amdsmi_device_handle] +amdsmi_set_event_notification_mask = _libraries['libamd_smi.so'].amdsmi_set_event_notification_mask +amdsmi_set_event_notification_mask.restype = amdsmi_status_t +amdsmi_set_event_notification_mask.argtypes = [amdsmi_device_handle, uint64_t] +amdsmi_get_event_notification = _libraries['libamd_smi.so'].amdsmi_get_event_notification +amdsmi_get_event_notification.restype = amdsmi_status_t +amdsmi_get_event_notification.argtypes = [ctypes.c_int32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_evt_notification_data_t)] +amdsmi_stop_event_notification = _libraries['libamd_smi.so'].amdsmi_stop_event_notification +amdsmi_stop_event_notification.restype = amdsmi_status_t +amdsmi_stop_event_notification.argtypes = [amdsmi_device_handle] +amdsmi_get_device_bdf = _libraries['libamd_smi.so'].amdsmi_get_device_bdf +amdsmi_get_device_bdf.restype = amdsmi_status_t +amdsmi_get_device_bdf.argtypes = [amdsmi_device_handle, ctypes.POINTER(union_amdsmi_bdf)] +amdsmi_get_device_uuid = _libraries['libamd_smi.so'].amdsmi_get_device_uuid +amdsmi_get_device_uuid.restype = amdsmi_status_t +amdsmi_get_device_uuid.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_char)] +amdsmi_get_driver_version = _libraries['libamd_smi.so'].amdsmi_get_driver_version +amdsmi_get_driver_version.restype = amdsmi_status_t +amdsmi_get_driver_version.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_char)] +amdsmi_get_asic_info = _libraries['libamd_smi.so'].amdsmi_get_asic_info +amdsmi_get_asic_info.restype = amdsmi_status_t +amdsmi_get_asic_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_asic_info)] +amdsmi_get_board_info = _libraries['libamd_smi.so'].amdsmi_get_board_info +amdsmi_get_board_info.restype = amdsmi_status_t +amdsmi_get_board_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_board_info)] +amdsmi_get_power_cap_info = _libraries['libamd_smi.so'].amdsmi_get_power_cap_info +amdsmi_get_power_cap_info.restype = amdsmi_status_t +amdsmi_get_power_cap_info.argtypes = [amdsmi_device_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_cap_info)] +amdsmi_get_xgmi_info = _libraries['libamd_smi.so'].amdsmi_get_xgmi_info +amdsmi_get_xgmi_info.restype = amdsmi_status_t +amdsmi_get_xgmi_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_xgmi_info)] +amdsmi_get_caps_info = _libraries['libamd_smi.so'].amdsmi_get_caps_info +amdsmi_get_caps_info.restype = amdsmi_status_t +amdsmi_get_caps_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_gpu_caps)] +amdsmi_get_fw_info = _libraries['libamd_smi.so'].amdsmi_get_fw_info +amdsmi_get_fw_info.restype = amdsmi_status_t +amdsmi_get_fw_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_fw_info)] +amdsmi_get_vbios_info = _libraries['libamd_smi.so'].amdsmi_get_vbios_info +amdsmi_get_vbios_info.restype = amdsmi_status_t +amdsmi_get_vbios_info.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_vbios_info)] +amdsmi_get_gpu_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_activity +amdsmi_get_gpu_activity.restype = amdsmi_status_t +amdsmi_get_gpu_activity.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_engine_usage)] +amdsmi_get_power_measure = _libraries['libamd_smi.so'].amdsmi_get_power_measure +amdsmi_get_power_measure.restype = amdsmi_status_t +amdsmi_get_power_measure.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_power_measure)] +amdsmi_get_clock_measure = _libraries['libamd_smi.so'].amdsmi_get_clock_measure +amdsmi_get_clock_measure.restype = amdsmi_status_t +amdsmi_get_clock_measure.argtypes = [amdsmi_device_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_clk_measure)] +amdsmi_get_temperature_measure = _libraries['libamd_smi.so'].amdsmi_get_temperature_measure +amdsmi_get_temperature_measure.restype = amdsmi_status_t +amdsmi_get_temperature_measure.argtypes = [amdsmi_device_handle, amdsmi_temperature_type_t, ctypes.POINTER(struct_amdsmi_temperature)] +amdsmi_get_temperature_limit = _libraries['libamd_smi.so'].amdsmi_get_temperature_limit +amdsmi_get_temperature_limit.restype = amdsmi_status_t +amdsmi_get_temperature_limit.argtypes = [amdsmi_device_handle, amdsmi_temperature_type_t, ctypes.POINTER(struct_amdsmi_temperature_limit)] +amdsmi_get_power_limit = _libraries['libamd_smi.so'].amdsmi_get_power_limit +amdsmi_get_power_limit.restype = amdsmi_status_t +amdsmi_get_power_limit.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_power_limit)] +amdsmi_get_vram_usage = _libraries['libamd_smi.so'].amdsmi_get_vram_usage +amdsmi_get_vram_usage.restype = amdsmi_status_t +amdsmi_get_vram_usage.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_amdsmi_vram_info)] +amdsmi_get_target_frequency_range = _libraries['libamd_smi.so'].amdsmi_get_target_frequency_range +amdsmi_get_target_frequency_range.restype = amdsmi_status_t +amdsmi_get_target_frequency_range.argtypes = [amdsmi_device_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_frequency_range)] +amdsmi_get_process_list = _libraries['libamd_smi.so'].amdsmi_get_process_list +amdsmi_get_process_list.restype = amdsmi_status_t +amdsmi_get_process_list.argtypes = [amdsmi_device_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_process_info = _libraries['libamd_smi.so'].amdsmi_get_process_info +amdsmi_get_process_info.restype = amdsmi_status_t +amdsmi_get_process_info.argtypes = [amdsmi_device_handle, amdsmi_process_handle, ctypes.POINTER(struct_amdsmi_process_info)] +amdsmi_get_ecc_error_count = _libraries['libamd_smi.so'].amdsmi_get_ecc_error_count +amdsmi_get_ecc_error_count.restype = amdsmi_status_t +amdsmi_get_ecc_error_count.argtypes = [amdsmi_device_handle, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] __all__ = \ ['AMDSMI_CNTR_CMD_START', 'AMDSMI_CNTR_CMD_STOP', 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', @@ -1404,7 +1819,23 @@ __all__ = \ 'AMDSMI_RAS_ERR_STATE_INVALID', 'AMDSMI_RAS_ERR_STATE_LAST', 'AMDSMI_RAS_ERR_STATE_MULT_UC', 'AMDSMI_RAS_ERR_STATE_NONE', 'AMDSMI_RAS_ERR_STATE_PARITY', 'AMDSMI_RAS_ERR_STATE_POISON', - 'AMDSMI_RAS_ERR_STATE_SING_C', 'AMDSMI_SW_COMP_DRIVER', + 'AMDSMI_RAS_ERR_STATE_SING_C', 'AMDSMI_STATUS_ADDRESS_FAULT', + 'AMDSMI_STATUS_API_FAILED', 'AMDSMI_STATUS_BUSY', + 'AMDSMI_STATUS_DRM_ERROR', 'AMDSMI_STATUS_FAIL_LOAD_MODULE', + 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', 'AMDSMI_STATUS_FILE_ERROR', + 'AMDSMI_STATUS_INIT_ERROR', 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', + 'AMDSMI_STATUS_INSUFFICIENT_SIZE', + 'AMDSMI_STATUS_INTERNAL_EXCEPTION', 'AMDSMI_STATUS_INTERRUPT', + 'AMDSMI_STATUS_INVAL', 'AMDSMI_STATUS_IO', + 'AMDSMI_STATUS_MAP_ERROR', 'AMDSMI_STATUS_NOT_FOUND', + 'AMDSMI_STATUS_NOT_INIT', 'AMDSMI_STATUS_NOT_SUPPORTED', + 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', 'AMDSMI_STATUS_NO_DATA', + 'AMDSMI_STATUS_NO_PERM', 'AMDSMI_STATUS_NO_SLOT', + 'AMDSMI_STATUS_OUT_OF_RESOURCES', + 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', 'AMDSMI_STATUS_RETRY', + 'AMDSMI_STATUS_SUCCESS', 'AMDSMI_STATUS_TIMEOUT', + 'AMDSMI_STATUS_UNEXPECTED_DATA', 'AMDSMI_STATUS_UNEXPECTED_SIZE', + 'AMDSMI_STATUS_UNKNOWN_ERROR', 'AMDSMI_SW_COMP_DRIVER', 'AMDSMI_SW_COMP_FIRST', 'AMDSMI_SW_COMP_LAST', 'AMDSMI_TEMP_CRITICAL', 'AMDSMI_TEMP_CRITICAL_HYST', 'AMDSMI_TEMP_CRIT_MIN', 'AMDSMI_TEMP_CRIT_MIN_HYST', @@ -1454,11 +1885,44 @@ __all__ = \ 'amdsmi_clk_measure_t', 'amdsmi_clk_type', 'amdsmi_clk_type_t', 'amdsmi_clk_type_t__enumvalues', 'amdsmi_container_types', 'amdsmi_container_types_t', - 'amdsmi_container_types_t__enumvalues', + 'amdsmi_container_types_t__enumvalues', 'amdsmi_control_counter', 'amdsmi_counter_command_t', - 'amdsmi_counter_command_t__enumvalues', 'amdsmi_counter_value_t', + 'amdsmi_counter_command_t__enumvalues', + 'amdsmi_counter_get_available_counters', 'amdsmi_counter_value_t', + 'amdsmi_dev_close_supported_func_iterator', + 'amdsmi_dev_counter_group_supported', 'amdsmi_dev_create_counter', + 'amdsmi_dev_destroy_counter', 'amdsmi_dev_get_busy_percent', + 'amdsmi_dev_get_drm_render_minor', 'amdsmi_dev_get_ecc_count', + 'amdsmi_dev_get_ecc_enabled', 'amdsmi_dev_get_ecc_status', + 'amdsmi_dev_get_energy_count', 'amdsmi_dev_get_fan_rpms', + 'amdsmi_dev_get_fan_speed', 'amdsmi_dev_get_fan_speed_max', + 'amdsmi_dev_get_gpu_clk_freq', 'amdsmi_dev_get_gpu_metrics_info', + 'amdsmi_dev_get_id', 'amdsmi_dev_get_memory_busy_percent', + 'amdsmi_dev_get_memory_reserved_pages', + 'amdsmi_dev_get_memory_total', 'amdsmi_dev_get_memory_usage', + 'amdsmi_dev_get_od_volt_curve_regions', + 'amdsmi_dev_get_od_volt_info', 'amdsmi_dev_get_overdrive_level', + 'amdsmi_dev_get_pci_bandwidth', 'amdsmi_dev_get_pci_id', + 'amdsmi_dev_get_pci_replay_counter', + 'amdsmi_dev_get_pci_throughput', 'amdsmi_dev_get_perf_level', + 'amdsmi_dev_get_power_ave', + 'amdsmi_dev_get_power_profile_presets', + 'amdsmi_dev_get_subsystem_id', 'amdsmi_dev_get_subsystem_name', + 'amdsmi_dev_get_temp_metric', 'amdsmi_dev_get_vendor_name', + 'amdsmi_dev_get_volt_metric', 'amdsmi_dev_get_vram_vendor', + 'amdsmi_dev_open_supported_func_iterator', + 'amdsmi_dev_open_supported_variant_iterator', 'amdsmi_dev_perf_level', 'amdsmi_dev_perf_level__enumvalues', 'amdsmi_dev_perf_level_t', 'amdsmi_dev_perf_level_t__enumvalues', + 'amdsmi_dev_reset_fan', 'amdsmi_dev_reset_gpu', + 'amdsmi_dev_reset_xgmi_error', 'amdsmi_dev_set_clk_freq', + 'amdsmi_dev_set_clk_range', 'amdsmi_dev_set_fan_speed', + 'amdsmi_dev_set_od_clk_info', 'amdsmi_dev_set_od_volt_info', + 'amdsmi_dev_set_overdrive_level', + 'amdsmi_dev_set_overdrive_level_v1', + 'amdsmi_dev_set_pci_bandwidth', 'amdsmi_dev_set_perf_level', + 'amdsmi_dev_set_perf_level_v1', 'amdsmi_dev_set_power_cap', + 'amdsmi_dev_set_power_profile', 'amdsmi_dev_xgmi_error_status', 'amdsmi_device_handle', 'amdsmi_engine_usage_t', 'amdsmi_error_count_t', 'amdsmi_event_group_t', 'amdsmi_event_group_t__enumvalues', 'amdsmi_event_handle_t', @@ -1473,21 +1937,43 @@ __all__ = \ 'amdsmi_func_id_iter_handle_t', 'amdsmi_func_id_value_t', 'amdsmi_fw_block', 'amdsmi_fw_block_t', 'amdsmi_fw_block_t__enumvalues', 'amdsmi_fw_info_t', + 'amdsmi_get_asic_info', 'amdsmi_get_bad_page_info', + 'amdsmi_get_board_info', 'amdsmi_get_caps_info', + 'amdsmi_get_clock_measure', 'amdsmi_get_compute_process_gpus', + 'amdsmi_get_compute_process_info', + 'amdsmi_get_compute_process_info_by_pid', 'amdsmi_get_device_bdf', + 'amdsmi_get_device_handle_from_bdf', 'amdsmi_get_device_handles', + 'amdsmi_get_device_type', 'amdsmi_get_device_uuid', + 'amdsmi_get_driver_version', 'amdsmi_get_ecc_error_count', + 'amdsmi_get_event_notification', 'amdsmi_get_func_iter_value', + 'amdsmi_get_fw_info', 'amdsmi_get_gpu_activity', + 'amdsmi_get_minmax_bandwidth', 'amdsmi_get_pcie_link_caps', + 'amdsmi_get_pcie_link_status', 'amdsmi_get_power_cap_info', + 'amdsmi_get_power_limit', 'amdsmi_get_power_measure', + 'amdsmi_get_process_info', 'amdsmi_get_process_list', + 'amdsmi_get_ras_block_features_enabled', + 'amdsmi_get_socket_handles', 'amdsmi_get_socket_info', + 'amdsmi_get_target_frequency_range', + 'amdsmi_get_temperature_limit', 'amdsmi_get_temperature_measure', + 'amdsmi_get_utilization_count', 'amdsmi_get_vbios_info', + 'amdsmi_get_version', 'amdsmi_get_version_str', + 'amdsmi_get_vram_usage', 'amdsmi_get_xgmi_info', 'amdsmi_gpu_block', 'amdsmi_gpu_block__enumvalues', 'amdsmi_gpu_block_t', 'amdsmi_gpu_block_t__enumvalues', - 'amdsmi_gpu_caps_t', 'amdsmi_gpu_metrics_t', 'amdsmi_init_flags', + 'amdsmi_gpu_caps_t', 'amdsmi_gpu_metrics_t', 'amdsmi_init', + 'amdsmi_init_event_notification', 'amdsmi_init_flags', 'amdsmi_init_flags_t', 'amdsmi_init_flags_t__enumvalues', - 'amdsmi_memory_page_status_t', + 'amdsmi_is_P2P_accessible', 'amdsmi_memory_page_status_t', 'amdsmi_memory_page_status_t__enumvalues', 'amdsmi_memory_type_t', 'amdsmi_memory_type_t__enumvalues', 'amdsmi_mm_ip', 'amdsmi_mm_ip_t', 'amdsmi_mm_ip_t__enumvalues', - 'amdsmi_od_vddc_point', 'amdsmi_od_vddc_point_t', - 'amdsmi_od_volt_curve', 'amdsmi_od_volt_curve_t', - 'amdsmi_od_volt_freq_data', 'amdsmi_od_volt_freq_data_t', - 'amdsmi_pcie_bandwidth', 'amdsmi_pcie_bandwidth_t', - 'amdsmi_pcie_info_t', 'amdsmi_power_cap_info_t', - 'amdsmi_power_limit_t', 'amdsmi_power_measure_t', - 'amdsmi_power_profile_preset_masks', + 'amdsmi_next_func_iter', 'amdsmi_od_vddc_point', + 'amdsmi_od_vddc_point_t', 'amdsmi_od_volt_curve', + 'amdsmi_od_volt_curve_t', 'amdsmi_od_volt_freq_data', + 'amdsmi_od_volt_freq_data_t', 'amdsmi_pcie_bandwidth', + 'amdsmi_pcie_bandwidth_t', 'amdsmi_pcie_info_t', + 'amdsmi_power_cap_info_t', 'amdsmi_power_limit_t', + 'amdsmi_power_measure_t', 'amdsmi_power_profile_preset_masks', 'amdsmi_power_profile_preset_masks__enumvalues', 'amdsmi_power_profile_preset_masks_t', 'amdsmi_power_profile_preset_masks_t__enumvalues', @@ -1495,14 +1981,21 @@ __all__ = \ 'amdsmi_proc_info_t', 'amdsmi_process_handle', 'amdsmi_process_info_t', 'amdsmi_range', 'amdsmi_range_t', 'amdsmi_ras_err_state_t', 'amdsmi_ras_err_state_t__enumvalues', - 'amdsmi_retired_page_record_t', 'amdsmi_socket_handle', - 'amdsmi_sw_component_t', 'amdsmi_sw_component_t__enumvalues', - 'amdsmi_temperature_limit_t', 'amdsmi_temperature_metric', + 'amdsmi_read_counter', 'amdsmi_retired_page_record_t', + 'amdsmi_set_event_notification_mask', + 'amdsmi_set_perf_determinism_mode', 'amdsmi_shut_down', + 'amdsmi_socket_handle', 'amdsmi_status_string', 'amdsmi_status_t', + 'amdsmi_stop_event_notification', 'amdsmi_sw_component_t', + 'amdsmi_sw_component_t__enumvalues', 'amdsmi_temperature_limit_t', + 'amdsmi_temperature_metric', 'amdsmi_temperature_metric__enumvalues', 'amdsmi_temperature_metric_t', 'amdsmi_temperature_metric_t__enumvalues', 'amdsmi_temperature_t', 'amdsmi_temperature_type', 'amdsmi_temperature_type_t', 'amdsmi_temperature_type_t__enumvalues', + 'amdsmi_topo_get_link_type', 'amdsmi_topo_get_link_weight', + 'amdsmi_topo_get_numa_affinity', + 'amdsmi_topo_get_numa_node_number', 'amdsmi_utilization_counter_t', 'amdsmi_vbios_info_t', 'amdsmi_version', 'amdsmi_version_t', 'amdsmi_voltage_metric_t', 'amdsmi_voltage_metric_t__enumvalues', 'amdsmi_voltage_type_t', @@ -1520,655 +2013,34 @@ __all__ = \ 'c__EA_amdsmi_temperature_metric_t', 'c__EA_amdsmi_voltage_metric_t', 'c__EA_amdsmi_voltage_type_t', 'c__EA_amdsmi_xgmi_status_t', 'device_type', 'device_type_t', - 'device_type_t__enumvalues', 'amd_metrics_table_header_t', - 'amdsmi_asic_info', 'amdsmi_bdf_0', - 'amdsmi_board_info', 'amdsmi_clk_measure', - 'amdsmi_engine_usage', 'amdsmi_frequency_range', - 'amdsmi_func_id_iter_handle', 'amdsmi_fw_info', - 'amdsmi_fw_info_0', 'amdsmi_gpu_caps', - 'amdsmi_gpu_caps_0', 'amdsmi_gpu_caps_1', - 'amdsmi_pcie_info', 'amdsmi_power_cap_info', - 'amdsmi_power_limit', 'amdsmi_power_measure', - 'amdsmi_process_info', 'amdsmi_process_info_0', - 'amdsmi_process_info_1', 'amdsmi_temperature', - 'amdsmi_temperature_limit', 'amdsmi_vbios_info', - 'amdsmi_vram_info', 'amdsmi_xgmi_info', - 'c__SA_amdsmi_counter_value_t', - 'c__SA_amdsmi_error_count_t', - 'c__SA_amdsmi_evt_notification_data_t', - 'c__SA_amdsmi_freq_volt_region_t', - 'c__SA_amdsmi_frequencies_t', - 'c__SA_amdsmi_gpu_metrics_t', - 'c__SA_amdsmi_od_vddc_point_t', - 'c__SA_amdsmi_od_volt_curve_t', - 'c__SA_amdsmi_od_volt_freq_data_t', - 'c__SA_amdsmi_pcie_bandwidth_t', - 'c__SA_amdsmi_power_profile_status_t', - 'c__SA_amdsmi_process_info_t', - 'c__SA_amdsmi_range_t', - 'c__SA_amdsmi_retired_page_record_t', - 'c__SA_amdsmi_utilization_counter_t', - 'c__SA_amdsmi_version_t', 'amd_id', 'amd_id_0', - 'amdsmi_bdf'] - -# -*- coding: utf-8 -*- -# -# TARGET arch is: [] -# WORD_SIZE is: 8 -# POINTER_SIZE is: 8 -# LONGDOUBLE_SIZE is: 16 -# -import ctypes - - -c_int128 = ctypes.c_ubyte*16 -c_uint128 = c_int128 -void = None -if ctypes.sizeof(ctypes.c_longdouble) == 16: - c_long_double_t = ctypes.c_longdouble -else: - c_long_double_t = ctypes.c_ubyte*16 - - - - -# values for enumeration 'amdsmi_init_flags' -amdsmi_init_flags__enumvalues = { - 0: 'AMDSMI_INIT_ALL_DEVICES', - 1: 'AMDSMI_INIT_AMD_CPUS', - 2: 'AMDSMI_INIT_AMD_GPUS', - 4: 'AMDSMI_INIT_NON_AMD_CPUS', - 8: 'AMDSMI_INIT_NON_AMD_GPUS', -} -AMDSMI_INIT_ALL_DEVICES = 0 -AMDSMI_INIT_AMD_CPUS = 1 -AMDSMI_INIT_AMD_GPUS = 2 -AMDSMI_INIT_NON_AMD_CPUS = 4 -AMDSMI_INIT_NON_AMD_GPUS = 8 -amdsmi_init_flags = ctypes.c_uint32 # enum -amdsmi_init_flags_t = amdsmi_init_flags -amdsmi_init_flags_t__enumvalues = amdsmi_init_flags__enumvalues - -# values for enumeration 'amdsmi_mm_ip' -amdsmi_mm_ip__enumvalues = { - 0: 'AMDSMI_MM_UVD', - 1: 'AMDSMI_MM_VCE', - 2: 'AMDSMI_MM_VCN', - 3: 'AMDSMI_MM__MAX', -} -AMDSMI_MM_UVD = 0 -AMDSMI_MM_VCE = 1 -AMDSMI_MM_VCN = 2 -AMDSMI_MM__MAX = 3 -amdsmi_mm_ip = ctypes.c_uint32 # enum -amdsmi_mm_ip_t = amdsmi_mm_ip -amdsmi_mm_ip_t__enumvalues = amdsmi_mm_ip__enumvalues - -# values for enumeration 'amdsmi_container_types' -amdsmi_container_types__enumvalues = { - 0: 'CONTAINER_LXC', - 1: 'CONTAINER_DOCKER', -} -CONTAINER_LXC = 0 -CONTAINER_DOCKER = 1 -amdsmi_container_types = ctypes.c_uint32 # enum -amdsmi_container_types_t = amdsmi_container_types -amdsmi_container_types_t__enumvalues = amdsmi_container_types__enumvalues -amdsmi_device_handle = ctypes.POINTER(None) -amdsmi_socket_handle = ctypes.POINTER(None) - -# values for enumeration 'device_type' -device_type__enumvalues = { - 0: 'UNKNOWN', - 1: 'AMD_GPU', - 2: 'AMD_CPU', - 3: 'NON_AMD_GPU', - 4: 'NON_AMD_CPU', -} -UNKNOWN = 0 -AMD_GPU = 1 -AMD_CPU = 2 -NON_AMD_GPU = 3 -NON_AMD_CPU = 4 -device_type = ctypes.c_uint32 # enum -device_type_t = device_type -device_type_t__enumvalues = device_type__enumvalues - -# values for enumeration 'amdsmi_status_t' -amdsmi_status_t__enumvalues = { - 0: 'AMDSMI_STATUS_SUCCESS', - 1: 'AMDSMI_STATUS_INVAL', - 2: 'AMDSMI_STATUS_NOT_SUPPORTED', - 3: 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', - 4: 'AMDSMI_STATUS_FAIL_LOAD_MODULE', - 5: 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', - 6: 'AMDSMI_STATUS_DRM_ERROR', - 7: 'AMDSMI_STATUS_API_FAILED', - 8: 'AMDSMI_STATUS_TIMEOUT', - 9: 'AMDSMI_STATUS_RETRY', - 10: 'AMDSMI_STATUS_NO_PERM', - 11: 'AMDSMI_STATUS_INTERRUPT', - 12: 'AMDSMI_STATUS_IO', - 13: 'AMDSMI_STATUS_ADDRESS_FAULT', - 14: 'AMDSMI_STATUS_FILE_ERROR', - 15: 'AMDSMI_STATUS_OUT_OF_RESOURCES', - 16: 'AMDSMI_STATUS_INTERNAL_EXCEPTION', - 17: 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', - 18: 'AMDSMI_STATUS_INIT_ERROR', - 19: 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', - 30: 'AMDSMI_STATUS_BUSY', - 31: 'AMDSMI_STATUS_NOT_FOUND', - 32: 'AMDSMI_STATUS_NOT_INIT', - 33: 'AMDSMI_STATUS_NO_SLOT', - 40: 'AMDSMI_STATUS_NO_DATA', - 41: 'AMDSMI_STATUS_INSUFFICIENT_SIZE', - 42: 'AMDSMI_STATUS_UNEXPECTED_SIZE', - 43: 'AMDSMI_STATUS_UNEXPECTED_DATA', - 4294967294: 'AMDSMI_STATUS_MAP_ERROR', - 4294967295: 'AMDSMI_STATUS_UNKNOWN_ERROR', -} -AMDSMI_STATUS_SUCCESS = 0 -AMDSMI_STATUS_INVAL = 1 -AMDSMI_STATUS_NOT_SUPPORTED = 2 -AMDSMI_STATUS_NOT_YET_IMPLEMENTED = 3 -AMDSMI_STATUS_FAIL_LOAD_MODULE = 4 -AMDSMI_STATUS_FAIL_LOAD_SYMBOL = 5 -AMDSMI_STATUS_DRM_ERROR = 6 -AMDSMI_STATUS_API_FAILED = 7 -AMDSMI_STATUS_TIMEOUT = 8 -AMDSMI_STATUS_RETRY = 9 -AMDSMI_STATUS_NO_PERM = 10 -AMDSMI_STATUS_INTERRUPT = 11 -AMDSMI_STATUS_IO = 12 -AMDSMI_STATUS_ADDRESS_FAULT = 13 -AMDSMI_STATUS_FILE_ERROR = 14 -AMDSMI_STATUS_OUT_OF_RESOURCES = 15 -AMDSMI_STATUS_INTERNAL_EXCEPTION = 16 -AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS = 17 -AMDSMI_STATUS_INIT_ERROR = 18 -AMDSMI_STATUS_REFCOUNT_OVERFLOW = 19 -AMDSMI_STATUS_BUSY = 30 -AMDSMI_STATUS_NOT_FOUND = 31 -AMDSMI_STATUS_NOT_INIT = 32 -AMDSMI_STATUS_NO_SLOT = 33 -AMDSMI_STATUS_NO_DATA = 40 -AMDSMI_STATUS_INSUFFICIENT_SIZE = 41 -AMDSMI_STATUS_UNEXPECTED_SIZE = 42 -AMDSMI_STATUS_UNEXPECTED_DATA = 43 -AMDSMI_STATUS_MAP_ERROR = 4294967294 -AMDSMI_STATUS_UNKNOWN_ERROR = 4294967295 -amdsmi_status_t = ctypes.c_uint32 # enum -__all__ += \ - ['AMDSMI_INIT_ALL_DEVICES', 'AMDSMI_INIT_AMD_CPUS', - 'AMDSMI_INIT_AMD_GPUS', 'AMDSMI_INIT_NON_AMD_CPUS', - 'AMDSMI_INIT_NON_AMD_GPUS', 'AMDSMI_MM_UVD', 'AMDSMI_MM_VCE', - 'AMDSMI_MM_VCN', 'AMDSMI_MM__MAX', 'AMDSMI_STATUS_ADDRESS_FAULT', - 'AMDSMI_STATUS_API_FAILED', 'AMDSMI_STATUS_BUSY', - 'AMDSMI_STATUS_DRM_ERROR', 'AMDSMI_STATUS_FAIL_LOAD_MODULE', - 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', 'AMDSMI_STATUS_FILE_ERROR', - 'AMDSMI_STATUS_INIT_ERROR', 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', - 'AMDSMI_STATUS_INSUFFICIENT_SIZE', - 'AMDSMI_STATUS_INTERNAL_EXCEPTION', 'AMDSMI_STATUS_INTERRUPT', - 'AMDSMI_STATUS_INVAL', 'AMDSMI_STATUS_IO', - 'AMDSMI_STATUS_MAP_ERROR', 'AMDSMI_STATUS_NOT_FOUND', - 'AMDSMI_STATUS_NOT_INIT', 'AMDSMI_STATUS_NOT_SUPPORTED', - 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', 'AMDSMI_STATUS_NO_DATA', - 'AMDSMI_STATUS_NO_PERM', 'AMDSMI_STATUS_NO_SLOT', - 'AMDSMI_STATUS_OUT_OF_RESOURCES', - 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', 'AMDSMI_STATUS_RETRY', - 'AMDSMI_STATUS_SUCCESS', 'AMDSMI_STATUS_TIMEOUT', - 'AMDSMI_STATUS_UNEXPECTED_DATA', 'AMDSMI_STATUS_UNEXPECTED_SIZE', - 'AMDSMI_STATUS_UNKNOWN_ERROR', 'AMD_CPU', 'AMD_GPU', - 'CONTAINER_DOCKER', 'CONTAINER_LXC', 'NON_AMD_CPU', 'NON_AMD_GPU', - 'UNKNOWN', 'amdsmi_container_types', 'amdsmi_container_types_t', - 'amdsmi_container_types_t__enumvalues', 'amdsmi_device_handle', - 'amdsmi_init_flags', 'amdsmi_init_flags_t', - 'amdsmi_init_flags_t__enumvalues', 'amdsmi_mm_ip', - 'amdsmi_mm_ip_t', 'amdsmi_mm_ip_t__enumvalues', - 'amdsmi_socket_handle', 'amdsmi_status_t', 'device_type', - 'device_type_t', 'device_type_t__enumvalues'] - - - -__all__ += ['amdsmi_init', 'amdsmi_shut_down', 'amdsmi_get_socket_handles', 'amdsmi_get_socket_info', 'amdsmi_get_device_handles', 'amdsmi_get_device_type', 'amdsmi_get_device_handle_from_bdf', 'amdsmi_dev_get_id', 'amdsmi_dev_get_vendor_name', 'amdsmi_dev_get_vram_vendor', 'amdsmi_dev_get_subsystem_id', 'amdsmi_dev_get_subsystem_name', 'amdsmi_dev_get_drm_render_minor', 'amdsmi_dev_get_pci_bandwidth', 'amdsmi_dev_get_pci_id', 'amdsmi_topo_get_numa_affinity', 'amdsmi_dev_get_pci_throughput', 'amdsmi_dev_get_pci_replay_counter', 'amdsmi_dev_set_pci_bandwidth', 'amdsmi_dev_get_power_ave', 'amdsmi_dev_get_energy_count', 'amdsmi_dev_set_power_cap', 'amdsmi_dev_set_power_profile', 'amdsmi_dev_get_memory_total', 'amdsmi_dev_get_memory_usage', 'amdsmi_get_bad_page_info', 'amdsmi_get_ras_block_features_enabled', 'amdsmi_dev_get_memory_busy_percent', 'amdsmi_dev_get_memory_reserved_pages', 'amdsmi_dev_get_fan_rpms', 'amdsmi_dev_get_fan_speed', 'amdsmi_dev_get_fan_speed_max', 'amdsmi_dev_get_temp_metric', 'amdsmi_dev_get_volt_metric', 'amdsmi_dev_reset_fan', 'amdsmi_dev_set_fan_speed', 'amdsmi_dev_get_busy_percent', 'amdsmi_get_utilization_count', 'amdsmi_get_pcie_link_status', 'amdsmi_get_pcie_link_caps', 'amdsmi_dev_get_perf_level', 'amdsmi_set_perf_determinism_mode', 'amdsmi_dev_get_overdrive_level', 'amdsmi_dev_get_gpu_clk_freq', 'amdsmi_dev_reset_gpu', 'amdsmi_dev_get_od_volt_info', 'amdsmi_dev_get_gpu_metrics_info', 'amdsmi_dev_set_clk_range', 'amdsmi_dev_set_od_clk_info', 'amdsmi_dev_set_od_volt_info', 'amdsmi_dev_get_od_volt_curve_regions', 'amdsmi_dev_get_power_profile_presets', 'amdsmi_dev_set_perf_level', 'amdsmi_dev_set_perf_level_v1', 'amdsmi_dev_set_overdrive_level', 'amdsmi_dev_set_overdrive_level_v1', 'amdsmi_dev_set_clk_freq', 'amdsmi_get_version', 'amdsmi_get_version_str', 'amdsmi_dev_get_ecc_count', 'amdsmi_dev_get_ecc_enabled', 'amdsmi_dev_get_ecc_status', 'amdsmi_status_string', 'amdsmi_dev_counter_group_supported', 'amdsmi_dev_create_counter', 'amdsmi_dev_destroy_counter', 'amdsmi_control_counter', 'amdsmi_read_counter', 'amdsmi_counter_get_available_counters', 'amdsmi_get_compute_process_info', 'amdsmi_get_compute_process_info_by_pid', 'amdsmi_get_compute_process_gpus', 'amdsmi_dev_xgmi_error_status', 'amdsmi_dev_reset_xgmi_error', 'amdsmi_topo_get_numa_node_number', 'amdsmi_topo_get_link_weight', 'amdsmi_get_minmax_bandwidth', 'amdsmi_topo_get_link_type', 'amdsmi_is_P2P_accessible', 'amdsmi_dev_open_supported_func_iterator', 'amdsmi_dev_open_supported_variant_iterator', 'amdsmi_next_func_iter', 'amdsmi_dev_close_supported_func_iterator', 'amdsmi_get_func_iter_value', 'amdsmi_init_event_notification', 'amdsmi_set_event_notification_mask', 'amdsmi_get_event_notification', 'amdsmi_stop_event_notification', 'amdsmi_get_device_bdf', 'amdsmi_get_device_uuid', 'amdsmi_get_driver_version', 'amdsmi_get_asic_info', 'amdsmi_get_board_info', 'amdsmi_get_power_cap_info', 'amdsmi_get_xgmi_info', 'amdsmi_get_caps_info', 'amdsmi_get_fw_info', 'amdsmi_get_vbios_info', 'amdsmi_get_gpu_activity', 'amdsmi_get_power_measure', 'amdsmi_get_clock_measure', 'amdsmi_get_temperature_measure', 'amdsmi_get_temperature_limit', 'amdsmi_get_power_limit', 'amdsmi_get_vram_usage', 'amdsmi_get_target_frequency_range', 'amdsmi_get_process_list', 'amdsmi_get_process_info', 'amdsmi_get_ecc_error_count'] -__all__ += [] - -_lib = CDLL(os.path.join(os.path.dirname(__file__), "libamd_smi.so")) - - -_lib.amdsmi_init.argtypes = [c_uint64] -_lib.amdsmi_init.restype = amdsmi_status_t -amdsmi_init = _lib.amdsmi_init - -_lib.amdsmi_shut_down.argtypes = [] -_lib.amdsmi_shut_down.restype = amdsmi_status_t -amdsmi_shut_down = _lib.amdsmi_shut_down - -_lib.amdsmi_get_socket_handles.argtypes = [POINTER(c_uint32),POINTER(amdsmi_socket_handle)] -_lib.amdsmi_get_socket_handles.restype = amdsmi_status_t -amdsmi_get_socket_handles = _lib.amdsmi_get_socket_handles - -_lib.amdsmi_get_socket_info.argtypes = [amdsmi_socket_handle,c_char_p,c_uint64] -_lib.amdsmi_get_socket_info.restype = amdsmi_status_t -amdsmi_get_socket_info = _lib.amdsmi_get_socket_info - -_lib.amdsmi_get_device_handles.argtypes = [amdsmi_socket_handle,POINTER(c_uint32),POINTER(amdsmi_device_handle)] -_lib.amdsmi_get_device_handles.restype = amdsmi_status_t -amdsmi_get_device_handles = _lib.amdsmi_get_device_handles - -_lib.amdsmi_get_device_type.argtypes = [amdsmi_device_handle,POINTER(device_type_t)] -_lib.amdsmi_get_device_type.restype = amdsmi_status_t -amdsmi_get_device_type = _lib.amdsmi_get_device_type - -_lib.amdsmi_get_device_handle_from_bdf.argtypes = [amdsmi_bdf_t,POINTER(amdsmi_device_handle)] -_lib.amdsmi_get_device_handle_from_bdf.restype = amdsmi_status_t -amdsmi_get_device_handle_from_bdf = _lib.amdsmi_get_device_handle_from_bdf - -_lib.amdsmi_dev_get_id.argtypes = [amdsmi_device_handle,POINTER(c_uint16)] -_lib.amdsmi_dev_get_id.restype = amdsmi_status_t -amdsmi_dev_get_id = _lib.amdsmi_dev_get_id - -_lib.amdsmi_dev_get_vendor_name.argtypes = [amdsmi_device_handle,c_char_p,c_uint64] -_lib.amdsmi_dev_get_vendor_name.restype = amdsmi_status_t -amdsmi_dev_get_vendor_name = _lib.amdsmi_dev_get_vendor_name - -_lib.amdsmi_dev_get_vram_vendor.argtypes = [amdsmi_device_handle,c_char_p,c_uint32] -_lib.amdsmi_dev_get_vram_vendor.restype = amdsmi_status_t -amdsmi_dev_get_vram_vendor = _lib.amdsmi_dev_get_vram_vendor - -_lib.amdsmi_dev_get_subsystem_id.argtypes = [amdsmi_device_handle,POINTER(c_uint16)] -_lib.amdsmi_dev_get_subsystem_id.restype = amdsmi_status_t -amdsmi_dev_get_subsystem_id = _lib.amdsmi_dev_get_subsystem_id - -_lib.amdsmi_dev_get_subsystem_name.argtypes = [amdsmi_device_handle,c_char_p,c_uint64] -_lib.amdsmi_dev_get_subsystem_name.restype = amdsmi_status_t -amdsmi_dev_get_subsystem_name = _lib.amdsmi_dev_get_subsystem_name - -_lib.amdsmi_dev_get_drm_render_minor.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_dev_get_drm_render_minor.restype = amdsmi_status_t -amdsmi_dev_get_drm_render_minor = _lib.amdsmi_dev_get_drm_render_minor - -_lib.amdsmi_dev_get_pci_bandwidth.argtypes = [amdsmi_device_handle,POINTER(amdsmi_pcie_bandwidth_t)] -_lib.amdsmi_dev_get_pci_bandwidth.restype = amdsmi_status_t -amdsmi_dev_get_pci_bandwidth = _lib.amdsmi_dev_get_pci_bandwidth - -_lib.amdsmi_dev_get_pci_id.argtypes = [amdsmi_device_handle,POINTER(c_uint64)] -_lib.amdsmi_dev_get_pci_id.restype = amdsmi_status_t -amdsmi_dev_get_pci_id = _lib.amdsmi_dev_get_pci_id - -_lib.amdsmi_topo_get_numa_affinity.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_topo_get_numa_affinity.restype = amdsmi_status_t -amdsmi_topo_get_numa_affinity = _lib.amdsmi_topo_get_numa_affinity - -_lib.amdsmi_dev_get_pci_throughput.argtypes = [amdsmi_device_handle,POINTER(c_uint64),POINTER(c_uint64),POINTER(c_uint64)] -_lib.amdsmi_dev_get_pci_throughput.restype = amdsmi_status_t -amdsmi_dev_get_pci_throughput = _lib.amdsmi_dev_get_pci_throughput - -_lib.amdsmi_dev_get_pci_replay_counter.argtypes = [amdsmi_device_handle,POINTER(c_uint64)] -_lib.amdsmi_dev_get_pci_replay_counter.restype = amdsmi_status_t -amdsmi_dev_get_pci_replay_counter = _lib.amdsmi_dev_get_pci_replay_counter - -_lib.amdsmi_dev_set_pci_bandwidth.argtypes = [amdsmi_device_handle,c_uint64] -_lib.amdsmi_dev_set_pci_bandwidth.restype = amdsmi_status_t -amdsmi_dev_set_pci_bandwidth = _lib.amdsmi_dev_set_pci_bandwidth - -_lib.amdsmi_dev_get_power_ave.argtypes = [amdsmi_device_handle,c_uint32,POINTER(c_uint64)] -_lib.amdsmi_dev_get_power_ave.restype = amdsmi_status_t -amdsmi_dev_get_power_ave = _lib.amdsmi_dev_get_power_ave - -_lib.amdsmi_dev_get_energy_count.argtypes = [amdsmi_device_handle,POINTER(c_uint64),POINTER(c_float),POINTER(c_uint64)] -_lib.amdsmi_dev_get_energy_count.restype = amdsmi_status_t -amdsmi_dev_get_energy_count = _lib.amdsmi_dev_get_energy_count - -_lib.amdsmi_dev_set_power_cap.argtypes = [amdsmi_device_handle,c_uint32,c_uint64] -_lib.amdsmi_dev_set_power_cap.restype = amdsmi_status_t -amdsmi_dev_set_power_cap = _lib.amdsmi_dev_set_power_cap - -_lib.amdsmi_dev_set_power_profile.argtypes = [amdsmi_device_handle,c_uint32,amdsmi_power_profile_preset_masks_t] -_lib.amdsmi_dev_set_power_profile.restype = amdsmi_status_t -amdsmi_dev_set_power_profile = _lib.amdsmi_dev_set_power_profile - -_lib.amdsmi_dev_get_memory_total.argtypes = [amdsmi_device_handle,amdsmi_memory_type_t,POINTER(c_uint64)] -_lib.amdsmi_dev_get_memory_total.restype = amdsmi_status_t -amdsmi_dev_get_memory_total = _lib.amdsmi_dev_get_memory_total - -_lib.amdsmi_dev_get_memory_usage.argtypes = [amdsmi_device_handle,amdsmi_memory_type_t,POINTER(c_uint64)] -_lib.amdsmi_dev_get_memory_usage.restype = amdsmi_status_t -amdsmi_dev_get_memory_usage = _lib.amdsmi_dev_get_memory_usage - -_lib.amdsmi_get_bad_page_info.argtypes = [amdsmi_device_handle,POINTER(c_uint32),POINTER(amdsmi_retired_page_record_t)] -_lib.amdsmi_get_bad_page_info.restype = amdsmi_status_t -amdsmi_get_bad_page_info = _lib.amdsmi_get_bad_page_info - -_lib.amdsmi_get_ras_block_features_enabled.argtypes = [amdsmi_device_handle,amdsmi_gpu_block,POINTER(amdsmi_ras_err_state_t)] -_lib.amdsmi_get_ras_block_features_enabled.restype = amdsmi_status_t -amdsmi_get_ras_block_features_enabled = _lib.amdsmi_get_ras_block_features_enabled - -_lib.amdsmi_dev_get_memory_busy_percent.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_dev_get_memory_busy_percent.restype = amdsmi_status_t -amdsmi_dev_get_memory_busy_percent = _lib.amdsmi_dev_get_memory_busy_percent - -_lib.amdsmi_dev_get_memory_reserved_pages.argtypes = [amdsmi_device_handle,POINTER(c_uint32),POINTER(amdsmi_retired_page_record_t)] -_lib.amdsmi_dev_get_memory_reserved_pages.restype = amdsmi_status_t -amdsmi_dev_get_memory_reserved_pages = _lib.amdsmi_dev_get_memory_reserved_pages - -_lib.amdsmi_dev_get_fan_rpms.argtypes = [amdsmi_device_handle,c_uint32,POINTER(c_int64)] -_lib.amdsmi_dev_get_fan_rpms.restype = amdsmi_status_t -amdsmi_dev_get_fan_rpms = _lib.amdsmi_dev_get_fan_rpms - -_lib.amdsmi_dev_get_fan_speed.argtypes = [amdsmi_device_handle,c_uint32,POINTER(c_int64)] -_lib.amdsmi_dev_get_fan_speed.restype = amdsmi_status_t -amdsmi_dev_get_fan_speed = _lib.amdsmi_dev_get_fan_speed - -_lib.amdsmi_dev_get_fan_speed_max.argtypes = [amdsmi_device_handle,c_uint32,POINTER(c_uint64)] -_lib.amdsmi_dev_get_fan_speed_max.restype = amdsmi_status_t -amdsmi_dev_get_fan_speed_max = _lib.amdsmi_dev_get_fan_speed_max - -_lib.amdsmi_dev_get_temp_metric.argtypes = [amdsmi_device_handle,c_uint32,amdsmi_temperature_metric_t,POINTER(c_int64)] -_lib.amdsmi_dev_get_temp_metric.restype = amdsmi_status_t -amdsmi_dev_get_temp_metric = _lib.amdsmi_dev_get_temp_metric - -_lib.amdsmi_dev_get_volt_metric.argtypes = [amdsmi_device_handle,amdsmi_voltage_type_t,amdsmi_voltage_metric_t,POINTER(c_int64)] -_lib.amdsmi_dev_get_volt_metric.restype = amdsmi_status_t -amdsmi_dev_get_volt_metric = _lib.amdsmi_dev_get_volt_metric - -_lib.amdsmi_dev_reset_fan.argtypes = [amdsmi_device_handle,c_uint32] -_lib.amdsmi_dev_reset_fan.restype = amdsmi_status_t -amdsmi_dev_reset_fan = _lib.amdsmi_dev_reset_fan - -_lib.amdsmi_dev_set_fan_speed.argtypes = [amdsmi_device_handle,c_uint32,c_uint64] -_lib.amdsmi_dev_set_fan_speed.restype = amdsmi_status_t -amdsmi_dev_set_fan_speed = _lib.amdsmi_dev_set_fan_speed - -_lib.amdsmi_dev_get_busy_percent.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_dev_get_busy_percent.restype = amdsmi_status_t -amdsmi_dev_get_busy_percent = _lib.amdsmi_dev_get_busy_percent - -_lib.amdsmi_get_utilization_count.argtypes = [amdsmi_device_handle,POINTER(amdsmi_utilization_counter_t),c_uint32,POINTER(c_uint64)] -_lib.amdsmi_get_utilization_count.restype = amdsmi_status_t -amdsmi_get_utilization_count = _lib.amdsmi_get_utilization_count - -_lib.amdsmi_get_pcie_link_status.argtypes = [amdsmi_device_handle,POINTER(amdsmi_pcie_info_t)] -_lib.amdsmi_get_pcie_link_status.restype = amdsmi_status_t -amdsmi_get_pcie_link_status = _lib.amdsmi_get_pcie_link_status - -_lib.amdsmi_get_pcie_link_caps.argtypes = [amdsmi_device_handle,POINTER(amdsmi_pcie_info_t)] -_lib.amdsmi_get_pcie_link_caps.restype = amdsmi_status_t -amdsmi_get_pcie_link_caps = _lib.amdsmi_get_pcie_link_caps - -_lib.amdsmi_dev_get_perf_level.argtypes = [amdsmi_device_handle,POINTER(amdsmi_dev_perf_level_t)] -_lib.amdsmi_dev_get_perf_level.restype = amdsmi_status_t -amdsmi_dev_get_perf_level = _lib.amdsmi_dev_get_perf_level - -_lib.amdsmi_set_perf_determinism_mode.argtypes = [amdsmi_device_handle,c_uint64] -_lib.amdsmi_set_perf_determinism_mode.restype = amdsmi_status_t -amdsmi_set_perf_determinism_mode = _lib.amdsmi_set_perf_determinism_mode - -_lib.amdsmi_dev_get_overdrive_level.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_dev_get_overdrive_level.restype = amdsmi_status_t -amdsmi_dev_get_overdrive_level = _lib.amdsmi_dev_get_overdrive_level - -_lib.amdsmi_dev_get_gpu_clk_freq.argtypes = [amdsmi_device_handle,amdsmi_clk_type_t,POINTER(amdsmi_frequencies_t)] -_lib.amdsmi_dev_get_gpu_clk_freq.restype = amdsmi_status_t -amdsmi_dev_get_gpu_clk_freq = _lib.amdsmi_dev_get_gpu_clk_freq - -_lib.amdsmi_dev_reset_gpu.argtypes = [amdsmi_device_handle] -_lib.amdsmi_dev_reset_gpu.restype = amdsmi_status_t -amdsmi_dev_reset_gpu = _lib.amdsmi_dev_reset_gpu - -_lib.amdsmi_dev_get_od_volt_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_od_volt_freq_data_t)] -_lib.amdsmi_dev_get_od_volt_info.restype = amdsmi_status_t -amdsmi_dev_get_od_volt_info = _lib.amdsmi_dev_get_od_volt_info - -_lib.amdsmi_dev_get_gpu_metrics_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_gpu_metrics_t)] -_lib.amdsmi_dev_get_gpu_metrics_info.restype = amdsmi_status_t -amdsmi_dev_get_gpu_metrics_info = _lib.amdsmi_dev_get_gpu_metrics_info - -_lib.amdsmi_dev_set_clk_range.argtypes = [amdsmi_device_handle,c_uint64,c_uint64,amdsmi_clk_type_t] -_lib.amdsmi_dev_set_clk_range.restype = amdsmi_status_t -amdsmi_dev_set_clk_range = _lib.amdsmi_dev_set_clk_range - -_lib.amdsmi_dev_set_od_clk_info.argtypes = [amdsmi_device_handle,amdsmi_freq_ind_t,c_uint64,amdsmi_clk_type_t] -_lib.amdsmi_dev_set_od_clk_info.restype = amdsmi_status_t -amdsmi_dev_set_od_clk_info = _lib.amdsmi_dev_set_od_clk_info - -_lib.amdsmi_dev_set_od_volt_info.argtypes = [amdsmi_device_handle,c_uint32,c_uint64,c_uint64] -_lib.amdsmi_dev_set_od_volt_info.restype = amdsmi_status_t -amdsmi_dev_set_od_volt_info = _lib.amdsmi_dev_set_od_volt_info - -_lib.amdsmi_dev_get_od_volt_curve_regions.argtypes = [amdsmi_device_handle,POINTER(c_uint32),POINTER(amdsmi_freq_volt_region_t)] -_lib.amdsmi_dev_get_od_volt_curve_regions.restype = amdsmi_status_t -amdsmi_dev_get_od_volt_curve_regions = _lib.amdsmi_dev_get_od_volt_curve_regions - -_lib.amdsmi_dev_get_power_profile_presets.argtypes = [amdsmi_device_handle,c_uint32,POINTER(amdsmi_power_profile_status_t)] -_lib.amdsmi_dev_get_power_profile_presets.restype = amdsmi_status_t -amdsmi_dev_get_power_profile_presets = _lib.amdsmi_dev_get_power_profile_presets - -_lib.amdsmi_dev_set_perf_level.argtypes = [amdsmi_device_handle,amdsmi_dev_perf_level_t] -_lib.amdsmi_dev_set_perf_level.restype = amdsmi_status_t -amdsmi_dev_set_perf_level = _lib.amdsmi_dev_set_perf_level - -_lib.amdsmi_dev_set_perf_level_v1.argtypes = [amdsmi_device_handle,amdsmi_dev_perf_level_t] -_lib.amdsmi_dev_set_perf_level_v1.restype = amdsmi_status_t -amdsmi_dev_set_perf_level_v1 = _lib.amdsmi_dev_set_perf_level_v1 - -_lib.amdsmi_dev_set_overdrive_level.argtypes = [amdsmi_device_handle,c_uint32] -_lib.amdsmi_dev_set_overdrive_level.restype = amdsmi_status_t -amdsmi_dev_set_overdrive_level = _lib.amdsmi_dev_set_overdrive_level - -_lib.amdsmi_dev_set_overdrive_level_v1.argtypes = [amdsmi_device_handle,c_uint32] -_lib.amdsmi_dev_set_overdrive_level_v1.restype = amdsmi_status_t -amdsmi_dev_set_overdrive_level_v1 = _lib.amdsmi_dev_set_overdrive_level_v1 - -_lib.amdsmi_dev_set_clk_freq.argtypes = [amdsmi_device_handle,amdsmi_clk_type_t,c_uint64] -_lib.amdsmi_dev_set_clk_freq.restype = amdsmi_status_t -amdsmi_dev_set_clk_freq = _lib.amdsmi_dev_set_clk_freq - -_lib.amdsmi_get_version.argtypes = [POINTER(amdsmi_version_t)] -_lib.amdsmi_get_version.restype = amdsmi_status_t -amdsmi_get_version = _lib.amdsmi_get_version - -_lib.amdsmi_get_version_str.argtypes = [amdsmi_sw_component_t,c_char_p,c_uint32] -_lib.amdsmi_get_version_str.restype = amdsmi_status_t -amdsmi_get_version_str = _lib.amdsmi_get_version_str - -_lib.amdsmi_dev_get_ecc_count.argtypes = [amdsmi_device_handle,amdsmi_gpu_block_t,POINTER(amdsmi_error_count_t)] -_lib.amdsmi_dev_get_ecc_count.restype = amdsmi_status_t -amdsmi_dev_get_ecc_count = _lib.amdsmi_dev_get_ecc_count - -_lib.amdsmi_dev_get_ecc_enabled.argtypes = [amdsmi_device_handle,POINTER(c_uint64)] -_lib.amdsmi_dev_get_ecc_enabled.restype = amdsmi_status_t -amdsmi_dev_get_ecc_enabled = _lib.amdsmi_dev_get_ecc_enabled - -_lib.amdsmi_dev_get_ecc_status.argtypes = [amdsmi_device_handle,amdsmi_gpu_block_t,POINTER(amdsmi_ras_err_state_t)] -_lib.amdsmi_dev_get_ecc_status.restype = amdsmi_status_t -amdsmi_dev_get_ecc_status = _lib.amdsmi_dev_get_ecc_status - -_lib.amdsmi_status_string.argtypes = [amdsmi_status_t,POINTER(c_char_p)] -_lib.amdsmi_status_string.restype = amdsmi_status_t -amdsmi_status_string = _lib.amdsmi_status_string - -_lib.amdsmi_dev_counter_group_supported.argtypes = [amdsmi_device_handle,amdsmi_event_group_t] -_lib.amdsmi_dev_counter_group_supported.restype = amdsmi_status_t -amdsmi_dev_counter_group_supported = _lib.amdsmi_dev_counter_group_supported - -_lib.amdsmi_dev_create_counter.argtypes = [amdsmi_device_handle,amdsmi_event_type_t,POINTER(amdsmi_event_handle_t)] -_lib.amdsmi_dev_create_counter.restype = amdsmi_status_t -amdsmi_dev_create_counter = _lib.amdsmi_dev_create_counter - -_lib.amdsmi_dev_destroy_counter.argtypes = [amdsmi_event_handle_t] -_lib.amdsmi_dev_destroy_counter.restype = amdsmi_status_t -amdsmi_dev_destroy_counter = _lib.amdsmi_dev_destroy_counter - -_lib.amdsmi_control_counter.argtypes = [amdsmi_event_handle_t,amdsmi_counter_command_t,c_void_p] -_lib.amdsmi_control_counter.restype = amdsmi_status_t -amdsmi_control_counter = _lib.amdsmi_control_counter - -_lib.amdsmi_read_counter.argtypes = [amdsmi_event_handle_t,POINTER(amdsmi_counter_value_t)] -_lib.amdsmi_read_counter.restype = amdsmi_status_t -amdsmi_read_counter = _lib.amdsmi_read_counter - -_lib.amdsmi_counter_get_available_counters.argtypes = [amdsmi_device_handle,amdsmi_event_group_t,POINTER(c_uint32)] -_lib.amdsmi_counter_get_available_counters.restype = amdsmi_status_t -amdsmi_counter_get_available_counters = _lib.amdsmi_counter_get_available_counters - -_lib.amdsmi_get_compute_process_info.argtypes = [POINTER(amdsmi_process_info_t),POINTER(c_uint32)] -_lib.amdsmi_get_compute_process_info.restype = amdsmi_status_t -amdsmi_get_compute_process_info = _lib.amdsmi_get_compute_process_info - -_lib.amdsmi_get_compute_process_info_by_pid.argtypes = [c_uint32,POINTER(amdsmi_process_info_t)] -_lib.amdsmi_get_compute_process_info_by_pid.restype = amdsmi_status_t -amdsmi_get_compute_process_info_by_pid = _lib.amdsmi_get_compute_process_info_by_pid - -_lib.amdsmi_get_compute_process_gpus.argtypes = [c_uint32,POINTER(c_uint32),POINTER(c_uint32)] -_lib.amdsmi_get_compute_process_gpus.restype = amdsmi_status_t -amdsmi_get_compute_process_gpus = _lib.amdsmi_get_compute_process_gpus - -_lib.amdsmi_dev_xgmi_error_status.argtypes = [amdsmi_device_handle,POINTER(amdsmi_xgmi_status_t)] -_lib.amdsmi_dev_xgmi_error_status.restype = amdsmi_status_t -amdsmi_dev_xgmi_error_status = _lib.amdsmi_dev_xgmi_error_status - -_lib.amdsmi_dev_reset_xgmi_error.argtypes = [amdsmi_device_handle] -_lib.amdsmi_dev_reset_xgmi_error.restype = amdsmi_status_t -amdsmi_dev_reset_xgmi_error = _lib.amdsmi_dev_reset_xgmi_error - -_lib.amdsmi_topo_get_numa_node_number.argtypes = [amdsmi_device_handle,POINTER(c_uint32)] -_lib.amdsmi_topo_get_numa_node_number.restype = amdsmi_status_t -amdsmi_topo_get_numa_node_number = _lib.amdsmi_topo_get_numa_node_number - -_lib.amdsmi_topo_get_link_weight.argtypes = [amdsmi_device_handle,amdsmi_device_handle,POINTER(c_uint64)] -_lib.amdsmi_topo_get_link_weight.restype = amdsmi_status_t -amdsmi_topo_get_link_weight = _lib.amdsmi_topo_get_link_weight - -_lib.amdsmi_get_minmax_bandwidth.argtypes = [amdsmi_device_handle,amdsmi_device_handle,POINTER(c_uint64),POINTER(c_uint64)] -_lib.amdsmi_get_minmax_bandwidth.restype = amdsmi_status_t -amdsmi_get_minmax_bandwidth = _lib.amdsmi_get_minmax_bandwidth - -_lib.amdsmi_topo_get_link_type.argtypes = [amdsmi_device_handle,amdsmi_device_handle,POINTER(c_uint64),POINTER(AMDSMI_IO_LINK_TYPE)] -_lib.amdsmi_topo_get_link_type.restype = amdsmi_status_t -amdsmi_topo_get_link_type = _lib.amdsmi_topo_get_link_type - -_lib.amdsmi_is_P2P_accessible.argtypes = [amdsmi_device_handle,amdsmi_device_handle,POINTER(c_bool)] -_lib.amdsmi_is_P2P_accessible.restype = amdsmi_status_t -amdsmi_is_P2P_accessible = _lib.amdsmi_is_P2P_accessible - -_lib.amdsmi_dev_open_supported_func_iterator.argtypes = [amdsmi_device_handle,POINTER(amdsmi_func_id_iter_handle_t)] -_lib.amdsmi_dev_open_supported_func_iterator.restype = amdsmi_status_t -amdsmi_dev_open_supported_func_iterator = _lib.amdsmi_dev_open_supported_func_iterator - -_lib.amdsmi_dev_open_supported_variant_iterator.argtypes = [amdsmi_func_id_iter_handle_t,POINTER(amdsmi_func_id_iter_handle_t)] -_lib.amdsmi_dev_open_supported_variant_iterator.restype = amdsmi_status_t -amdsmi_dev_open_supported_variant_iterator = _lib.amdsmi_dev_open_supported_variant_iterator - -_lib.amdsmi_next_func_iter.argtypes = [amdsmi_func_id_iter_handle_t] -_lib.amdsmi_next_func_iter.restype = amdsmi_status_t -amdsmi_next_func_iter = _lib.amdsmi_next_func_iter - -_lib.amdsmi_dev_close_supported_func_iterator.argtypes = [POINTER(amdsmi_func_id_iter_handle_t)] -_lib.amdsmi_dev_close_supported_func_iterator.restype = amdsmi_status_t -amdsmi_dev_close_supported_func_iterator = _lib.amdsmi_dev_close_supported_func_iterator - -_lib.amdsmi_get_func_iter_value.argtypes = [amdsmi_func_id_iter_handle_t,POINTER(amdsmi_func_id_value_t)] -_lib.amdsmi_get_func_iter_value.restype = amdsmi_status_t -amdsmi_get_func_iter_value = _lib.amdsmi_get_func_iter_value - -_lib.amdsmi_init_event_notification.argtypes = [amdsmi_device_handle] -_lib.amdsmi_init_event_notification.restype = amdsmi_status_t -amdsmi_init_event_notification = _lib.amdsmi_init_event_notification - -_lib.amdsmi_set_event_notification_mask.argtypes = [amdsmi_device_handle,c_uint64] -_lib.amdsmi_set_event_notification_mask.restype = amdsmi_status_t -amdsmi_set_event_notification_mask = _lib.amdsmi_set_event_notification_mask - -_lib.amdsmi_get_event_notification.argtypes = [c_int,POINTER(c_uint32),POINTER(amdsmi_evt_notification_data_t)] -_lib.amdsmi_get_event_notification.restype = amdsmi_status_t -amdsmi_get_event_notification = _lib.amdsmi_get_event_notification - -_lib.amdsmi_stop_event_notification.argtypes = [amdsmi_device_handle] -_lib.amdsmi_stop_event_notification.restype = amdsmi_status_t -amdsmi_stop_event_notification = _lib.amdsmi_stop_event_notification - -_lib.amdsmi_get_device_bdf.argtypes = [amdsmi_device_handle,POINTER(amdsmi_bdf_t)] -_lib.amdsmi_get_device_bdf.restype = amdsmi_status_t -amdsmi_get_device_bdf = _lib.amdsmi_get_device_bdf - -_lib.amdsmi_get_device_uuid.argtypes = [amdsmi_device_handle,POINTER(c_uint),c_char_p] -_lib.amdsmi_get_device_uuid.restype = amdsmi_status_t -amdsmi_get_device_uuid = _lib.amdsmi_get_device_uuid - -_lib.amdsmi_get_driver_version.argtypes = [amdsmi_device_handle,POINTER(c_int),c_char_p] -_lib.amdsmi_get_driver_version.restype = amdsmi_status_t -amdsmi_get_driver_version = _lib.amdsmi_get_driver_version - -_lib.amdsmi_get_asic_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_asic_info_t)] -_lib.amdsmi_get_asic_info.restype = amdsmi_status_t -amdsmi_get_asic_info = _lib.amdsmi_get_asic_info - -_lib.amdsmi_get_board_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_board_info_t)] -_lib.amdsmi_get_board_info.restype = amdsmi_status_t -amdsmi_get_board_info = _lib.amdsmi_get_board_info - -_lib.amdsmi_get_power_cap_info.argtypes = [amdsmi_device_handle,c_uint32,POINTER(amdsmi_power_cap_info_t)] -_lib.amdsmi_get_power_cap_info.restype = amdsmi_status_t -amdsmi_get_power_cap_info = _lib.amdsmi_get_power_cap_info - -_lib.amdsmi_get_xgmi_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_xgmi_info_t)] -_lib.amdsmi_get_xgmi_info.restype = amdsmi_status_t -amdsmi_get_xgmi_info = _lib.amdsmi_get_xgmi_info - -_lib.amdsmi_get_caps_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_gpu_caps_t)] -_lib.amdsmi_get_caps_info.restype = amdsmi_status_t -amdsmi_get_caps_info = _lib.amdsmi_get_caps_info - -_lib.amdsmi_get_fw_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_fw_info_t)] -_lib.amdsmi_get_fw_info.restype = amdsmi_status_t -amdsmi_get_fw_info = _lib.amdsmi_get_fw_info - -_lib.amdsmi_get_vbios_info.argtypes = [amdsmi_device_handle,POINTER(amdsmi_vbios_info_t)] -_lib.amdsmi_get_vbios_info.restype = amdsmi_status_t -amdsmi_get_vbios_info = _lib.amdsmi_get_vbios_info - -_lib.amdsmi_get_gpu_activity.argtypes = [amdsmi_device_handle,POINTER(amdsmi_engine_usage_t)] -_lib.amdsmi_get_gpu_activity.restype = amdsmi_status_t -amdsmi_get_gpu_activity = _lib.amdsmi_get_gpu_activity - -_lib.amdsmi_get_power_measure.argtypes = [amdsmi_device_handle,POINTER(amdsmi_power_measure_t)] -_lib.amdsmi_get_power_measure.restype = amdsmi_status_t -amdsmi_get_power_measure = _lib.amdsmi_get_power_measure - -_lib.amdsmi_get_clock_measure.argtypes = [amdsmi_device_handle,amdsmi_clk_type_t,POINTER(amdsmi_clk_measure_t)] -_lib.amdsmi_get_clock_measure.restype = amdsmi_status_t -amdsmi_get_clock_measure = _lib.amdsmi_get_clock_measure - -_lib.amdsmi_get_temperature_measure.argtypes = [amdsmi_device_handle,amdsmi_temperature_type_t,POINTER(amdsmi_temperature_t)] -_lib.amdsmi_get_temperature_measure.restype = amdsmi_status_t -amdsmi_get_temperature_measure = _lib.amdsmi_get_temperature_measure - -_lib.amdsmi_get_temperature_limit.argtypes = [amdsmi_device_handle,amdsmi_temperature_type_t,POINTER(amdsmi_temperature_limit_t)] -_lib.amdsmi_get_temperature_limit.restype = amdsmi_status_t -amdsmi_get_temperature_limit = _lib.amdsmi_get_temperature_limit - -_lib.amdsmi_get_power_limit.argtypes = [amdsmi_device_handle,POINTER(amdsmi_power_limit_t)] -_lib.amdsmi_get_power_limit.restype = amdsmi_status_t -amdsmi_get_power_limit = _lib.amdsmi_get_power_limit - -_lib.amdsmi_get_vram_usage.argtypes = [amdsmi_device_handle,POINTER(amdsmi_vram_info_t)] -_lib.amdsmi_get_vram_usage.restype = amdsmi_status_t -amdsmi_get_vram_usage = _lib.amdsmi_get_vram_usage - -_lib.amdsmi_get_target_frequency_range.argtypes = [amdsmi_device_handle,amdsmi_clk_type_t,POINTER(amdsmi_frequency_range_t)] -_lib.amdsmi_get_target_frequency_range.restype = amdsmi_status_t -amdsmi_get_target_frequency_range = _lib.amdsmi_get_target_frequency_range - -_lib.amdsmi_get_process_list.argtypes = [amdsmi_device_handle,POINTER(amdsmi_process_handle),POINTER(c_uint32)] -_lib.amdsmi_get_process_list.restype = amdsmi_status_t -amdsmi_get_process_list = _lib.amdsmi_get_process_list - -_lib.amdsmi_get_process_info.argtypes = [amdsmi_device_handle,amdsmi_process_handle,POINTER(amdsmi_proc_info_t)] -_lib.amdsmi_get_process_info.restype = amdsmi_status_t -amdsmi_get_process_info = _lib.amdsmi_get_process_info - -_lib.amdsmi_get_ecc_error_count.argtypes = [amdsmi_device_handle,POINTER(amdsmi_error_count_t)] -_lib.amdsmi_get_ecc_error_count.restype = amdsmi_status_t -amdsmi_get_ecc_error_count = _lib.amdsmi_get_ecc_error_count - + 'device_type_t__enumvalues', 'size_t', + 'struct_amd_metrics_table_header_t', 'struct_amdsmi_asic_info', + 'struct_amdsmi_bdf_0', 'struct_amdsmi_board_info', + 'struct_amdsmi_clk_measure', 'struct_amdsmi_engine_usage', + 'struct_amdsmi_frequency_range', + 'struct_amdsmi_func_id_iter_handle', 'struct_amdsmi_fw_info', + 'struct_amdsmi_fw_info_0', 'struct_amdsmi_gpu_caps', + 'struct_amdsmi_gpu_caps_0', 'struct_amdsmi_gpu_caps_1', + 'struct_amdsmi_pcie_info', 'struct_amdsmi_power_cap_info', + 'struct_amdsmi_power_limit', 'struct_amdsmi_power_measure', + 'struct_amdsmi_process_info', 'struct_amdsmi_process_info_0', + 'struct_amdsmi_process_info_1', 'struct_amdsmi_temperature', + 'struct_amdsmi_temperature_limit', 'struct_amdsmi_vbios_info', + 'struct_amdsmi_vram_info', 'struct_amdsmi_xgmi_info', + 'struct_c__SA_amdsmi_counter_value_t', + 'struct_c__SA_amdsmi_error_count_t', + 'struct_c__SA_amdsmi_evt_notification_data_t', + 'struct_c__SA_amdsmi_freq_volt_region_t', + 'struct_c__SA_amdsmi_frequencies_t', + 'struct_c__SA_amdsmi_gpu_metrics_t', + 'struct_c__SA_amdsmi_od_vddc_point_t', + 'struct_c__SA_amdsmi_od_volt_curve_t', + 'struct_c__SA_amdsmi_od_volt_freq_data_t', + 'struct_c__SA_amdsmi_pcie_bandwidth_t', + 'struct_c__SA_amdsmi_power_profile_status_t', + 'struct_c__SA_amdsmi_process_info_t', + 'struct_c__SA_amdsmi_range_t', + 'struct_c__SA_amdsmi_retired_page_record_t', + 'struct_c__SA_amdsmi_utilization_counter_t', + 'struct_c__SA_amdsmi_version_t', 'uint32_t', 'uint64_t', + 'union_amd_id', 'union_amd_id_0', 'union_amdsmi_bdf'] diff --git a/projects/amdsmi/py-interface/rocm_smi_tool.py b/projects/amdsmi/py-interface/rocm_smi_tool.py index 7aad94a9f2..c6670a693d 100644 --- a/projects/amdsmi/py-interface/rocm_smi_tool.py +++ b/projects/amdsmi/py-interface/rocm_smi_tool.py @@ -491,7 +491,7 @@ def amdsmi_tool_dev_pci_bandwidth_set(dev, dic): def amdsmi_tool_dev_gpu_clk_freq_get(dev): result = {} - for clock_type in smi_api.AmdSmiClockType: + for clock_type in smi_api.AmdSmiClkType: try: value = smi_api. amdsmi_dev_get_gpu_clk_freq(dev, clock_type) result.update({clock_type.name: value}) @@ -618,7 +618,7 @@ def amdsmi_tool_dev_clk_range_set(dev, dic): result = {} min_clk = dic["min_clk"] max_clk = dic["max_clk"] - for clock_type in smi_api.AmdSmiClockType: + for clock_type in smi_api.AmdSmiClkType: try: value = smi_api.amdsmi_dev_set_clk_range(dev, min_clk, max_clk, clock_type) result.update({clock_type.name: value}) @@ -641,7 +641,7 @@ def amdsmi_tool_dev_counter_group_supported(dev): def amdsmi_tool_dev_gpu_clk_freq_set(dev, dic): result = {} freq_bitmask = dic["freq_bitmask"] - for clock_type in smi_api.AmdSmiClockType: + for clock_type in smi_api.AmdSmiClkType: try: value = smi_api. amdsmi_dev_set_clk_freq(dev, clock_type, freq_bitmask) result.update({clock_type.name: value}) @@ -654,10 +654,10 @@ def amdsmi_tool_dev_od_clk_info_set(dev, dic): result = {} value = dic["value"] for freq_ind in smi_api.AmdSmiFreqInd: - for clock_type in smi_api.AmdSmiClockType: + for clock_type in smi_api.AmdSmiClkType: try: value = smi_api. amdsmi_dev_set_od_clk_info(dev, freq_ind, value, clock_type) - result.update({"AmdSmiFreqInd: " + freq_ind.name + ", AmdSmiClockType: " + clock_type.name: value}) + result.update({"AmdSmiFreqInd: " + freq_ind.name + ", AmdSmiClkType: " + clock_type.name: value}) except smi_api.AmdSmiException as e: print("{},{}:\t{}".format(freq_ind.name, clock_type.name, e)) diff --git a/projects/amdsmi/tools/generator.py b/projects/amdsmi/tools/generator.py index ab6f5852e4..210904171a 100644 --- a/projects/amdsmi/tools/generator.py +++ b/projects/amdsmi/tools/generator.py @@ -19,435 +19,18 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # + +import os import sys -import re -import os -from ctypes import * -from subprocess import call -from subprocess import check_output - -sys.path.append(os.getcwd()) - -import ctypeslib -from ctypeslib.clang2py import main as clang2py - -INTERFACE_SPECIFICATION = sys.argv[1] -OUTPUT_DIRECTORY = sys.argv[2] -LIBRARY_BINARY = sys.argv[3] -OUTPUT_FILE = "amdsmi_wrapper.py" -SMI_LIB_CTYPES = "amdsmi_lib_ctypes.py" -SMI_LIB_RET = "amdsmi_lib_ret.py" - -INTERFACE_FUNCTIONS = os.path.join(OUTPUT_DIRECTORY, "amdsmi_functions.h") - -API_REGEX_MATCHER = r"(\w+\s*\w*[\s\*]+)\s*(\w+)\(([^)]*)\);" -API_REGEX_TYPEDEF = r"typedef\s*(\w+)\s*(.*);" - -# Pointer statuses -NO_POINTER = 0 -SINGLE_POINTER = 1 -DOUBLE_POINTER = 2 -TRIPLE_POINTER = 3 - -clang_include_dir = "/usr/include/" -try: - clang_include_dir = os.path.join( - check_output(["clang", "-print-resource-dir"]).decode("utf-8").strip(), - "include/", - ) -except Exception as e: - print( - "Clang not found on the system. The script might not work properly. {}".format( - e - ) - ) - - -def ParseHeaderFile() -> bool: - """ - This function will parse the data from the main header file, create separate - temporary files which will then be used as arguments for clang2py(). Afterwards, - when the generator successfully completes wrapper generation - these temporary - files will be removed. - - `Parameters`: None. - - `Returns`: - `bool`: True if success, False if failed. - """ - - if not os.path.exists(INTERFACE_SPECIFICATION): - return False - - lib_types = "" - type_read_enablers = [ - "#include ", - "typedef enum amdsmi_init_flags {", - "typedef enum amdsmi_clk_type {", - ] - type_read_disablers = [ - " * @brief Initialization flags", - "} device_type_t;", - "} amdsmi_func_id_value_t;", - ] - reader_mask = False - - with open(INTERFACE_SPECIFICATION, "r") as types: - for i, line in enumerate(types): - if line.strip() in type_read_enablers: - reader_mask = True - if reader_mask: - lib_types += line - if line.strip() in type_read_disablers: - reader_mask = False - - with open(os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_types.h"), "w") as file_saver: - file_saver.write(lib_types) - - lib_ret_out = "" - ret_reader_enablers = ["#include ", "typedef enum amdsmi_status_t {"] - ret_reader_disablers = [" * @brief Initialization flags", "} amdsmi_status_t;"] - reader_mask = False - with open(INTERFACE_SPECIFICATION, "r") as ret_out: - for idx, line in enumerate(ret_out): - if line.strip() in ret_reader_enablers: - reader_mask = True - if reader_mask: - lib_ret_out += line - if line.strip() in ret_reader_disablers: - reader_mask = False - with open(os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_ret.h"), "w") as file_saver: - file_saver.write(lib_ret_out) - - functions_out = "" - functions_reader_enablers = [ - "#include ", - "amdsmi_status_t amdsmi_init(uint64_t init_flags);", - ] - functions_reader_disablers = [ - "typedef enum amdsmi_init_flags {", - "amdsmi_get_ecc_error_count(amdsmi_device_handle dev, amdsmi_error_count_t *ec);", - ] - reader_mask = False - with open(INTERFACE_SPECIFICATION, "r") as ret_out: - for idx, line in enumerate(ret_out): - if line.strip() in functions_reader_enablers: - reader_mask = True - if reader_mask: - functions_out += line - if line.strip() in functions_reader_disablers: - reader_mask = False - with open(INTERFACE_FUNCTIONS, "w") as file_saver: - file_saver.write(functions_out) - - sys.argv = [ - "generator.py", - "--clang-args=-I" + clang_include_dir, - os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_types.h"), - "-o", - os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_ctypes.py"), - ] - clang2py() - - sys.argv = [ - "generator.py", - os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_ret.h"), - "-o", - os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_ret.py"), - ] - clang2py() - - return True - - -def DeducePointerStatus(variable: str) -> int: - """ - Function used to deduce pointer status of a specific variable. - - `Parameters`: - * variable (`str`): Variable string for which the pointer status - is to be deduced. - - `Returns`: - `int`: Degree of pointer deduced (0 for no pointer status found - and 3 for a triple pointer). - """ - if ("***" in variable) or ("**" in variable and "[]" in variable): - return TRIPLE_POINTER - elif ("**" in variable) or ("*" in variable and "[]" in variable): - return DOUBLE_POINTER - elif "*" in variable or "[]" in variable: - return SINGLE_POINTER - return NO_POINTER - - -def TypeCast(cxxtype: str, ptr_status=0) -> str: - """ - Function used to type cast a cxx type to the corresponding ctypes - type. - - `Parameters`: - * cxxtype (`str`): String containing the cxx type. - * ptr_status (`int`): Integer describing pointer status of the - cxx type. - - `Returns`: - `str`: String containing the corresponding ctypes type. - """ - if cxxtype == "void" and ptr_status: - return "c_void_p" - elif cxxtype == "char" and ptr_status: - return "c_char_p" - elif cxxtype == "int": - return "c_int" - elif cxxtype == "unsigned int": - return "c_uint" - elif cxxtype == "unsigned": - return "c_uint" - elif cxxtype == "uint8_t": - return "c_uint8" - elif cxxtype == "uint16_t": - return "c_uint16" - elif cxxtype == "uint32_t": - return "c_uint32" - elif cxxtype == "size_t": - return "c_uint64" - elif cxxtype == "uint64_t": - return "c_uint64" - elif cxxtype == "int8_t": - return "c_int8" - elif cxxtype == "int16_t": - return "c_int16" - elif cxxtype == "int32_t": - return "c_int32" - elif cxxtype == "int64_t": - return "c_int64" - elif cxxtype == "float": - return "c_float" - elif cxxtype == "double": - return "c_double" - elif cxxtype == "char": - return "c_char" - elif cxxtype == "bool": - return "c_bool" - elif cxxtype == "void": - return "" - else: - return cxxtype - - -def GetType(cxxtype: str, ptr_status=0) -> str: - """ - Function used to retrieve ctypes type of a cxx type. - - `Parameters`: - * cxxtype (`str`): String containing the cxx type. - * ptr_status (`int`): Integer representing the pointer - status of the cxx type. - - `Returns`: - `str`: String of the ctypes type that was retrieved. - """ - if cxxtype == "void" and ptr_status == 2: - return "POINTER(" + TypeCast(cxxtype, ptr_status=1) + ")" - elif cxxtype == "void" and ptr_status == 1: - return TypeCast(cxxtype, ptr_status) - elif cxxtype == "char" and ptr_status == 2: - return "POINTER(" + TypeCast(cxxtype, ptr_status=1) + ")" - elif cxxtype == "char" and ptr_status == 1: - return TypeCast(cxxtype, ptr_status) - elif ptr_status == 2: - return "POINTER(POINTER(" + TypeCast(cxxtype) + "))" - elif ptr_status == 1: - return "POINTER(" + TypeCast(cxxtype) + ")" - else: - return TypeCast(cxxtype) - - -def DetectOpaquePointer(variable_type: str, variable: str, ptr_status=0) -> bool: - """ - Function used to check whether a variable is an opaque pointer. - - `Parameters`: - * variable_type (`str`): String containing the variable type. - * variable (`str`): String containing the variable name. - * ptr_status (`int`): Integer representing the pointer status found. - - `Returns`: - `bool`: Bool representing whether an opaque pointer was deduced or not. - """ - if variable_type == "struct" and len(variable.split(" ")) > 1 and ptr_status == 1: - return True - return False - - -def TypeDefConvert(variable_type: str, variable: str) -> str: - """ - Function used to break down a typedef down and extract the cxx type. - This type will then further be converted to a ctypes type. - - `Parameters`: - * variable_type (`str`): String containing the variable type. - * variable (`str`): String containing the variable name. - - `Returns`: - `str`: Finalized string containing the proper definition with ctypes - type. - """ - ptr_status = DeducePointerStatus(variable) - variable = variable.replace("*", " ").strip() - cxxtypedef = str() - if DetectOpaquePointer(variable_type, variable, ptr_status): - variables = variable.split(" ") - cxxtypedef = variables[2] + " = ctypes." + GetType(variables[0], ptr_status) - else: - cxxtypedef = variable + " = ctypes." + GetType(variable_type, ptr_status) - - return cxxtypedef - - -def ParseParameters(parameters: str) -> list: - """ - Function that parses function parameters and returns a list containing - ctypes types for the given parameters. - - An example return value: - [smi_device_handle, POINTER(smi_device_handle), POINTER(smi_vf_config)] - - `Parameters`: - * parameters (`str`): String containing the parameters for parsing. - - `Returns`: - `list`: List containing ctypes types for the given parameters. - """ - if parameters == "": - return [] - - parameter_array = parameters.split(",") - - result = [] - for param in parameter_array: - ptr_status = DeducePointerStatus(param) - param = param.strip().split(" ") - - while "const" in param: - param.remove("const") - - if param[0] == "unsigned" and len(param) == 3: - input = param[0] + " " + param[1] - result.append(GetType(input, ptr_status)) - elif param[0] == "struct" or param[0] == "union" or param[0] == "enum": - result.append(GetType(param[1], ptr_status)) - else: - result.append(GetType(param[0], ptr_status)) - - return "[{}]".format(",".join(result)) - - -def CleanTempFiles() -> None: - """ - This function cleans up the temporary files created by the generator. - - `Parameters`: None. - - `Returns`: None. - """ - os.remove(INTERFACE_FUNCTIONS) - os.remove(os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_ret.h")) - os.remove(os.path.join(OUTPUT_DIRECTORY, "amdsmi_lib_types.h")) - - -def main() -> str: - """ - Py wrapper generator. - - `Parameters`: None. - - `Returns`: - `str`: String containing status message. - """ - api = [] - api_expose = [] - typedef_list = [] - typedef_expose = [] - - if not ParseHeaderFile(): - return "Error - header file missing." - - format_code = ["clang-format", "-i", INTERFACE_FUNCTIONS] - try: - ret = call(format_code) - if ret < 0: - print("Clang-format failed to run") - except Exception as e: - print( - "Clang-format not found on the system. The script might not work properly. {}".format( - e - ) - ) - - with open(INTERFACE_FUNCTIONS) as specification: - file_specification = specification.read() - # find all typedefs and construct typedef_list in format [{typedef_name} = {ctypes_type}] - # typedef_expose is the list containing only the names of typedefs [{typedef_name}] - for variable_type, variable in re.findall( - API_REGEX_TYPEDEF, file_specification - ): - typedef_list.append(TypeDefConvert(variable_type, variable)) - typedef_expose.append(variable.replace("*", "")) - - # Get all components from function declaration(return type, function name, parameters) and - # append to api list - # api = [{return_type} = {ctypes_type}, {function_name} = {name}, {args} = [{ctypes_type}]] - for returnType, functionName, parameters in re.findall( - API_REGEX_MATCHER, file_specification - ): - ptr_status = DeducePointerStatus(returnType) - - returnType = returnType.replace("*", " ").strip() - returnedType = GetType(returnType, ptr_status) - - api.append( - { - "return_type": returnedType, - "function_name": functionName, - "args": ParseParameters(parameters), - } - ) - # api_expose is the list of all functions(function names) in the interface - api_expose.append(functionName) - - api_string = "" - for method in api: - api_string += """ -_lib.{function_name}.argtypes = {argument_array} -_lib.{function_name}.restype = {return_type} -{function_name} = _lib.{function_name} -""".format( - function_name=method["function_name"], - argument_array=method["args"], - return_type=method["return_type"], - ) - - typedef_list_out = "" - for typedef_item in typedef_list: - typedef_list_out += typedef_item + "\n" - - smi_lib_ctypes_out = "" - with open(os.path.join(OUTPUT_DIRECTORY, SMI_LIB_CTYPES), "r") as smi_lib_ctypes: - smi_lib_ctypes_out = smi_lib_ctypes.read() - smi_lib_ctypes_out = smi_lib_ctypes_out.replace("struct_", "") - smi_lib_ctypes_out = smi_lib_ctypes_out.replace("union_", "") - smi_lib_ctypes_out = smi_lib_ctypes_out.replace("POINTER(None)", "c_void_p") - - smi_lib_ret_out = "" - with open(os.path.join(OUTPUT_DIRECTORY, SMI_LIB_RET), "r") as smi_lib_ret: - smi_lib_ret_out = smi_lib_ret.read() - smi_lib_ret_out = smi_lib_ret_out.replace("__all__ =", "__all__ +=") - - with open(os.path.join(OUTPUT_DIRECTORY, OUTPUT_FILE), "w") as out: - out.write( - """ +import argparse +import tempfile +import shutil +import platform +from subprocess import run, PIPE +from ctypeslib.clang2py import main as clangToPy + +HEADER = \ +""" # # Copyright (C) 2022 Advanced Micro Devices. All rights reserved. # @@ -469,36 +52,71 @@ _lib.{function_name}.restype = {return_type} # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -from ctypes import * -from ctypes import POINTER -from subprocess import run -from subprocess import PIPE import os +""" -{SMI_LIB_TYPES} -{SMI_LIB_RET} -{TYPEDEF_LIST} -__all__ += {API_EXPOSE} -__all__ += {TYPEDEF_EXPOSE} +def parseArgument(): + parser = argparse.ArgumentParser(description="parse input arguments") + parser.add_argument('-o','--output', type=str, required=True, + help='The output file name') + parser.add_argument('-i','--input', type=str, required=True, + help='The input file name') + parser.add_argument('-l', '--library', type=str, required=True, + help='Loading dynamic link libraries') + args = vars(parser.parse_args()) -_lib = CDLL(os.path.join(os.path.dirname(__file__), "libamd_smi.so")) + return args['output'], args['input'], args['library'] -{API} -""".format( - SMI_LIB_TYPES=smi_lib_ctypes_out, - SMI_LIB_RET=smi_lib_ret_out, - TYPEDEF_LIST=typedef_list_out, - API_EXPOSE=api_expose, - TYPEDEF_EXPOSE=typedef_expose, - BINARY=LIBRARY_BINARY, - API=api_string, - ) - ) - CleanTempFiles() - return "Success - wrapper generated." + +def replace_line(full_path_file_name, string_to_repalce, new_string): + fh, abs_path = tempfile.mkstemp() + with os.fdopen(fh, 'w') as new_file: + new_file.write(HEADER) + with open(full_path_file_name, 'r+') as old_file: + for line in old_file: + new_file.write(line.replace(string_to_repalce, new_string)) + + shutil.copymode(full_path_file_name, abs_path) + os.remove(full_path_file_name) + shutil.move(abs_path, full_path_file_name) + + +def main(): + output_file, input_file, library = parseArgument() + + library_name = os.path.basename(library) + + clang_include_dir = \ + run(["clang", "--print-resource-dir"], stdout=PIPE, stderr=PIPE, encoding="utf-8").stdout.strip() + + os_platform = platform.system() + if os_platform == "Windows": + clang_include_dir += "\include" + if "Program Files(x86)" in clang_include_dir: + clang_include_dir = clang_include_dir.replace("Program Files(x86)", "Progra~2") + elif "Program Files" in clang_include_dir: + clang_include_dir = clang_include_dir.replace("Program Files", "Progra~1") + + arguments = [input_file, "-o", output_file] + line_to_replace = "_libraries['FIXME_STUB'] = FunctionFactoryStub() # ctypes.CDLL('FIXME_STUB')" + new_line = "_libraries['FIXME_STUB'] = ctypes.CDLL('{}')".format(library_name) + elif os_platform == "Linux": + clang_include_dir += "/include" + arguments = [input_file, "-o", output_file, "-l", library] + library_path = os.path.join(os.path.dirname(__file__), library) + line_to_replace = "_libraries['{}'] = ctypes.CDLL('{}')".format(library_name, library_path) + new_line = "_libraries['{}'] = ctypes.CDLL(os.path.join(os.path.dirname(__file__), '{}'))" \ + .format(library_name, library_name) + else: + print("Unknown operating system. It is only supporing Linux and Windows.") + return + + arguments.append(f"--clang-args=-I" + clang_include_dir) + clangToPy(arguments) + + replace_line(output_file, line_to_replace, new_line) if __name__ == "__main__": - status = main() - print(status) + main()