diff --git a/example/amd_smi_drm_example.cc b/example/amd_smi_drm_example.cc index 3d5e8c15e9..94c7dbc49e 100644 --- a/example/amd_smi_drm_example.cc +++ b/example/amd_smi_drm_example.cc @@ -40,18 +40,20 @@ * DEALINGS WITH THE SOFTWARE. * */ -#include -#include -#include -#include "amd_smi/amdsmi.h" -#include -#include #include #include -#include +#include + +#include +#include +#include +#include +#include #include +#include "amd_smi/amdsmi.h" + #define CHK_AMDSMI_RET(RET) \ { \ @@ -272,8 +274,10 @@ int main() { CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_gpu_device_bdf:\n"); printf("\tDevice[%d] BDF %04lx:%02x:%02x.%d\n\n", i, - bdf.domain_number, bdf.bus_number, bdf.device_number, - bdf.function_number); + bdf.fields.domain_number, + bdf.fields.bus_number, + bdf.fields.device_number, + bdf.fields.function_number); // Get handle from BDF amdsmi_processor_handle dev_handle; @@ -407,7 +411,7 @@ int main() { // Get temperature measurements // amdsmi_temperature_t edge_temp, junction_temp, vram_temp, // plx_temp; - int64_t temp_measurements[4]; + int64_t temp_measurements[TEMPERATURE_TYPE__MAX + 1]; amdsmi_temperature_type_t temp_types[4] = { TEMPERATURE_TYPE_EDGE, TEMPERATURE_TYPE_JUNCTION, TEMPERATURE_TYPE_VRAM, TEMPERATURE_TYPE_PLX}; @@ -507,8 +511,11 @@ int main() { uint64_t mem = 0, gtt_mem = 0, cpu_mem = 0, vram_mem = 0; uint64_t gfx = 0, enc = 0; char bdf_str[20]; - sprintf(bdf_str, "%04lx:%02x:%02x.%d", bdf.domain_number, - bdf.bus_number, bdf.device_number, bdf.function_number); + sprintf(bdf_str, "%04lx:%02x:%02x.%d", + bdf.fields.domain_number, + bdf.fields.bus_number, + bdf.fields.device_number, + bdf.fields.function_number); int num = 0; ret = amdsmi_get_gpu_process_list(processor_handles[j], &num_process, process_list); @@ -543,7 +550,7 @@ int main() { "==+=========================================+\n"); for (int it = 0; it < num; it++) { char command[30]; - struct passwd *pwd = NULL; + struct passwd *pwd = nullptr; struct stat st; sprintf(command, "/proc/%d", info_list[it].pid); diff --git a/example/amd_smi_nodrm_example.cc b/example/amd_smi_nodrm_example.cc index f287281c72..0c82b81178 100644 --- a/example/amd_smi_nodrm_example.cc +++ b/example/amd_smi_nodrm_example.cc @@ -40,17 +40,21 @@ * DEALINGS WITH THE SOFTWARE. * */ -#include -#include -#include -#include "amd_smi/amdsmi.h" -#include -#include + #include #include +#include + +#include +#include +#include +#include +#include #include +#include "amd_smi/amdsmi.h" + #define CHK_AMDSMI_RET(RET) \ { \ if (RET != AMDSMI_STATUS_SUCCESS) { \ @@ -123,8 +127,10 @@ int main() { CHK_AMDSMI_RET(ret) printf(" Output of amdsmi_get_gpu_device_bdf:\n"); printf("\tDevice[%d] BDF %04lx:%02x:%02x.%d\n\n", i, - bdf.domain_number, bdf.bus_number, bdf.device_number, - bdf.function_number); + bdf.fields.domain_number, + bdf.fields.bus_number, + bdf.fields.device_number, + bdf.fields.function_number); amdsmi_asic_info_t asic_info = {}; ret = amdsmi_get_gpu_asic_info(processor_handles[j], &asic_info); @@ -219,7 +225,7 @@ int main() { .fw_version); // Get temperature measurements - int64_t temp_measurements[4]; + int64_t temp_measurements[TEMPERATURE_TYPE__MAX + 1]; amdsmi_temperature_type_t temp_types[4] = { TEMPERATURE_TYPE_EDGE, TEMPERATURE_TYPE_JUNCTION, TEMPERATURE_TYPE_VRAM, TEMPERATURE_TYPE_PLX}; @@ -275,13 +281,6 @@ int main() { printf("\tCorrectable errors: %lu\n", err_cnt_info.correctable_count); printf("\tUncorrectable errors: %lu\n\n", err_cnt_info.uncorrectable_count); - // Get process list - auto compare = [](const void *a, const void *b) -> int { - return (*(amdsmi_proc_info_t *)a).pid > - (*(amdsmi_proc_info_t *)b).pid - ? 1 - : -1; - }; // Get device name amdsmi_board_info_t board_info = {}; diff --git a/example/amdsmi_esmi_intg_example.cc b/example/amdsmi_esmi_intg_example.cc index 78de1f1566..bc84b7a73d 100644 --- a/example/amdsmi_esmi_intg_example.cc +++ b/example/amdsmi_esmi_intg_example.cc @@ -59,10 +59,11 @@ using namespace std; { \ if (RET != AMDSMI_STATUS_SUCCESS) { \ const char *err_str; \ + const char **status_str; \ std::cout << "AMDSMI call returned " << RET << " at line " \ << __LINE__ << std::endl; \ - amdsmi_status_code_to_string(RET, &err_str); \ - std::cout << err_str << std::endl; \ + *status_str = amdsmi_get_esmi_err_msg(RET, &err_str); \ + std::cout << *status_str << std::endl; \ return RET; \ } \ } @@ -113,14 +114,14 @@ int main(int argc, char **argv) { CHK_AMDSMI_RET(ret) std::cout << "core_count=" << core_count << std::endl; - ret = amdsmi_get_hsmp_proto_ver(&proto_ver); + ret = amdsmi_get_cpu_hsmp_proto_ver(sockets[i], &proto_ver); CHK_AMDSMI_RET(ret) cout<<"\n------------------------------------------"; cout<<"\n| HSMP Proto Version | "<< proto_ver <<"\t\t |"<< endl; cout<<"------------------------------------------\n"; - ret = amdsmi_get_smu_fw_version(&smu_fw); + ret = amdsmi_get_cpu_smu_fw_version(sockets[i], &smu_fw); CHK_AMDSMI_RET(ret) cout<<"\n------------------------------------------"; @@ -289,7 +290,46 @@ int main(int argc, char **argv) { cout<<" NA (Err:" <>input_power; + ret = amdsmi_get_cpu_socket_power_cap_max(sockets[i], i, &powermax); + CHK_AMDSMI_RET(ret) + if ((ret == AMDSMI_STATUS_SUCCESS) && (input_power > powermax)) { + cout<<"Input power is more than max power limit," + " limiting to "<(powermax)/1000<<"Watts\n"; + input_power = powermax; + } + ret = amdsmi_set_cpu_socket_power_cap(sockets[i], i, input_power); + CHK_AMDSMI_RET(ret) + if (!ret) { + cout<<"Socket["<(input_power)/1000<<" Watts successfully\n"; + } + cout<<"\n-------------------------------------------------\n"; + #if 0 + uint8_t mode; + const char *err_str; + cout <<"Enter the power efficiency mode to be set[0, 1 or 2]:\n"; + cin>>mode; + ret = amdsmi_set_cpu_pwr_efficiency_mode(sockets[i], i, mode); + CHK_AMDSMI_RET(ret) + + if (ret != AMDSMI_STATUS_SUCCESS) { + cout<<"Failed to set power efficiency mode for socket["< str: Returns: `str`: String containing BDF data in a readable format. """ - domain = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.domain_number)[2:].zfill(4) - bus = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.bus_number)[2:].zfill(2) - device = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.device_number)[2:].zfill(2) - function = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.function_number)[2:] + domain = hex(amdsmi_bdf.fields.domain_number)[2:].zfill(4) + bus = hex(amdsmi_bdf.fields.bus_number)[2:].zfill(2) + device = hex(amdsmi_bdf.fields.device_number)[2:].zfill(2) + function = hex(amdsmi_bdf.fields.function_number)[2:] return domain + ":" + bus + ":" + device + "." + function @@ -495,10 +495,10 @@ def _make_amdsmi_bdf_from_list(bdf): if len(bdf) != 4: return None amdsmi_bdf = amdsmi_wrapper.amdsmi_bdf_t() - amdsmi_bdf.c__UA_amdsmi_bdf_t_0.function_number = bdf[3] - amdsmi_bdf.c__UA_amdsmi_bdf_t_0.device_number = bdf[2] - amdsmi_bdf.c__UA_amdsmi_bdf_t_0.bus_number = bdf[1] - amdsmi_bdf.c__UA_amdsmi_bdf_t_0.domain_number = bdf[0] + amdsmi_bdf.fields.function_number = bdf[3] + amdsmi_bdf.fields.device_number = bdf[2] + amdsmi_bdf.fields.bus_number = bdf[1] + amdsmi_bdf.fields.domain_number = bdf[0] return amdsmi_bdf @@ -1422,32 +1422,6 @@ def amdsmi_set_gpu_perf_level( processor_handle, perf_level)) -def amdsmi_get_gpu_power_profile_presets( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - - sensor_idx = ctypes.c_uint32(sensor_idx) - status = amdsmi_wrapper.amdsmi_power_profile_status_t() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_power_profile_presets( - processor_handle, sensor_idx, ctypes.byref(status) - ) - ) - - return { - "available_profiles": status.available_profiles, - "current": status.current, - "num_profiles": status.num_profiles, - } - - def amdsmi_reset_gpu(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( @@ -1457,23 +1431,6 @@ def amdsmi_reset_gpu(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): _check_res(amdsmi_wrapper.amdsmi_reset_gpu(processor_handle)) -def amdsmi_set_gpu_perf_determinism_mode( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clock_value: int -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(clock_value, int): - raise AmdSmiParameterException(clock_value, int) - clock_value = ctypes.c_uint64(clock_value) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_perf_determinism_mode( - processor_handle, clock_value) - ) - - def amdsmi_set_gpu_fan_speed( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int, fan_speed: int ): @@ -1998,7 +1955,7 @@ def amdsmi_get_utilization_count( result = [{"timestamp": timestamp.value}] for idx in range(count.value): - counter_type = amdsmi_wrapper.c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues[ + counter_type = amdsmi_wrapper.AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues[ util_counter_list[idx].type ] if counter_type == "AMDSMI_UTILIZATION_COUNTER_LAST": @@ -2024,7 +1981,7 @@ def amdsmi_get_gpu_perf_level( processor_handle, ctypes.byref(perf)) ) - result = amdsmi_wrapper.c__EA_amdsmi_dev_perf_level_t__enumvalues[perf.value] + result = amdsmi_wrapper.amdsmi_dev_perf_level_t__enumvalues[perf.value] if result == "AMDSMI_DEV_PERF_LEVEL_FIRST": result = "AMDSMI_DEV_PERF_LEVEL_AUTO" if result == "AMDSMI_DEV_PERF_LEVEL_LAST": diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py index ff38c86e45..eeded45f6b 100644 --- a/py-interface/amdsmi_wrapper.py +++ b/py-interface/amdsmi_wrapper.py @@ -23,7 +23,7 @@ import os # -*- coding: utf-8 -*- # -# TARGET arch is: ['-I/usr/lib/llvm-14/lib/clang/14.0.0/include'] +# TARGET arch is: ['-I/usr/lib64/clang/16/include'] # WORD_SIZE is: 8 # POINTER_SIZE is: 8 # LONGDOUBLE_SIZE is: 16 @@ -173,23 +173,27 @@ libamd_smi_optrocm = Path("/opt/rocm/lib/libamd_smi.so") libamd_smi_parent_dir = Path(__file__).resolve().parent / "libamd_smi.so" libamd_smi_cwd = Path.cwd() / "libamd_smi.so" -if libamd_smi_cpack.is_file(): - # try to find library in install directory provided by CMake - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cpack) -elif libamd_smi_optrocm.is_file(): - # try /opt/rocm/lib as a fallback - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_optrocm) -elif libamd_smi_parent_dir.is_file(): - # try to fall back to parent directory - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_parent_dir) -else: - # lastly - search in current working directory - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cwd) +try: + if libamd_smi_cpack.is_file(): + # try to find library in install directory provided by CMake + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cpack) + elif libamd_smi_optrocm.is_file(): + # try /opt/rocm/lib as a fallback + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_optrocm) + elif libamd_smi_parent_dir.is_file(): + # try to fall back to parent directory + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_parent_dir) + else: + # lastly - search in current working directory + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cwd) +except OSError as error: + print(error) + print("Unable to find amdsmi library try installing amd-smi-lib from your package manager") -# values for enumeration 'c__EA_amdsmi_init_flags_t' -c__EA_amdsmi_init_flags_t__enumvalues = { +# values for enumeration 'amdsmi_init_flags_t' +amdsmi_init_flags_t__enumvalues = { 0: 'AMDSMI_INIT_ALL_PROCESSORS', 1: 'AMDSMI_INIT_AMD_CPUS', 2: 'AMDSMI_INIT_AMD_GPUS', @@ -201,12 +205,10 @@ AMDSMI_INIT_AMD_CPUS = 1 AMDSMI_INIT_AMD_GPUS = 2 AMDSMI_INIT_NON_AMD_CPUS = 4 AMDSMI_INIT_NON_AMD_GPUS = 8 -c__EA_amdsmi_init_flags_t = ctypes.c_uint32 # enum -amdsmi_init_flags_t = c__EA_amdsmi_init_flags_t -amdsmi_init_flags_t__enumvalues = c__EA_amdsmi_init_flags_t__enumvalues +amdsmi_init_flags_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_mm_ip_t' -c__EA_amdsmi_mm_ip_t__enumvalues = { +# values for enumeration 'amdsmi_mm_ip_t' +amdsmi_mm_ip_t__enumvalues = { 0: 'AMDSMI_MM_UVD', 1: 'AMDSMI_MM_VCE', 2: 'AMDSMI_MM_VCN', @@ -216,42 +218,40 @@ AMDSMI_MM_UVD = 0 AMDSMI_MM_VCE = 1 AMDSMI_MM_VCN = 2 AMDSMI_MM__MAX = 3 -c__EA_amdsmi_mm_ip_t = ctypes.c_uint32 # enum -amdsmi_mm_ip_t = c__EA_amdsmi_mm_ip_t -amdsmi_mm_ip_t__enumvalues = c__EA_amdsmi_mm_ip_t__enumvalues +amdsmi_mm_ip_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_container_types_t' -c__EA_amdsmi_container_types_t__enumvalues = { +# values for enumeration 'amdsmi_container_types_t' +amdsmi_container_types_t__enumvalues = { 0: 'CONTAINER_LXC', 1: 'CONTAINER_DOCKER', } CONTAINER_LXC = 0 CONTAINER_DOCKER = 1 -c__EA_amdsmi_container_types_t = ctypes.c_uint32 # enum -amdsmi_container_types_t = c__EA_amdsmi_container_types_t -amdsmi_container_types_t__enumvalues = c__EA_amdsmi_container_types_t__enumvalues +amdsmi_container_types_t = ctypes.c_uint32 # enum amdsmi_processor_handle = ctypes.POINTER(None) amdsmi_socket_handle = ctypes.POINTER(None) -# values for enumeration 'c__EA_processor_type_t' -c__EA_processor_type_t__enumvalues = { +# values for enumeration 'processor_type_t' +processor_type_t__enumvalues = { 0: 'UNKNOWN', 1: 'AMD_GPU', 2: 'AMD_CPU', 3: 'NON_AMD_GPU', 4: 'NON_AMD_CPU', + 5: 'AMD_CPU_CORE', + 6: 'AMD_APU', } UNKNOWN = 0 AMD_GPU = 1 AMD_CPU = 2 NON_AMD_GPU = 3 NON_AMD_CPU = 4 -c__EA_processor_type_t = ctypes.c_uint32 # enum -processor_type_t = c__EA_processor_type_t -processor_type_t__enumvalues = c__EA_processor_type_t__enumvalues +AMD_CPU_CORE = 5 +AMD_APU = 6 +processor_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_status_t' -c__EA_amdsmi_status_t__enumvalues = { +# values for enumeration 'amdsmi_status_t' +amdsmi_status_t__enumvalues = { 0: 'AMDSMI_STATUS_SUCCESS', 1: 'AMDSMI_STATUS_INVAL', 2: 'AMDSMI_STATUS_NOT_SUPPORTED', @@ -280,6 +280,16 @@ c__EA_amdsmi_status_t__enumvalues = { 41: 'AMDSMI_STATUS_INSUFFICIENT_SIZE', 42: 'AMDSMI_STATUS_UNEXPECTED_SIZE', 43: 'AMDSMI_STATUS_UNEXPECTED_DATA', + 44: 'AMDSMI_STATUS_NON_AMD_CPU', + 45: 'AMDSMI_NO_ENERGY_DRV', + 46: 'AMDSMI_NO_MSR_DRV', + 47: 'AMDSMI_NO_HSMP_DRV', + 48: 'AMDSMI_NO_HSMP_SUP', + 49: 'AMDSMI_NO_HSMP_MSG_SUP', + 50: 'AMDSMI_HSMP_TIMEOUT', + 51: 'AMDSMI_NO_DRV', + 52: 'AMDSMI_FILE_NOT_FOUND', + 53: 'AMDSMI_ARG_PTR_NULL', 4294967294: 'AMDSMI_STATUS_MAP_ERROR', 4294967295: 'AMDSMI_STATUS_UNKNOWN_ERROR', } @@ -311,14 +321,22 @@ AMDSMI_STATUS_NO_DATA = 40 AMDSMI_STATUS_INSUFFICIENT_SIZE = 41 AMDSMI_STATUS_UNEXPECTED_SIZE = 42 AMDSMI_STATUS_UNEXPECTED_DATA = 43 +AMDSMI_STATUS_NON_AMD_CPU = 44 +AMDSMI_NO_ENERGY_DRV = 45 +AMDSMI_NO_MSR_DRV = 46 +AMDSMI_NO_HSMP_DRV = 47 +AMDSMI_NO_HSMP_SUP = 48 +AMDSMI_NO_HSMP_MSG_SUP = 49 +AMDSMI_HSMP_TIMEOUT = 50 +AMDSMI_NO_DRV = 51 +AMDSMI_FILE_NOT_FOUND = 52 +AMDSMI_ARG_PTR_NULL = 53 AMDSMI_STATUS_MAP_ERROR = 4294967294 AMDSMI_STATUS_UNKNOWN_ERROR = 4294967295 -c__EA_amdsmi_status_t = ctypes.c_uint32 # enum -amdsmi_status_t = c__EA_amdsmi_status_t -amdsmi_status_t__enumvalues = c__EA_amdsmi_status_t__enumvalues +amdsmi_status_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_clk_type_t' -c__EA_amdsmi_clk_type_t__enumvalues = { +# values for enumeration 'amdsmi_clk_type_t' +amdsmi_clk_type_t__enumvalues = { 0: 'CLK_TYPE_SYS', 0: 'CLK_TYPE_FIRST', 0: 'CLK_TYPE_GFX', @@ -346,12 +364,10 @@ CLK_TYPE_VCLK1 = 7 CLK_TYPE_DCLK0 = 8 CLK_TYPE_DCLK1 = 9 CLK_TYPE__MAX = 9 -c__EA_amdsmi_clk_type_t = ctypes.c_uint32 # enum -amdsmi_clk_type_t = c__EA_amdsmi_clk_type_t -amdsmi_clk_type_t__enumvalues = c__EA_amdsmi_clk_type_t__enumvalues +amdsmi_clk_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_temperature_type_t' -c__EA_amdsmi_temperature_type_t__enumvalues = { +# values for enumeration 'amdsmi_temperature_type_t' +amdsmi_temperature_type_t__enumvalues = { 0: 'TEMPERATURE_TYPE_EDGE', 0: 'TEMPERATURE_TYPE_FIRST', 1: 'TEMPERATURE_TYPE_JUNCTION', @@ -373,12 +389,10 @@ TEMPERATURE_TYPE_HBM_2 = 5 TEMPERATURE_TYPE_HBM_3 = 6 TEMPERATURE_TYPE_PLX = 7 TEMPERATURE_TYPE__MAX = 7 -c__EA_amdsmi_temperature_type_t = ctypes.c_uint32 # enum -amdsmi_temperature_type_t = c__EA_amdsmi_temperature_type_t -amdsmi_temperature_type_t__enumvalues = c__EA_amdsmi_temperature_type_t__enumvalues +amdsmi_temperature_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_fw_block_t' -c__EA_amdsmi_fw_block_t__enumvalues = { +# values for enumeration 'amdsmi_fw_block_t' +amdsmi_fw_block_t__enumvalues = { 1: 'FW_ID_SMU', 1: 'FW_ID_FIRST', 2: 'FW_ID_CP_CE', @@ -538,25 +552,23 @@ FW_ID_RLC_SRLS = 75 FW_ID_SMC = 76 FW_ID_DMCU = 77 FW_ID__MAX = 78 -c__EA_amdsmi_fw_block_t = ctypes.c_uint32 # enum -amdsmi_fw_block_t = c__EA_amdsmi_fw_block_t -amdsmi_fw_block_t__enumvalues = c__EA_amdsmi_fw_block_t__enumvalues -class struct_c__SA_amdsmi_range_t(Structure): +amdsmi_fw_block_t = ctypes.c_uint32 # enum +class struct_amdsmi_range_t(Structure): pass -struct_c__SA_amdsmi_range_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_range_t._fields_ = [ +struct_amdsmi_range_t._pack_ = 1 # source:False +struct_amdsmi_range_t._fields_ = [ ('lower_bound', ctypes.c_uint64), ('upper_bound', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_range_t = struct_c__SA_amdsmi_range_t -class struct_c__SA_amdsmi_xgmi_info_t(Structure): +amdsmi_range_t = struct_amdsmi_range_t +class struct_amdsmi_xgmi_info_t(Structure): pass -struct_c__SA_amdsmi_xgmi_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_xgmi_info_t._fields_ = [ +struct_amdsmi_xgmi_info_t._pack_ = 1 # source:False +struct_amdsmi_xgmi_info_t._fields_ = [ ('xgmi_lanes', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), ('xgmi_hive_id', ctypes.c_uint64), @@ -565,55 +577,55 @@ struct_c__SA_amdsmi_xgmi_info_t._fields_ = [ ('reserved', ctypes.c_uint32 * 9), ] -amdsmi_xgmi_info_t = struct_c__SA_amdsmi_xgmi_info_t -class struct_c__SA_amdsmi_vram_info_t(Structure): +amdsmi_xgmi_info_t = struct_amdsmi_xgmi_info_t +class struct_amdsmi_vram_info_t(Structure): pass -struct_c__SA_amdsmi_vram_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_vram_info_t._fields_ = [ +struct_amdsmi_vram_info_t._pack_ = 1 # source:False +struct_amdsmi_vram_info_t._fields_ = [ ('vram_total', ctypes.c_uint32), ('vram_used', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 2), ] -amdsmi_vram_info_t = struct_c__SA_amdsmi_vram_info_t -class struct_c__SA_amdsmi_frequency_range_t(Structure): +amdsmi_vram_info_t = struct_amdsmi_vram_info_t +class struct_amdsmi_frequency_range_t(Structure): pass -struct_c__SA_amdsmi_frequency_range_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_frequency_range_t._fields_ = [ +struct_amdsmi_frequency_range_t._pack_ = 1 # source:False +struct_amdsmi_frequency_range_t._fields_ = [ ('supported_freq_range', amdsmi_range_t), ('current_freq_range', amdsmi_range_t), ('reserved', ctypes.c_uint32 * 8), ] -amdsmi_frequency_range_t = struct_c__SA_amdsmi_frequency_range_t -class union_c__UA_amdsmi_bdf_t(Union): +amdsmi_frequency_range_t = struct_amdsmi_frequency_range_t +class union_amdsmi_bdf_t(Union): pass -class struct_c__UA_amdsmi_bdf_t_0(Structure): +class struct_fields_(Structure): pass -struct_c__UA_amdsmi_bdf_t_0._pack_ = 1 # source:False -struct_c__UA_amdsmi_bdf_t_0._fields_ = [ +struct_fields_._pack_ = 1 # source:False +struct_fields_._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), ] -union_c__UA_amdsmi_bdf_t._pack_ = 1 # source:False -union_c__UA_amdsmi_bdf_t._fields_ = [ - ('c__UA_amdsmi_bdf_t_0', struct_c__UA_amdsmi_bdf_t_0), +union_amdsmi_bdf_t._pack_ = 1 # source:False +union_amdsmi_bdf_t._fields_ = [ + ('fields', struct_fields_), ('as_uint', ctypes.c_uint64), ] -amdsmi_bdf_t = union_c__UA_amdsmi_bdf_t -class struct_c__SA_amdsmi_power_cap_info_t(Structure): +amdsmi_bdf_t = union_amdsmi_bdf_t +class struct_amdsmi_power_cap_info_t(Structure): pass -struct_c__SA_amdsmi_power_cap_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_power_cap_info_t._fields_ = [ +struct_amdsmi_power_cap_info_t._pack_ = 1 # source:False +struct_amdsmi_power_cap_info_t._fields_ = [ ('power_cap', ctypes.c_uint64), ('default_power_cap', ctypes.c_uint64), ('dpm_cap', ctypes.c_uint64), @@ -622,12 +634,12 @@ struct_c__SA_amdsmi_power_cap_info_t._fields_ = [ ('reserved', ctypes.c_uint64 * 3), ] -amdsmi_power_cap_info_t = struct_c__SA_amdsmi_power_cap_info_t -class struct_c__SA_amdsmi_vbios_info_t(Structure): +amdsmi_power_cap_info_t = struct_amdsmi_power_cap_info_t +class struct_amdsmi_vbios_info_t(Structure): pass -struct_c__SA_amdsmi_vbios_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_vbios_info_t._fields_ = [ +struct_amdsmi_vbios_info_t._pack_ = 1 # source:False +struct_amdsmi_vbios_info_t._fields_ = [ ('name', ctypes.c_char * 64), ('build_date', ctypes.c_char * 32), ('part_number', ctypes.c_char * 64), @@ -635,61 +647,62 @@ struct_c__SA_amdsmi_vbios_info_t._fields_ = [ ('reserved', ctypes.c_uint32 * 16), ] -amdsmi_vbios_info_t = struct_c__SA_amdsmi_vbios_info_t -class struct_c__SA_amdsmi_fw_info_t(Structure): +amdsmi_vbios_info_t = struct_amdsmi_vbios_info_t +class struct_amdsmi_fw_info_t(Structure): pass -class struct_c__SA_amdsmi_fw_info_t_0(Structure): +class struct_fw_info_list_(Structure): pass -struct_c__SA_amdsmi_fw_info_t_0._pack_ = 1 # source:False -struct_c__SA_amdsmi_fw_info_t_0._fields_ = [ +struct_fw_info_list_._pack_ = 1 # source:False +struct_fw_info_list_._fields_ = [ ('fw_id', amdsmi_fw_block_t), ('PADDING_0', ctypes.c_ubyte * 4), ('fw_version', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -struct_c__SA_amdsmi_fw_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_fw_info_t._fields_ = [ +struct_amdsmi_fw_info_t._pack_ = 1 # source:False +struct_amdsmi_fw_info_t._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), - ('fw_info_list', struct_c__SA_amdsmi_fw_info_t_0 * 78), + ('fw_info_list', struct_fw_info_list_ * 78), ('reserved', ctypes.c_uint32 * 7), ('PADDING_1', ctypes.c_ubyte * 4), ] -amdsmi_fw_info_t = struct_c__SA_amdsmi_fw_info_t -class struct_c__SA_amdsmi_asic_info_t(Structure): +amdsmi_fw_info_t = struct_amdsmi_fw_info_t +class struct_amdsmi_asic_info_t(Structure): pass -struct_c__SA_amdsmi_asic_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_asic_info_t._fields_ = [ +struct_amdsmi_asic_info_t._pack_ = 1 # source:False +struct_amdsmi_asic_info_t._fields_ = [ ('market_name', ctypes.c_char * 64), ('vendor_id', ctypes.c_uint32), + ('vendor_name', ctypes.c_char * 64), ('subvendor_id', ctypes.c_uint32), ('device_id', ctypes.c_uint64), ('rev_id', ctypes.c_uint32), ('asic_serial', ctypes.c_char * 32), - ('reserved', ctypes.c_uint32 * 3), + ('reserved', ctypes.c_uint32 * 19), ] -amdsmi_asic_info_t = struct_c__SA_amdsmi_asic_info_t -class struct_c__SA_amdsmi_driver_info_t(Structure): +amdsmi_asic_info_t = struct_amdsmi_asic_info_t +class struct_amdsmi_driver_info_t(Structure): pass -struct_c__SA_amdsmi_driver_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_driver_info_t._fields_ = [ +struct_amdsmi_driver_info_t._pack_ = 1 # source:False +struct_amdsmi_driver_info_t._fields_ = [ ('driver_version', ctypes.c_char * 64), ('driver_date', ctypes.c_char * 64), ] -amdsmi_driver_info_t = struct_c__SA_amdsmi_driver_info_t -class struct_c__SA_amdsmi_board_info_t(Structure): +amdsmi_driver_info_t = struct_amdsmi_driver_info_t +class struct_amdsmi_board_info_t(Structure): pass -struct_c__SA_amdsmi_board_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_board_info_t._fields_ = [ +struct_amdsmi_board_info_t._pack_ = 1 # source:False +struct_amdsmi_board_info_t._fields_ = [ ('serial_number', ctypes.c_uint64), ('is_master', ctypes.c_bool), ('model_number', ctypes.c_char * 32), @@ -700,12 +713,12 @@ struct_c__SA_amdsmi_board_info_t._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 7), ] -amdsmi_board_info_t = struct_c__SA_amdsmi_board_info_t -class struct_c__SA_amdsmi_power_info_t(Structure): +amdsmi_board_info_t = struct_amdsmi_board_info_t +class struct_amdsmi_power_info_t(Structure): pass -struct_c__SA_amdsmi_power_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_power_info_t._fields_ = [ +struct_amdsmi_power_info_t._pack_ = 1 # source:False +struct_amdsmi_power_info_t._fields_ = [ ('average_socket_power', ctypes.c_uint32), ('gfx_voltage', ctypes.c_uint32), ('soc_voltage', ctypes.c_uint32), @@ -714,72 +727,72 @@ struct_c__SA_amdsmi_power_info_t._fields_ = [ ('reserved', ctypes.c_uint32 * 11), ] -amdsmi_power_info_t = struct_c__SA_amdsmi_power_info_t -class struct_c__SA_amdsmi_clk_info_t(Structure): +amdsmi_power_info_t = struct_amdsmi_power_info_t +class struct_amdsmi_clk_info_t(Structure): pass -struct_c__SA_amdsmi_clk_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_clk_info_t._fields_ = [ +struct_amdsmi_clk_info_t._pack_ = 1 # source:False +struct_amdsmi_clk_info_t._fields_ = [ ('cur_clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 5), ] -amdsmi_clk_info_t = struct_c__SA_amdsmi_clk_info_t -class struct_c__SA_amdsmi_engine_usage_t(Structure): +amdsmi_clk_info_t = struct_amdsmi_clk_info_t +class struct_amdsmi_engine_usage_t(Structure): pass -struct_c__SA_amdsmi_engine_usage_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_engine_usage_t._fields_ = [ +struct_amdsmi_engine_usage_t._pack_ = 1 # source:False +struct_amdsmi_engine_usage_t._fields_ = [ ('gfx_activity', ctypes.c_uint32), ('umc_activity', ctypes.c_uint32), ('mm_activity', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 13), ] -amdsmi_engine_usage_t = struct_c__SA_amdsmi_engine_usage_t +amdsmi_engine_usage_t = struct_amdsmi_engine_usage_t amdsmi_process_handle_t = ctypes.c_uint32 -class struct_c__SA_amdsmi_proc_info_t(Structure): +class struct_amdsmi_proc_info_t(Structure): pass -class struct_c__SA_amdsmi_proc_info_t_0(Structure): +class struct_memory_usage_(Structure): pass -struct_c__SA_amdsmi_proc_info_t_0._pack_ = 1 # source:False -struct_c__SA_amdsmi_proc_info_t_0._fields_ = [ - ('gfx', ctypes.c_uint64), - ('enc', ctypes.c_uint64), - ('reserved', ctypes.c_uint32 * 12), -] - -class struct_c__SA_amdsmi_proc_info_t_1(Structure): - pass - -struct_c__SA_amdsmi_proc_info_t_1._pack_ = 1 # source:False -struct_c__SA_amdsmi_proc_info_t_1._fields_ = [ +struct_memory_usage_._pack_ = 1 # source:False +struct_memory_usage_._fields_ = [ ('gtt_mem', ctypes.c_uint64), ('cpu_mem', ctypes.c_uint64), ('vram_mem', ctypes.c_uint64), ('reserved', ctypes.c_uint32 * 10), ] -struct_c__SA_amdsmi_proc_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_proc_info_t._fields_ = [ +class struct_engine_usage_(Structure): + pass + +struct_engine_usage_._pack_ = 1 # source:False +struct_engine_usage_._fields_ = [ + ('gfx', ctypes.c_uint64), + ('enc', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 12), +] + +struct_amdsmi_proc_info_t._pack_ = 1 # source:False +struct_amdsmi_proc_info_t._fields_ = [ ('name', ctypes.c_char * 32), ('pid', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('mem', ctypes.c_uint64), - ('engine_usage', struct_c__SA_amdsmi_proc_info_t_0), - ('memory_usage', struct_c__SA_amdsmi_proc_info_t_1), + ('engine_usage', struct_engine_usage_), + ('memory_usage', struct_memory_usage_), ('container_name', ctypes.c_char * 32), ('reserved', ctypes.c_uint32 * 4), ] -amdsmi_proc_info_t = struct_c__SA_amdsmi_proc_info_t +amdsmi_proc_info_t = struct_amdsmi_proc_info_t -# values for enumeration 'c__EA_amdsmi_dev_perf_level_t' -c__EA_amdsmi_dev_perf_level_t__enumvalues = { +# values for enumeration 'amdsmi_dev_perf_level_t' +amdsmi_dev_perf_level_t__enumvalues = { 0: 'AMDSMI_DEV_PERF_LEVEL_AUTO', 0: 'AMDSMI_DEV_PERF_LEVEL_FIRST', 1: 'AMDSMI_DEV_PERF_LEVEL_LOW', @@ -805,13 +818,11 @@ AMDSMI_DEV_PERF_LEVEL_STABLE_MIN_SCLK = 7 AMDSMI_DEV_PERF_LEVEL_DETERMINISM = 8 AMDSMI_DEV_PERF_LEVEL_LAST = 8 AMDSMI_DEV_PERF_LEVEL_UNKNOWN = 256 -c__EA_amdsmi_dev_perf_level_t = ctypes.c_uint32 # enum -amdsmi_dev_perf_level_t = c__EA_amdsmi_dev_perf_level_t -amdsmi_dev_perf_level_t__enumvalues = c__EA_amdsmi_dev_perf_level_t__enumvalues +amdsmi_dev_perf_level_t = ctypes.c_uint32 # enum amdsmi_event_handle_t = ctypes.c_uint64 -# values for enumeration 'c__EA_amdsmi_event_group_t' -c__EA_amdsmi_event_group_t__enumvalues = { +# values for enumeration 'amdsmi_event_group_t' +amdsmi_event_group_t__enumvalues = { 0: 'AMDSMI_EVNT_GRP_XGMI', 10: 'AMDSMI_EVNT_GRP_XGMI_DATA_OUT', 4294967295: 'AMDSMI_EVNT_GRP_INVALID', @@ -819,12 +830,10 @@ c__EA_amdsmi_event_group_t__enumvalues = { AMDSMI_EVNT_GRP_XGMI = 0 AMDSMI_EVNT_GRP_XGMI_DATA_OUT = 10 AMDSMI_EVNT_GRP_INVALID = 4294967295 -c__EA_amdsmi_event_group_t = ctypes.c_uint32 # enum -amdsmi_event_group_t = c__EA_amdsmi_event_group_t -amdsmi_event_group_t__enumvalues = c__EA_amdsmi_event_group_t__enumvalues +amdsmi_event_group_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_event_type_t' -c__EA_amdsmi_event_type_t__enumvalues = { +# values for enumeration 'amdsmi_event_type_t' +amdsmi_event_type_t__enumvalues = { 0: 'AMDSMI_EVNT_FIRST', 0: 'AMDSMI_EVNT_XGMI_FIRST', 0: 'AMDSMI_EVNT_XGMI_0_NOP_TX', @@ -866,34 +875,30 @@ AMDSMI_EVNT_XGMI_DATA_OUT_4 = 14 AMDSMI_EVNT_XGMI_DATA_OUT_5 = 15 AMDSMI_EVNT_XGMI_DATA_OUT_LAST = 15 AMDSMI_EVNT_LAST = 15 -c__EA_amdsmi_event_type_t = ctypes.c_uint32 # enum -amdsmi_event_type_t = c__EA_amdsmi_event_type_t -amdsmi_event_type_t__enumvalues = c__EA_amdsmi_event_type_t__enumvalues +amdsmi_event_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_counter_command_t' -c__EA_amdsmi_counter_command_t__enumvalues = { +# values for enumeration 'amdsmi_counter_command_t' +amdsmi_counter_command_t__enumvalues = { 0: 'AMDSMI_CNTR_CMD_START', 1: 'AMDSMI_CNTR_CMD_STOP', } AMDSMI_CNTR_CMD_START = 0 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 struct_c__SA_amdsmi_counter_value_t(Structure): +amdsmi_counter_command_t = ctypes.c_uint32 # enum +class struct_amdsmi_counter_value_t(Structure): pass -struct_c__SA_amdsmi_counter_value_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_counter_value_t._fields_ = [ +struct_amdsmi_counter_value_t._pack_ = 1 # source:False +struct_amdsmi_counter_value_t._fields_ = [ ('value', ctypes.c_uint64), ('time_enabled', ctypes.c_uint64), ('time_running', ctypes.c_uint64), ] -amdsmi_counter_value_t = struct_c__SA_amdsmi_counter_value_t +amdsmi_counter_value_t = struct_amdsmi_counter_value_t -# values for enumeration 'c__EA_amdsmi_evt_notification_type_t' -c__EA_amdsmi_evt_notification_type_t__enumvalues = { +# values for enumeration 'amdsmi_evt_notification_type_t' +amdsmi_evt_notification_type_t__enumvalues = { 1: 'AMDSMI_EVT_NOTIF_VMFAULT', 1: 'AMDSMI_EVT_NOTIF_FIRST', 2: 'AMDSMI_EVT_NOTIF_THERMAL_THROTTLE', @@ -907,24 +912,22 @@ AMDSMI_EVT_NOTIF_THERMAL_THROTTLE = 2 AMDSMI_EVT_NOTIF_GPU_PRE_RESET = 3 AMDSMI_EVT_NOTIF_GPU_POST_RESET = 4 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 struct_c__SA_amdsmi_evt_notification_data_t(Structure): +amdsmi_evt_notification_type_t = ctypes.c_uint32 # enum +class struct_amdsmi_evt_notification_data_t(Structure): pass -struct_c__SA_amdsmi_evt_notification_data_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_evt_notification_data_t._fields_ = [ +struct_amdsmi_evt_notification_data_t._pack_ = 1 # source:False +struct_amdsmi_evt_notification_data_t._fields_ = [ ('processor_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 = struct_c__SA_amdsmi_evt_notification_data_t +amdsmi_evt_notification_data_t = struct_amdsmi_evt_notification_data_t -# values for enumeration 'c__EA_amdsmi_temperature_metric_t' -c__EA_amdsmi_temperature_metric_t__enumvalues = { +# values for enumeration 'amdsmi_temperature_metric_t' +amdsmi_temperature_metric_t__enumvalues = { 0: 'AMDSMI_TEMP_CURRENT', 0: 'AMDSMI_TEMP_FIRST', 1: 'AMDSMI_TEMP_MAX', @@ -958,12 +961,10 @@ AMDSMI_TEMP_OFFSET = 11 AMDSMI_TEMP_LOWEST = 12 AMDSMI_TEMP_HIGHEST = 13 AMDSMI_TEMP_LAST = 13 -c__EA_amdsmi_temperature_metric_t = ctypes.c_uint32 # enum -amdsmi_temperature_metric_t = c__EA_amdsmi_temperature_metric_t -amdsmi_temperature_metric_t__enumvalues = c__EA_amdsmi_temperature_metric_t__enumvalues +amdsmi_temperature_metric_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_voltage_metric_t' -c__EA_amdsmi_voltage_metric_t__enumvalues = { +# values for enumeration 'amdsmi_voltage_metric_t' +amdsmi_voltage_metric_t__enumvalues = { 0: 'AMDSMI_VOLT_CURRENT', 0: 'AMDSMI_VOLT_FIRST', 1: 'AMDSMI_VOLT_MAX', @@ -985,12 +986,10 @@ AMDSMI_VOLT_AVERAGE = 5 AMDSMI_VOLT_LOWEST = 6 AMDSMI_VOLT_HIGHEST = 7 AMDSMI_VOLT_LAST = 7 -c__EA_amdsmi_voltage_metric_t = ctypes.c_uint32 # enum -amdsmi_voltage_metric_t = c__EA_amdsmi_voltage_metric_t -amdsmi_voltage_metric_t__enumvalues = c__EA_amdsmi_voltage_metric_t__enumvalues +amdsmi_voltage_metric_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_voltage_type_t' -c__EA_amdsmi_voltage_type_t__enumvalues = { +# values for enumeration 'amdsmi_voltage_type_t' +amdsmi_voltage_type_t__enumvalues = { 0: 'AMDSMI_VOLT_TYPE_FIRST', 0: 'AMDSMI_VOLT_TYPE_VDDGFX', 0: 'AMDSMI_VOLT_TYPE_LAST', @@ -1000,12 +999,10 @@ AMDSMI_VOLT_TYPE_FIRST = 0 AMDSMI_VOLT_TYPE_VDDGFX = 0 AMDSMI_VOLT_TYPE_LAST = 0 AMDSMI_VOLT_TYPE_INVALID = 4294967295 -c__EA_amdsmi_voltage_type_t = ctypes.c_uint32 # enum -amdsmi_voltage_type_t = c__EA_amdsmi_voltage_type_t -amdsmi_voltage_type_t__enumvalues = c__EA_amdsmi_voltage_type_t__enumvalues +amdsmi_voltage_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_power_profile_preset_masks_t' -c__EA_amdsmi_power_profile_preset_masks_t__enumvalues = { +# values for enumeration 'amdsmi_power_profile_preset_masks_t' +amdsmi_power_profile_preset_masks_t__enumvalues = { 1: 'AMDSMI_PWR_PROF_PRST_CUSTOM_MASK', 2: 'AMDSMI_PWR_PROF_PRST_VIDEO_MASK', 4: 'AMDSMI_PWR_PROF_PRST_POWER_SAVING_MASK', @@ -1025,12 +1022,10 @@ AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK = 32 AMDSMI_PWR_PROF_PRST_BOOTUP_DEFAULT = 64 AMDSMI_PWR_PROF_PRST_LAST = 64 AMDSMI_PWR_PROF_PRST_INVALID = 18446744073709551615 -c__EA_amdsmi_power_profile_preset_masks_t = ctypes.c_uint64 # enum -amdsmi_power_profile_preset_masks_t = c__EA_amdsmi_power_profile_preset_masks_t -amdsmi_power_profile_preset_masks_t__enumvalues = c__EA_amdsmi_power_profile_preset_masks_t__enumvalues +amdsmi_power_profile_preset_masks_t = ctypes.c_uint64 # enum -# values for enumeration 'c__EA_amdsmi_gpu_block_t' -c__EA_amdsmi_gpu_block_t__enumvalues = { +# values for enumeration 'amdsmi_gpu_block_t' +amdsmi_gpu_block_t__enumvalues = { 0: 'AMDSMI_GPU_BLOCK_INVALID', 1: 'AMDSMI_GPU_BLOCK_FIRST', 1: 'AMDSMI_GPU_BLOCK_UMC', @@ -1068,12 +1063,10 @@ AMDSMI_GPU_BLOCK_MP1 = 4096 AMDSMI_GPU_BLOCK_FUSE = 8192 AMDSMI_GPU_BLOCK_LAST = 8192 AMDSMI_GPU_BLOCK_RESERVED = 9223372036854775808 -c__EA_amdsmi_gpu_block_t = ctypes.c_uint64 # enum -amdsmi_gpu_block_t = c__EA_amdsmi_gpu_block_t -amdsmi_gpu_block_t__enumvalues = c__EA_amdsmi_gpu_block_t__enumvalues +amdsmi_gpu_block_t = ctypes.c_uint64 # enum -# values for enumeration 'c__EA_amdsmi_ras_err_state_t' -c__EA_amdsmi_ras_err_state_t__enumvalues = { +# values for enumeration 'amdsmi_ras_err_state_t' +amdsmi_ras_err_state_t__enumvalues = { 0: 'AMDSMI_RAS_ERR_STATE_NONE', 1: 'AMDSMI_RAS_ERR_STATE_DISABLED', 2: 'AMDSMI_RAS_ERR_STATE_PARITY', @@ -1093,12 +1086,10 @@ AMDSMI_RAS_ERR_STATE_POISON = 5 AMDSMI_RAS_ERR_STATE_ENABLED = 6 AMDSMI_RAS_ERR_STATE_LAST = 6 AMDSMI_RAS_ERR_STATE_INVALID = 4294967295 -c__EA_amdsmi_ras_err_state_t = ctypes.c_uint32 # enum -amdsmi_ras_err_state_t = c__EA_amdsmi_ras_err_state_t -amdsmi_ras_err_state_t__enumvalues = c__EA_amdsmi_ras_err_state_t__enumvalues +amdsmi_ras_err_state_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_memory_type_t' -c__EA_amdsmi_memory_type_t__enumvalues = { +# values for enumeration 'amdsmi_memory_type_t' +amdsmi_memory_type_t__enumvalues = { 0: 'AMDSMI_MEM_TYPE_FIRST', 0: 'AMDSMI_MEM_TYPE_VRAM', 1: 'AMDSMI_MEM_TYPE_VIS_VRAM', @@ -1110,12 +1101,10 @@ AMDSMI_MEM_TYPE_VRAM = 0 AMDSMI_MEM_TYPE_VIS_VRAM = 1 AMDSMI_MEM_TYPE_GTT = 2 AMDSMI_MEM_TYPE_LAST = 2 -c__EA_amdsmi_memory_type_t = ctypes.c_uint32 # enum -amdsmi_memory_type_t = c__EA_amdsmi_memory_type_t -amdsmi_memory_type_t__enumvalues = c__EA_amdsmi_memory_type_t__enumvalues +amdsmi_memory_type_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_freq_ind_t' -c__EA_amdsmi_freq_ind_t__enumvalues = { +# values for enumeration 'amdsmi_freq_ind_t' +amdsmi_freq_ind_t__enumvalues = { 0: 'AMDSMI_FREQ_IND_MIN', 1: 'AMDSMI_FREQ_IND_MAX', 4294967295: 'AMDSMI_FREQ_IND_INVALID', @@ -1123,12 +1112,10 @@ c__EA_amdsmi_freq_ind_t__enumvalues = { AMDSMI_FREQ_IND_MIN = 0 AMDSMI_FREQ_IND_MAX = 1 AMDSMI_FREQ_IND_INVALID = 4294967295 -c__EA_amdsmi_freq_ind_t = ctypes.c_uint32 # enum -amdsmi_freq_ind_t = c__EA_amdsmi_freq_ind_t -amdsmi_freq_ind_t__enumvalues = c__EA_amdsmi_freq_ind_t__enumvalues +amdsmi_freq_ind_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_amdsmi_xgmi_status_t' -c__EA_amdsmi_xgmi_status_t__enumvalues = { +# values for enumeration 'amdsmi_xgmi_status_t' +amdsmi_xgmi_status_t__enumvalues = { 0: 'AMDSMI_XGMI_STATUS_NO_ERRORS', 1: 'AMDSMI_XGMI_STATUS_ERROR', 2: 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', @@ -1136,13 +1123,11 @@ c__EA_amdsmi_xgmi_status_t__enumvalues = { AMDSMI_XGMI_STATUS_NO_ERRORS = 0 AMDSMI_XGMI_STATUS_ERROR = 1 AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS = 2 -c__EA_amdsmi_xgmi_status_t = ctypes.c_uint32 # enum -amdsmi_xgmi_status_t = c__EA_amdsmi_xgmi_status_t -amdsmi_xgmi_status_t__enumvalues = c__EA_amdsmi_xgmi_status_t__enumvalues +amdsmi_xgmi_status_t = ctypes.c_uint32 # enum amdsmi_bit_field_t = ctypes.c_uint64 -# values for enumeration 'c__EA_amdsmi_memory_page_status_t' -c__EA_amdsmi_memory_page_status_t__enumvalues = { +# values for enumeration 'amdsmi_memory_page_status_t' +amdsmi_memory_page_status_t__enumvalues = { 0: 'AMDSMI_MEM_PAGE_STATUS_RESERVED', 1: 'AMDSMI_MEM_PAGE_STATUS_PENDING', 2: 'AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE', @@ -1150,12 +1135,10 @@ c__EA_amdsmi_memory_page_status_t__enumvalues = { AMDSMI_MEM_PAGE_STATUS_RESERVED = 0 AMDSMI_MEM_PAGE_STATUS_PENDING = 1 AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE = 2 -c__EA_amdsmi_memory_page_status_t = ctypes.c_uint32 # enum -amdsmi_memory_page_status_t = c__EA_amdsmi_memory_page_status_t -amdsmi_memory_page_status_t__enumvalues = c__EA_amdsmi_memory_page_status_t__enumvalues +amdsmi_memory_page_status_t = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_AMDSMI_IO_LINK_TYPE' -c__EA_AMDSMI_IO_LINK_TYPE__enumvalues = { +# values for enumeration 'AMDSMI_IO_LINK_TYPE' +AMDSMI_IO_LINK_TYPE__enumvalues = { 0: 'AMDSMI_IOLINK_TYPE_UNDEFINED', 1: 'AMDSMI_IOLINK_TYPE_PCIEXPRESS', 2: 'AMDSMI_IOLINK_TYPE_XGMI', @@ -1167,12 +1150,10 @@ AMDSMI_IOLINK_TYPE_PCIEXPRESS = 1 AMDSMI_IOLINK_TYPE_XGMI = 2 AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES = 3 AMDSMI_IOLINK_TYPE_SIZE = 4294967295 -c__EA_AMDSMI_IO_LINK_TYPE = ctypes.c_uint32 # enum -AMDSMI_IO_LINK_TYPE = c__EA_AMDSMI_IO_LINK_TYPE -AMDSMI_IO_LINK_TYPE__enumvalues = c__EA_AMDSMI_IO_LINK_TYPE__enumvalues +AMDSMI_IO_LINK_TYPE = ctypes.c_uint32 # enum -# values for enumeration 'c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE' -c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues = { +# values for enumeration 'AMDSMI_UTILIZATION_COUNTER_TYPE' +AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues = { 0: 'AMDSMI_UTILIZATION_COUNTER_FIRST', 0: 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', 1: 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', @@ -1182,109 +1163,106 @@ AMDSMI_UTILIZATION_COUNTER_FIRST = 0 AMDSMI_COARSE_GRAIN_GFX_ACTIVITY = 0 AMDSMI_COARSE_GRAIN_MEM_ACTIVITY = 1 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 struct_c__SA_amdsmi_utilization_counter_t(Structure): +AMDSMI_UTILIZATION_COUNTER_TYPE = ctypes.c_uint32 # enum +class struct_amdsmi_utilization_counter_t(Structure): pass -struct_c__SA_amdsmi_utilization_counter_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_utilization_counter_t._fields_ = [ +struct_amdsmi_utilization_counter_t._pack_ = 1 # source:False +struct_amdsmi_utilization_counter_t._fields_ = [ ('type', AMDSMI_UTILIZATION_COUNTER_TYPE), ('PADDING_0', ctypes.c_ubyte * 4), ('value', ctypes.c_uint64), ] -amdsmi_utilization_counter_t = struct_c__SA_amdsmi_utilization_counter_t -class struct_c__SA_amdsmi_retired_page_record_t(Structure): +amdsmi_utilization_counter_t = struct_amdsmi_utilization_counter_t +class struct_amdsmi_retired_page_record_t(Structure): pass -struct_c__SA_amdsmi_retired_page_record_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_retired_page_record_t._fields_ = [ +struct_amdsmi_retired_page_record_t._pack_ = 1 # source:False +struct_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 = struct_c__SA_amdsmi_retired_page_record_t -class struct_c__SA_amdsmi_power_profile_status_t(Structure): +amdsmi_retired_page_record_t = struct_amdsmi_retired_page_record_t +class struct_amdsmi_power_profile_status_t(Structure): pass -struct_c__SA_amdsmi_power_profile_status_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_power_profile_status_t._fields_ = [ +struct_amdsmi_power_profile_status_t._pack_ = 1 # source:False +struct_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 = struct_c__SA_amdsmi_power_profile_status_t -class struct_c__SA_amdsmi_frequencies_t(Structure): +amdsmi_power_profile_status_t = struct_amdsmi_power_profile_status_t +class struct_amdsmi_frequencies_t(Structure): pass -struct_c__SA_amdsmi_frequencies_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_frequencies_t._fields_ = [ +struct_amdsmi_frequencies_t._pack_ = 1 # source:False +struct_amdsmi_frequencies_t._fields_ = [ ('num_supported', ctypes.c_uint32), ('current', ctypes.c_uint32), ('frequency', ctypes.c_uint64 * 32), ] -amdsmi_frequencies_t = struct_c__SA_amdsmi_frequencies_t -class struct_c__SA_amdsmi_pcie_bandwidth_t(Structure): +amdsmi_frequencies_t = struct_amdsmi_frequencies_t +class struct_amdsmi_pcie_bandwidth_t(Structure): pass -struct_c__SA_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_pcie_bandwidth_t._fields_ = [ +struct_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False +struct_amdsmi_pcie_bandwidth_t._fields_ = [ ('transfer_rate', amdsmi_frequencies_t), ('lanes', ctypes.c_uint32 * 32), ] -amdsmi_pcie_bandwidth_t = struct_c__SA_amdsmi_pcie_bandwidth_t -class struct_c__SA_amdsmi_version_t(Structure): +amdsmi_pcie_bandwidth_t = struct_amdsmi_pcie_bandwidth_t +class struct_amdsmi_version_t(Structure): pass -struct_c__SA_amdsmi_version_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_version_t._fields_ = [ +struct_amdsmi_version_t._pack_ = 1 # source:False +struct_amdsmi_version_t._fields_ = [ ('year', ctypes.c_uint32), ('major', ctypes.c_uint32), ('minor', ctypes.c_uint32), ('release', ctypes.c_uint32), ('build', ctypes.POINTER(ctypes.c_char)), - ('reserved', ctypes.c_ubyte * 4), ] -amdsmi_version_t = struct_c__SA_amdsmi_version_t -class struct_c__SA_amdsmi_od_vddc_point_t(Structure): +amdsmi_version_t = struct_amdsmi_version_t +class struct_amdsmi_od_vddc_point_t(Structure): pass -struct_c__SA_amdsmi_od_vddc_point_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_od_vddc_point_t._fields_ = [ +struct_amdsmi_od_vddc_point_t._pack_ = 1 # source:False +struct_amdsmi_od_vddc_point_t._fields_ = [ ('frequency', ctypes.c_uint64), ('voltage', ctypes.c_uint64), ] -amdsmi_od_vddc_point_t = struct_c__SA_amdsmi_od_vddc_point_t -class struct_c__SA_amdsmi_freq_volt_region_t(Structure): +amdsmi_od_vddc_point_t = struct_amdsmi_od_vddc_point_t +class struct_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 = struct_c__SA_amdsmi_freq_volt_region_t -class struct_c__SA_amdsmi_od_volt_curve_t(Structure): +amdsmi_freq_volt_region_t = struct_amdsmi_freq_volt_region_t +class struct_amdsmi_od_volt_curve_t(Structure): _pack_ = 1 # source:False _fields_ = [ - ('vc_points', struct_c__SA_amdsmi_od_vddc_point_t * 3), + ('vc_points', struct_amdsmi_od_vddc_point_t * 3), ] -amdsmi_od_volt_curve_t = struct_c__SA_amdsmi_od_volt_curve_t -class struct_c__SA_amdsmi_od_volt_freq_data_t(Structure): +amdsmi_od_volt_curve_t = struct_amdsmi_od_volt_curve_t +class struct_amdsmi_od_volt_freq_data_t(Structure): pass -struct_c__SA_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ +struct_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False +struct_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), @@ -1294,23 +1272,23 @@ struct_c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_od_volt_freq_data_t = struct_c__SA_amdsmi_od_volt_freq_data_t -class struct_c__SA_amd_metrics_table_header_t(Structure): +amdsmi_od_volt_freq_data_t = struct_amdsmi_od_volt_freq_data_t +class struct_amd_metrics_table_header_t(Structure): pass -struct_c__SA_amd_metrics_table_header_t._pack_ = 1 # source:False -struct_c__SA_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), ] -amd_metrics_table_header_t = struct_c__SA_amd_metrics_table_header_t -class struct_c__SA_amdsmi_gpu_metrics_t(Structure): +amd_metrics_table_header_t = struct_amd_metrics_table_header_t +class struct_amdsmi_gpu_metrics_t(Structure): pass -struct_c__SA_amdsmi_gpu_metrics_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_gpu_metrics_t._fields_ = [ +struct_amdsmi_gpu_metrics_t._pack_ = 1 # source:False +struct_amdsmi_gpu_metrics_t._fields_ = [ ('common_header', amd_metrics_table_header_t), ('temperature_edge', ctypes.c_uint16), ('temperature_hotspot', ctypes.c_uint16), @@ -1348,23 +1326,23 @@ struct_c__SA_amdsmi_gpu_metrics_t._fields_ = [ ('temperature_hbm', ctypes.c_uint16 * 4), ] -amdsmi_gpu_metrics_t = struct_c__SA_amdsmi_gpu_metrics_t -class struct_c__SA_amdsmi_error_count_t(Structure): +amdsmi_gpu_metrics_t = struct_amdsmi_gpu_metrics_t +class struct_amdsmi_error_count_t(Structure): pass -struct_c__SA_amdsmi_error_count_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_error_count_t._fields_ = [ +struct_amdsmi_error_count_t._pack_ = 1 # source:False +struct_amdsmi_error_count_t._fields_ = [ ('correctable_count', ctypes.c_uint64), ('uncorrectable_count', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_error_count_t = struct_c__SA_amdsmi_error_count_t -class struct_c__SA_amdsmi_pcie_info_t(Structure): +amdsmi_error_count_t = struct_amdsmi_error_count_t +class struct_amdsmi_pcie_info_t(Structure): pass -struct_c__SA_amdsmi_pcie_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_pcie_info_t._fields_ = [ +struct_amdsmi_pcie_info_t._pack_ = 1 # source:False +struct_amdsmi_pcie_info_t._fields_ = [ ('pcie_lanes', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), ('pcie_speed', ctypes.c_uint32), @@ -1372,12 +1350,12 @@ struct_c__SA_amdsmi_pcie_info_t._fields_ = [ ('reserved', ctypes.c_uint32 * 5), ] -amdsmi_pcie_info_t = struct_c__SA_amdsmi_pcie_info_t -class struct_c__SA_amdsmi_process_info_t(Structure): +amdsmi_pcie_info_t = struct_amdsmi_pcie_info_t +class struct_amdsmi_process_info_t(Structure): pass -struct_c__SA_amdsmi_process_info_t._pack_ = 1 # source:False -struct_c__SA_amdsmi_process_info_t._fields_ = [ +struct_amdsmi_process_info_t._pack_ = 1 # source:False +struct_amdsmi_process_info_t._fields_ = [ ('process_id', ctypes.c_uint32), ('pasid', ctypes.c_uint32), ('vram_usage', ctypes.c_uint64), @@ -1386,7 +1364,7 @@ struct_c__SA_amdsmi_process_info_t._fields_ = [ ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_process_info_t = struct_c__SA_amdsmi_process_info_t +amdsmi_process_info_t = struct_amdsmi_process_info_t uint64_t = ctypes.c_uint64 amdsmi_init = _libraries['libamd_smi.so'].amdsmi_init amdsmi_init.restype = amdsmi_status_t @@ -1406,13 +1384,16 @@ amdsmi_get_processor_handles.restype = amdsmi_status_t amdsmi_get_processor_handles.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] amdsmi_get_processor_type = _libraries['libamd_smi.so'].amdsmi_get_processor_type amdsmi_get_processor_type.restype = amdsmi_status_t -amdsmi_get_processor_type.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_processor_type_t)] +amdsmi_get_processor_type.argtypes = [amdsmi_processor_handle, ctypes.POINTER(processor_type_t)] amdsmi_get_processor_handle_from_bdf = _libraries['libamd_smi.so'].amdsmi_get_processor_handle_from_bdf amdsmi_get_processor_handle_from_bdf.restype = amdsmi_status_t amdsmi_get_processor_handle_from_bdf.argtypes = [amdsmi_bdf_t, ctypes.POINTER(ctypes.POINTER(None))] amdsmi_get_gpu_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_id amdsmi_get_gpu_id.restype = amdsmi_status_t amdsmi_get_gpu_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] +amdsmi_get_gpu_revision = _libraries['libamd_smi.so'].amdsmi_get_gpu_revision +amdsmi_get_gpu_revision.restype = amdsmi_status_t +amdsmi_get_gpu_revision.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] amdsmi_get_gpu_vendor_name = _libraries['libamd_smi.so'].amdsmi_get_gpu_vendor_name amdsmi_get_gpu_vendor_name.restype = amdsmi_status_t amdsmi_get_gpu_vendor_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t] @@ -1428,7 +1409,7 @@ amdsmi_get_gpu_subsystem_name.restype = amdsmi_status_t amdsmi_get_gpu_subsystem_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t] amdsmi_get_gpu_pci_bandwidth = _libraries['libamd_smi.so'].amdsmi_get_gpu_pci_bandwidth amdsmi_get_gpu_pci_bandwidth.restype = amdsmi_status_t -amdsmi_get_gpu_pci_bandwidth.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_bandwidth_t)] +amdsmi_get_gpu_pci_bandwidth.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_bandwidth_t)] amdsmi_get_gpu_bdf_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_bdf_id amdsmi_get_gpu_bdf_id.restype = amdsmi_status_t amdsmi_get_gpu_bdf_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] @@ -1461,13 +1442,13 @@ amdsmi_get_gpu_memory_usage.restype = amdsmi_status_t amdsmi_get_gpu_memory_usage.argtypes = [amdsmi_processor_handle, amdsmi_memory_type_t, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_gpu_bad_page_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_bad_page_info amdsmi_get_gpu_bad_page_info.restype = amdsmi_status_t -amdsmi_get_gpu_bad_page_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] +amdsmi_get_gpu_bad_page_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_retired_page_record_t)] amdsmi_get_gpu_ras_block_features_enabled = _libraries['libamd_smi.so'].amdsmi_get_gpu_ras_block_features_enabled amdsmi_get_gpu_ras_block_features_enabled.restype = amdsmi_status_t -amdsmi_get_gpu_ras_block_features_enabled.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] +amdsmi_get_gpu_ras_block_features_enabled.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(amdsmi_ras_err_state_t)] amdsmi_get_gpu_memory_reserved_pages = _libraries['libamd_smi.so'].amdsmi_get_gpu_memory_reserved_pages amdsmi_get_gpu_memory_reserved_pages.restype = amdsmi_status_t -amdsmi_get_gpu_memory_reserved_pages.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] +amdsmi_get_gpu_memory_reserved_pages.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_retired_page_record_t)] amdsmi_get_gpu_fan_rpms = _libraries['libamd_smi.so'].amdsmi_get_gpu_fan_rpms amdsmi_get_gpu_fan_rpms.restype = amdsmi_status_t amdsmi_get_gpu_fan_rpms.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(ctypes.c_int64)] @@ -1491,16 +1472,16 @@ amdsmi_set_gpu_fan_speed.restype = amdsmi_status_t amdsmi_set_gpu_fan_speed.argtypes = [amdsmi_processor_handle, uint32_t, uint64_t] 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_processor_handle, struct_c__SA_amdsmi_utilization_counter_t * 0, uint32_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_utilization_count.argtypes = [amdsmi_processor_handle, struct_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_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_info_t)] +amdsmi_get_pcie_link_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_info_t)] 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_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_info_t)] +amdsmi_get_pcie_link_caps.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_info_t)] amdsmi_get_gpu_perf_level = _libraries['libamd_smi.so'].amdsmi_get_gpu_perf_level amdsmi_get_gpu_perf_level.restype = amdsmi_status_t -amdsmi_get_gpu_perf_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_amdsmi_dev_perf_level_t)] +amdsmi_get_gpu_perf_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(amdsmi_dev_perf_level_t)] amdsmi_set_gpu_perf_determinism_mode = _libraries['libamd_smi.so'].amdsmi_set_gpu_perf_determinism_mode amdsmi_set_gpu_perf_determinism_mode.restype = amdsmi_status_t amdsmi_set_gpu_perf_determinism_mode.argtypes = [amdsmi_processor_handle, uint64_t] @@ -1509,16 +1490,16 @@ amdsmi_get_gpu_overdrive_level.restype = amdsmi_status_t amdsmi_get_gpu_overdrive_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_clk_freq = _libraries['libamd_smi.so'].amdsmi_get_clk_freq amdsmi_get_clk_freq.restype = amdsmi_status_t -amdsmi_get_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_c__SA_amdsmi_frequencies_t)] +amdsmi_get_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_frequencies_t)] amdsmi_reset_gpu = _libraries['libamd_smi.so'].amdsmi_reset_gpu amdsmi_reset_gpu.restype = amdsmi_status_t amdsmi_reset_gpu.argtypes = [amdsmi_processor_handle] amdsmi_get_gpu_od_volt_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_od_volt_info amdsmi_get_gpu_od_volt_info.restype = amdsmi_status_t -amdsmi_get_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_od_volt_freq_data_t)] +amdsmi_get_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_od_volt_freq_data_t)] amdsmi_get_gpu_metrics_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_info amdsmi_get_gpu_metrics_info.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_gpu_metrics_t)] +amdsmi_get_gpu_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_gpu_metrics_t)] amdsmi_set_gpu_clk_range = _libraries['libamd_smi.so'].amdsmi_set_gpu_clk_range amdsmi_set_gpu_clk_range.restype = amdsmi_status_t amdsmi_set_gpu_clk_range.argtypes = [amdsmi_processor_handle, uint64_t, uint64_t, amdsmi_clk_type_t] @@ -1530,10 +1511,10 @@ amdsmi_set_gpu_od_volt_info.restype = amdsmi_status_t amdsmi_set_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, uint32_t, uint64_t, uint64_t] amdsmi_get_gpu_od_volt_curve_regions = _libraries['libamd_smi.so'].amdsmi_get_gpu_od_volt_curve_regions amdsmi_get_gpu_od_volt_curve_regions.restype = amdsmi_status_t -amdsmi_get_gpu_od_volt_curve_regions.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_freq_volt_region_t)] +amdsmi_get_gpu_od_volt_curve_regions.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_freq_volt_region_t)] amdsmi_get_gpu_power_profile_presets = _libraries['libamd_smi.so'].amdsmi_get_gpu_power_profile_presets amdsmi_get_gpu_power_profile_presets.restype = amdsmi_status_t -amdsmi_get_gpu_power_profile_presets.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_power_profile_status_t)] +amdsmi_get_gpu_power_profile_presets.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_profile_status_t)] amdsmi_set_gpu_perf_level = _libraries['libamd_smi.so'].amdsmi_set_gpu_perf_level amdsmi_set_gpu_perf_level.restype = amdsmi_status_t amdsmi_set_gpu_perf_level.argtypes = [amdsmi_processor_handle, amdsmi_dev_perf_level_t] @@ -1545,16 +1526,16 @@ amdsmi_set_clk_freq.restype = amdsmi_status_t amdsmi_set_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, uint64_t] amdsmi_get_lib_version = _libraries['libamd_smi.so'].amdsmi_get_lib_version amdsmi_get_lib_version.restype = amdsmi_status_t -amdsmi_get_lib_version.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_version_t)] +amdsmi_get_lib_version.argtypes = [ctypes.POINTER(struct_amdsmi_version_t)] amdsmi_get_gpu_ecc_count = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_count amdsmi_get_gpu_ecc_count.restype = amdsmi_status_t -amdsmi_get_gpu_ecc_count.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] +amdsmi_get_gpu_ecc_count.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(struct_amdsmi_error_count_t)] amdsmi_get_gpu_ecc_enabled = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_enabled amdsmi_get_gpu_ecc_enabled.restype = amdsmi_status_t amdsmi_get_gpu_ecc_enabled.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_gpu_ecc_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_status amdsmi_get_gpu_ecc_status.restype = amdsmi_status_t -amdsmi_get_gpu_ecc_status.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] +amdsmi_get_gpu_ecc_status.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(amdsmi_ras_err_state_t)] amdsmi_status_code_to_string = _libraries['libamd_smi.so'].amdsmi_status_code_to_string amdsmi_status_code_to_string.restype = amdsmi_status_t amdsmi_status_code_to_string.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] @@ -1572,22 +1553,22 @@ amdsmi_gpu_control_counter.restype = amdsmi_status_t amdsmi_gpu_control_counter.argtypes = [amdsmi_event_handle_t, amdsmi_counter_command_t, ctypes.POINTER(None)] amdsmi_gpu_read_counter = _libraries['libamd_smi.so'].amdsmi_gpu_read_counter amdsmi_gpu_read_counter.restype = amdsmi_status_t -amdsmi_gpu_read_counter.argtypes = [amdsmi_event_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_counter_value_t)] +amdsmi_gpu_read_counter.argtypes = [amdsmi_event_handle_t, ctypes.POINTER(struct_amdsmi_counter_value_t)] amdsmi_get_gpu_available_counters = _libraries['libamd_smi.so'].amdsmi_get_gpu_available_counters amdsmi_get_gpu_available_counters.restype = amdsmi_status_t amdsmi_get_gpu_available_counters.argtypes = [amdsmi_processor_handle, amdsmi_event_group_t, ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_compute_process_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_info amdsmi_get_gpu_compute_process_info.restype = amdsmi_status_t -amdsmi_get_gpu_compute_process_info.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_process_info_t), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_gpu_compute_process_info.argtypes = [ctypes.POINTER(struct_amdsmi_process_info_t), ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_compute_process_info_by_pid = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_info_by_pid amdsmi_get_gpu_compute_process_info_by_pid.restype = amdsmi_status_t -amdsmi_get_gpu_compute_process_info_by_pid.argtypes = [uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_process_info_t)] +amdsmi_get_gpu_compute_process_info_by_pid.argtypes = [uint32_t, ctypes.POINTER(struct_amdsmi_process_info_t)] amdsmi_get_gpu_compute_process_gpus = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_gpus amdsmi_get_gpu_compute_process_gpus.restype = amdsmi_status_t amdsmi_get_gpu_compute_process_gpus.argtypes = [uint32_t, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] amdsmi_gpu_xgmi_error_status = _libraries['libamd_smi.so'].amdsmi_gpu_xgmi_error_status amdsmi_gpu_xgmi_error_status.restype = amdsmi_status_t -amdsmi_gpu_xgmi_error_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_amdsmi_xgmi_status_t)] +amdsmi_gpu_xgmi_error_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(amdsmi_xgmi_status_t)] amdsmi_reset_gpu_xgmi_error = _libraries['libamd_smi.so'].amdsmi_reset_gpu_xgmi_error amdsmi_reset_gpu_xgmi_error.restype = amdsmi_status_t amdsmi_reset_gpu_xgmi_error.argtypes = [amdsmi_processor_handle] @@ -1602,7 +1583,7 @@ amdsmi_get_minmax_bandwith_between_processors.restype = amdsmi_status_t amdsmi_get_minmax_bandwith_between_processors.argtypes = [amdsmi_processor_handle, amdsmi_processor_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_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(c__EA_AMDSMI_IO_LINK_TYPE)] +amdsmi_topo_get_link_type.argtypes = [amdsmi_processor_handle, amdsmi_processor_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_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_bool)] @@ -1614,61 +1595,61 @@ amdsmi_set_gpu_event_notification_mask.restype = amdsmi_status_t amdsmi_set_gpu_event_notification_mask.argtypes = [amdsmi_processor_handle, uint64_t] amdsmi_get_gpu_event_notification = _libraries['libamd_smi.so'].amdsmi_get_gpu_event_notification amdsmi_get_gpu_event_notification.restype = amdsmi_status_t -amdsmi_get_gpu_event_notification.argtypes = [ctypes.c_int32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_evt_notification_data_t)] +amdsmi_get_gpu_event_notification.argtypes = [ctypes.c_int32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_evt_notification_data_t)] amdsmi_stop_gpu_event_notification = _libraries['libamd_smi.so'].amdsmi_stop_gpu_event_notification amdsmi_stop_gpu_event_notification.restype = amdsmi_status_t amdsmi_stop_gpu_event_notification.argtypes = [amdsmi_processor_handle] amdsmi_get_gpu_device_bdf = _libraries['libamd_smi.so'].amdsmi_get_gpu_device_bdf amdsmi_get_gpu_device_bdf.restype = amdsmi_status_t -amdsmi_get_gpu_device_bdf.argtypes = [amdsmi_processor_handle, ctypes.POINTER(union_c__UA_amdsmi_bdf_t)] +amdsmi_get_gpu_device_bdf.argtypes = [amdsmi_processor_handle, ctypes.POINTER(union_amdsmi_bdf_t)] amdsmi_get_gpu_device_uuid = _libraries['libamd_smi.so'].amdsmi_get_gpu_device_uuid amdsmi_get_gpu_device_uuid.restype = amdsmi_status_t amdsmi_get_gpu_device_uuid.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_char)] amdsmi_get_gpu_driver_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_driver_info amdsmi_get_gpu_driver_info.restype = amdsmi_status_t -amdsmi_get_gpu_driver_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_driver_info_t)] +amdsmi_get_gpu_driver_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_driver_info_t)] amdsmi_get_gpu_asic_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_asic_info amdsmi_get_gpu_asic_info.restype = amdsmi_status_t -amdsmi_get_gpu_asic_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_asic_info_t)] +amdsmi_get_gpu_asic_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_asic_info_t)] amdsmi_get_gpu_board_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_board_info amdsmi_get_gpu_board_info.restype = amdsmi_status_t -amdsmi_get_gpu_board_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_board_info_t)] +amdsmi_get_gpu_board_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_board_info_t)] 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_processor_handle, uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_power_cap_info_t)] +amdsmi_get_power_cap_info.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_cap_info_t)] 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_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_xgmi_info_t)] +amdsmi_get_xgmi_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_xgmi_info_t)] 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_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_fw_info_t)] +amdsmi_get_fw_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_fw_info_t)] amdsmi_get_gpu_vbios_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_vbios_info amdsmi_get_gpu_vbios_info.restype = amdsmi_status_t -amdsmi_get_gpu_vbios_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_vbios_info_t)] +amdsmi_get_gpu_vbios_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_vbios_info_t)] 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_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_engine_usage_t)] +amdsmi_get_gpu_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_engine_usage_t)] amdsmi_get_power_info = _libraries['libamd_smi.so'].amdsmi_get_power_info amdsmi_get_power_info.restype = amdsmi_status_t -amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_power_info_t)] +amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_power_info_t)] amdsmi_get_clock_info = _libraries['libamd_smi.so'].amdsmi_get_clock_info amdsmi_get_clock_info.restype = amdsmi_status_t -amdsmi_get_clock_info.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_c__SA_amdsmi_clk_info_t)] +amdsmi_get_clock_info.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_clk_info_t)] amdsmi_get_gpu_vram_usage = _libraries['libamd_smi.so'].amdsmi_get_gpu_vram_usage amdsmi_get_gpu_vram_usage.restype = amdsmi_status_t -amdsmi_get_gpu_vram_usage.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_vram_info_t)] +amdsmi_get_gpu_vram_usage.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_vram_info_t)] amdsmi_get_gpu_process_list = _libraries['libamd_smi.so'].amdsmi_get_gpu_process_list amdsmi_get_gpu_process_list.restype = amdsmi_status_t amdsmi_get_gpu_process_list.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_process_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_process_info amdsmi_get_gpu_process_info.restype = amdsmi_status_t -amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_proc_info_t)] +amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle_t, ctypes.POINTER(struct_amdsmi_proc_info_t)] amdsmi_get_gpu_total_ecc_count = _libraries['libamd_smi.so'].amdsmi_get_gpu_total_ecc_count amdsmi_get_gpu_total_ecc_count.restype = amdsmi_status_t -amdsmi_get_gpu_total_ecc_count.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] +amdsmi_get_gpu_total_ecc_count.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_error_count_t)] __all__ = \ - ['AMDSMI_CNTR_CMD_START', 'AMDSMI_CNTR_CMD_STOP', - 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', + ['AMDSMI_ARG_PTR_NULL', 'AMDSMI_CNTR_CMD_START', + 'AMDSMI_CNTR_CMD_STOP', 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', 'AMDSMI_DEV_PERF_LEVEL_AUTO', 'AMDSMI_DEV_PERF_LEVEL_DETERMINISM', 'AMDSMI_DEV_PERF_LEVEL_FIRST', 'AMDSMI_DEV_PERF_LEVEL_HIGH', @@ -1694,30 +1675,33 @@ __all__ = \ 'AMDSMI_EVT_NOTIF_GPU_POST_RESET', 'AMDSMI_EVT_NOTIF_GPU_PRE_RESET', 'AMDSMI_EVT_NOTIF_LAST', 'AMDSMI_EVT_NOTIF_THERMAL_THROTTLE', 'AMDSMI_EVT_NOTIF_VMFAULT', - 'AMDSMI_FREQ_IND_INVALID', 'AMDSMI_FREQ_IND_MAX', - 'AMDSMI_FREQ_IND_MIN', 'AMDSMI_GPU_BLOCK_ATHUB', - 'AMDSMI_GPU_BLOCK_DF', 'AMDSMI_GPU_BLOCK_FIRST', - 'AMDSMI_GPU_BLOCK_FUSE', 'AMDSMI_GPU_BLOCK_GFX', - 'AMDSMI_GPU_BLOCK_HDP', 'AMDSMI_GPU_BLOCK_INVALID', - 'AMDSMI_GPU_BLOCK_LAST', 'AMDSMI_GPU_BLOCK_MMHUB', - 'AMDSMI_GPU_BLOCK_MP0', 'AMDSMI_GPU_BLOCK_MP1', - 'AMDSMI_GPU_BLOCK_PCIE_BIF', 'AMDSMI_GPU_BLOCK_RESERVED', - 'AMDSMI_GPU_BLOCK_SDMA', 'AMDSMI_GPU_BLOCK_SEM', - 'AMDSMI_GPU_BLOCK_SMN', 'AMDSMI_GPU_BLOCK_UMC', - 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_INIT_ALL_PROCESSORS', + 'AMDSMI_FILE_NOT_FOUND', 'AMDSMI_FREQ_IND_INVALID', + 'AMDSMI_FREQ_IND_MAX', 'AMDSMI_FREQ_IND_MIN', + 'AMDSMI_GPU_BLOCK_ATHUB', 'AMDSMI_GPU_BLOCK_DF', + 'AMDSMI_GPU_BLOCK_FIRST', 'AMDSMI_GPU_BLOCK_FUSE', + 'AMDSMI_GPU_BLOCK_GFX', 'AMDSMI_GPU_BLOCK_HDP', + 'AMDSMI_GPU_BLOCK_INVALID', 'AMDSMI_GPU_BLOCK_LAST', + 'AMDSMI_GPU_BLOCK_MMHUB', 'AMDSMI_GPU_BLOCK_MP0', + 'AMDSMI_GPU_BLOCK_MP1', 'AMDSMI_GPU_BLOCK_PCIE_BIF', + 'AMDSMI_GPU_BLOCK_RESERVED', 'AMDSMI_GPU_BLOCK_SDMA', + 'AMDSMI_GPU_BLOCK_SEM', 'AMDSMI_GPU_BLOCK_SMN', + 'AMDSMI_GPU_BLOCK_UMC', 'AMDSMI_GPU_BLOCK_XGMI_WAFL', + 'AMDSMI_HSMP_TIMEOUT', 'AMDSMI_INIT_ALL_PROCESSORS', 'AMDSMI_INIT_AMD_CPUS', 'AMDSMI_INIT_AMD_GPUS', 'AMDSMI_INIT_NON_AMD_CPUS', 'AMDSMI_INIT_NON_AMD_GPUS', 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', 'AMDSMI_IOLINK_TYPE_PCIEXPRESS', 'AMDSMI_IOLINK_TYPE_SIZE', 'AMDSMI_IOLINK_TYPE_UNDEFINED', 'AMDSMI_IOLINK_TYPE_XGMI', - 'AMDSMI_IO_LINK_TYPE', 'AMDSMI_IO_LINK_TYPE__enumvalues', - 'AMDSMI_MEM_PAGE_STATUS_PENDING', + 'AMDSMI_IO_LINK_TYPE', 'AMDSMI_MEM_PAGE_STATUS_PENDING', 'AMDSMI_MEM_PAGE_STATUS_RESERVED', 'AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE', 'AMDSMI_MEM_TYPE_FIRST', 'AMDSMI_MEM_TYPE_GTT', 'AMDSMI_MEM_TYPE_LAST', 'AMDSMI_MEM_TYPE_VIS_VRAM', 'AMDSMI_MEM_TYPE_VRAM', 'AMDSMI_MM_UVD', 'AMDSMI_MM_VCE', 'AMDSMI_MM_VCN', - 'AMDSMI_MM__MAX', 'AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK', + 'AMDSMI_MM__MAX', 'AMDSMI_NO_DRV', 'AMDSMI_NO_ENERGY_DRV', + 'AMDSMI_NO_HSMP_DRV', 'AMDSMI_NO_HSMP_MSG_SUP', + 'AMDSMI_NO_HSMP_SUP', 'AMDSMI_NO_MSR_DRV', + 'AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK', 'AMDSMI_PWR_PROF_PRST_BOOTUP_DEFAULT', 'AMDSMI_PWR_PROF_PRST_COMPUTE_MASK', 'AMDSMI_PWR_PROF_PRST_CUSTOM_MASK', @@ -1736,8 +1720,9 @@ __all__ = \ '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_MAP_ERROR', 'AMDSMI_STATUS_NON_AMD_CPU', + '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', @@ -1753,32 +1738,31 @@ __all__ = \ 'AMDSMI_TEMP_MIN', 'AMDSMI_TEMP_MIN_HYST', 'AMDSMI_TEMP_OFFSET', 'AMDSMI_UTILIZATION_COUNTER_FIRST', 'AMDSMI_UTILIZATION_COUNTER_LAST', - 'AMDSMI_UTILIZATION_COUNTER_TYPE', - 'AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues', - 'AMDSMI_VOLT_AVERAGE', 'AMDSMI_VOLT_CURRENT', 'AMDSMI_VOLT_FIRST', - 'AMDSMI_VOLT_HIGHEST', 'AMDSMI_VOLT_LAST', 'AMDSMI_VOLT_LOWEST', - 'AMDSMI_VOLT_MAX', 'AMDSMI_VOLT_MAX_CRIT', 'AMDSMI_VOLT_MIN', - 'AMDSMI_VOLT_MIN_CRIT', 'AMDSMI_VOLT_TYPE_FIRST', - 'AMDSMI_VOLT_TYPE_INVALID', 'AMDSMI_VOLT_TYPE_LAST', - 'AMDSMI_VOLT_TYPE_VDDGFX', 'AMDSMI_XGMI_STATUS_ERROR', - 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', - 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'AMD_CPU', 'AMD_GPU', - 'CLK_TYPE_DCEF', 'CLK_TYPE_DCLK0', 'CLK_TYPE_DCLK1', - 'CLK_TYPE_DF', 'CLK_TYPE_FIRST', 'CLK_TYPE_GFX', 'CLK_TYPE_MEM', - 'CLK_TYPE_PCIE', 'CLK_TYPE_SOC', 'CLK_TYPE_SYS', 'CLK_TYPE_VCLK0', - 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', 'CONTAINER_DOCKER', - 'CONTAINER_LXC', 'FW_ID_ASD', 'FW_ID_CP_CE', 'FW_ID_CP_ME', - 'FW_ID_CP_MEC1', 'FW_ID_CP_MEC2', 'FW_ID_CP_MEC_JT1', - 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_MES', 'FW_ID_CP_PFP', - 'FW_ID_CP_PM4', 'FW_ID_DFC', 'FW_ID_DMCU', 'FW_ID_DMCU_ERAM', - 'FW_ID_DMCU_ISR', 'FW_ID_DRV_CAP', 'FW_ID_FIRST', - 'FW_ID_IMU_DRAM', 'FW_ID_IMU_IRAM', 'FW_ID_ISP', 'FW_ID_MC', - 'FW_ID_MES_STACK', 'FW_ID_MES_THREAD1', 'FW_ID_MES_THREAD1_STACK', - 'FW_ID_MMSCH', 'FW_ID_PPTABLE', 'FW_ID_PSP_BL', 'FW_ID_PSP_DBG', - 'FW_ID_PSP_INTF', 'FW_ID_PSP_KEYDB', 'FW_ID_PSP_SOC', - 'FW_ID_PSP_SOSDRV', 'FW_ID_PSP_SPL', 'FW_ID_PSP_SYSDRV', - 'FW_ID_PSP_TOC', 'FW_ID_REG_ACCESS_WHITELIST', 'FW_ID_RLC', - 'FW_ID_RLCV_LX7', 'FW_ID_RLC_P', 'FW_ID_RLC_RESTORE_LIST_CNTL', + 'AMDSMI_UTILIZATION_COUNTER_TYPE', 'AMDSMI_VOLT_AVERAGE', + 'AMDSMI_VOLT_CURRENT', 'AMDSMI_VOLT_FIRST', 'AMDSMI_VOLT_HIGHEST', + 'AMDSMI_VOLT_LAST', 'AMDSMI_VOLT_LOWEST', 'AMDSMI_VOLT_MAX', + 'AMDSMI_VOLT_MAX_CRIT', 'AMDSMI_VOLT_MIN', 'AMDSMI_VOLT_MIN_CRIT', + 'AMDSMI_VOLT_TYPE_FIRST', 'AMDSMI_VOLT_TYPE_INVALID', + 'AMDSMI_VOLT_TYPE_LAST', 'AMDSMI_VOLT_TYPE_VDDGFX', + 'AMDSMI_XGMI_STATUS_ERROR', 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', + 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'AMD_APU', 'AMD_CPU', + 'AMD_CPU_CORE', 'AMD_GPU', 'CLK_TYPE_DCEF', 'CLK_TYPE_DCLK0', + 'CLK_TYPE_DCLK1', 'CLK_TYPE_DF', 'CLK_TYPE_FIRST', 'CLK_TYPE_GFX', + 'CLK_TYPE_MEM', 'CLK_TYPE_PCIE', 'CLK_TYPE_SOC', 'CLK_TYPE_SYS', + 'CLK_TYPE_VCLK0', 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', + 'CONTAINER_DOCKER', 'CONTAINER_LXC', 'FW_ID_ASD', 'FW_ID_CP_CE', + 'FW_ID_CP_ME', 'FW_ID_CP_MEC1', 'FW_ID_CP_MEC2', + 'FW_ID_CP_MEC_JT1', 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_MES', + 'FW_ID_CP_PFP', 'FW_ID_CP_PM4', 'FW_ID_DFC', 'FW_ID_DMCU', + 'FW_ID_DMCU_ERAM', 'FW_ID_DMCU_ISR', 'FW_ID_DRV_CAP', + 'FW_ID_FIRST', 'FW_ID_IMU_DRAM', 'FW_ID_IMU_IRAM', 'FW_ID_ISP', + 'FW_ID_MC', 'FW_ID_MES_STACK', 'FW_ID_MES_THREAD1', + 'FW_ID_MES_THREAD1_STACK', 'FW_ID_MMSCH', 'FW_ID_PPTABLE', + 'FW_ID_PSP_BL', 'FW_ID_PSP_DBG', 'FW_ID_PSP_INTF', + 'FW_ID_PSP_KEYDB', 'FW_ID_PSP_SOC', 'FW_ID_PSP_SOSDRV', + 'FW_ID_PSP_SPL', 'FW_ID_PSP_SYSDRV', 'FW_ID_PSP_TOC', + 'FW_ID_REG_ACCESS_WHITELIST', 'FW_ID_RLC', 'FW_ID_RLCV_LX7', + 'FW_ID_RLC_P', 'FW_ID_RLC_RESTORE_LIST_CNTL', 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', 'FW_ID_RLC_SAVE_RESTORE_LIST', 'FW_ID_RLC_SRLG', 'FW_ID_RLC_SRLS', 'FW_ID_RLC_V', 'FW_ID_RLX6', @@ -1802,21 +1786,15 @@ __all__ = \ 'amd_metrics_table_header_t', 'amdsmi_asic_info_t', 'amdsmi_bdf_t', 'amdsmi_bit_field_t', 'amdsmi_board_info_t', 'amdsmi_clk_info_t', 'amdsmi_clk_type_t', - 'amdsmi_clk_type_t__enumvalues', 'amdsmi_container_types_t', - 'amdsmi_container_types_t__enumvalues', - 'amdsmi_counter_command_t', - 'amdsmi_counter_command_t__enumvalues', 'amdsmi_counter_value_t', - 'amdsmi_dev_perf_level_t', 'amdsmi_dev_perf_level_t__enumvalues', + 'amdsmi_container_types_t', 'amdsmi_counter_command_t', + 'amdsmi_counter_value_t', 'amdsmi_dev_perf_level_t', 'amdsmi_driver_info_t', 'amdsmi_engine_usage_t', 'amdsmi_error_count_t', 'amdsmi_event_group_t', - 'amdsmi_event_group_t__enumvalues', 'amdsmi_event_handle_t', - 'amdsmi_event_type_t', 'amdsmi_event_type_t__enumvalues', + 'amdsmi_event_handle_t', 'amdsmi_event_type_t', 'amdsmi_evt_notification_data_t', - 'amdsmi_evt_notification_type_t', - 'amdsmi_evt_notification_type_t__enumvalues', 'amdsmi_freq_ind_t', - 'amdsmi_freq_ind_t__enumvalues', 'amdsmi_freq_volt_region_t', - 'amdsmi_frequencies_t', 'amdsmi_frequency_range_t', - 'amdsmi_fw_block_t', 'amdsmi_fw_block_t__enumvalues', + 'amdsmi_evt_notification_type_t', 'amdsmi_freq_ind_t', + 'amdsmi_freq_volt_region_t', 'amdsmi_frequencies_t', + 'amdsmi_frequency_range_t', 'amdsmi_fw_block_t', 'amdsmi_fw_info_t', 'amdsmi_get_clk_freq', 'amdsmi_get_clock_info', 'amdsmi_get_energy_count', 'amdsmi_get_fw_info', 'amdsmi_get_gpu_activity', @@ -1842,7 +1820,8 @@ __all__ = \ 'amdsmi_get_gpu_power_profile_presets', 'amdsmi_get_gpu_process_info', 'amdsmi_get_gpu_process_list', 'amdsmi_get_gpu_ras_block_features_enabled', - 'amdsmi_get_gpu_subsystem_id', 'amdsmi_get_gpu_subsystem_name', + 'amdsmi_get_gpu_revision', 'amdsmi_get_gpu_subsystem_id', + 'amdsmi_get_gpu_subsystem_name', 'amdsmi_get_gpu_topo_numa_affinity', 'amdsmi_get_gpu_total_ecc_count', 'amdsmi_get_gpu_vbios_info', 'amdsmi_get_gpu_vendor_name', 'amdsmi_get_gpu_volt_metric', @@ -1856,29 +1835,25 @@ __all__ = \ 'amdsmi_get_socket_handles', 'amdsmi_get_socket_info', 'amdsmi_get_temp_metric', 'amdsmi_get_utilization_count', 'amdsmi_get_xgmi_info', 'amdsmi_gpu_block_t', - 'amdsmi_gpu_block_t__enumvalues', 'amdsmi_gpu_control_counter', + 'amdsmi_gpu_control_counter', 'amdsmi_gpu_counter_group_supported', 'amdsmi_gpu_create_counter', 'amdsmi_gpu_destroy_counter', 'amdsmi_gpu_metrics_t', 'amdsmi_gpu_read_counter', 'amdsmi_gpu_xgmi_error_status', 'amdsmi_init', 'amdsmi_init_flags_t', - 'amdsmi_init_flags_t__enumvalues', 'amdsmi_init_gpu_event_notification', '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_t', - 'amdsmi_mm_ip_t__enumvalues', 'amdsmi_od_vddc_point_t', + 'amdsmi_memory_page_status_t', 'amdsmi_memory_type_t', + 'amdsmi_mm_ip_t', 'amdsmi_od_vddc_point_t', 'amdsmi_od_volt_curve_t', 'amdsmi_od_volt_freq_data_t', 'amdsmi_pcie_bandwidth_t', 'amdsmi_pcie_info_t', 'amdsmi_power_cap_info_t', 'amdsmi_power_info_t', 'amdsmi_power_profile_preset_masks_t', - 'amdsmi_power_profile_preset_masks_t__enumvalues', 'amdsmi_power_profile_status_t', 'amdsmi_proc_info_t', 'amdsmi_process_handle_t', 'amdsmi_process_info_t', 'amdsmi_processor_handle', 'amdsmi_range_t', - 'amdsmi_ras_err_state_t', 'amdsmi_ras_err_state_t__enumvalues', - 'amdsmi_reset_gpu', 'amdsmi_reset_gpu_fan', - 'amdsmi_reset_gpu_xgmi_error', 'amdsmi_retired_page_record_t', - 'amdsmi_set_clk_freq', 'amdsmi_set_gpu_clk_range', + 'amdsmi_ras_err_state_t', 'amdsmi_reset_gpu', + 'amdsmi_reset_gpu_fan', 'amdsmi_reset_gpu_xgmi_error', + 'amdsmi_retired_page_record_t', 'amdsmi_set_clk_freq', + 'amdsmi_set_gpu_clk_range', 'amdsmi_set_gpu_event_notification_mask', 'amdsmi_set_gpu_fan_speed', 'amdsmi_set_gpu_od_clk_info', 'amdsmi_set_gpu_od_volt_info', 'amdsmi_set_gpu_overdrive_level', @@ -1887,67 +1862,33 @@ __all__ = \ 'amdsmi_set_gpu_perf_level', 'amdsmi_set_gpu_power_profile', 'amdsmi_set_power_cap', 'amdsmi_shut_down', 'amdsmi_socket_handle', 'amdsmi_status_code_to_string', - 'amdsmi_status_t', 'amdsmi_status_t__enumvalues', - 'amdsmi_stop_gpu_event_notification', - 'amdsmi_temperature_metric_t', - 'amdsmi_temperature_metric_t__enumvalues', - 'amdsmi_temperature_type_t', - 'amdsmi_temperature_type_t__enumvalues', + 'amdsmi_status_t', 'amdsmi_stop_gpu_event_notification', + 'amdsmi_temperature_metric_t', 'amdsmi_temperature_type_t', 'amdsmi_topo_get_link_type', 'amdsmi_topo_get_link_weight', 'amdsmi_topo_get_numa_node_number', 'amdsmi_utilization_counter_t', 'amdsmi_vbios_info_t', 'amdsmi_version_t', 'amdsmi_voltage_metric_t', - 'amdsmi_voltage_metric_t__enumvalues', 'amdsmi_voltage_type_t', - 'amdsmi_voltage_type_t__enumvalues', 'amdsmi_vram_info_t', - 'amdsmi_xgmi_info_t', 'amdsmi_xgmi_status_t', - 'amdsmi_xgmi_status_t__enumvalues', 'c__EA_AMDSMI_IO_LINK_TYPE', - 'c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE', - 'c__EA_amdsmi_clk_type_t', 'c__EA_amdsmi_container_types_t', - 'c__EA_amdsmi_counter_command_t', 'c__EA_amdsmi_dev_perf_level_t', - 'c__EA_amdsmi_event_group_t', 'c__EA_amdsmi_event_type_t', - 'c__EA_amdsmi_evt_notification_type_t', 'c__EA_amdsmi_freq_ind_t', - 'c__EA_amdsmi_fw_block_t', 'c__EA_amdsmi_gpu_block_t', - 'c__EA_amdsmi_init_flags_t', 'c__EA_amdsmi_memory_page_status_t', - 'c__EA_amdsmi_memory_type_t', 'c__EA_amdsmi_mm_ip_t', - 'c__EA_amdsmi_power_profile_preset_masks_t', - 'c__EA_amdsmi_ras_err_state_t', 'c__EA_amdsmi_status_t', - 'c__EA_amdsmi_temperature_metric_t', - 'c__EA_amdsmi_temperature_type_t', - 'c__EA_amdsmi_voltage_metric_t', 'c__EA_amdsmi_voltage_type_t', - 'c__EA_amdsmi_xgmi_status_t', 'c__EA_processor_type_t', - 'processor_type_t', 'processor_type_t__enumvalues', 'size_t', - 'struct_c__SA_amd_metrics_table_header_t', - 'struct_c__SA_amdsmi_asic_info_t', - 'struct_c__SA_amdsmi_board_info_t', - 'struct_c__SA_amdsmi_clk_info_t', - 'struct_c__SA_amdsmi_counter_value_t', - 'struct_c__SA_amdsmi_driver_info_t', - 'struct_c__SA_amdsmi_engine_usage_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_frequency_range_t', - 'struct_c__SA_amdsmi_fw_info_t', - 'struct_c__SA_amdsmi_fw_info_t_0', - '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_pcie_info_t', - 'struct_c__SA_amdsmi_power_cap_info_t', - 'struct_c__SA_amdsmi_power_info_t', - 'struct_c__SA_amdsmi_power_profile_status_t', - 'struct_c__SA_amdsmi_proc_info_t', - 'struct_c__SA_amdsmi_proc_info_t_0', - 'struct_c__SA_amdsmi_proc_info_t_1', - '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_vbios_info_t', - 'struct_c__SA_amdsmi_version_t', - 'struct_c__SA_amdsmi_vram_info_t', - 'struct_c__SA_amdsmi_xgmi_info_t', 'struct_c__UA_amdsmi_bdf_t_0', - 'uint32_t', 'uint64_t', 'union_c__UA_amdsmi_bdf_t'] + 'amdsmi_voltage_type_t', 'amdsmi_vram_info_t', + 'amdsmi_xgmi_info_t', 'amdsmi_xgmi_status_t', 'processor_type_t', + 'size_t', 'struct_amd_metrics_table_header_t', + 'struct_amdsmi_asic_info_t', 'struct_amdsmi_board_info_t', + 'struct_amdsmi_clk_info_t', 'struct_amdsmi_counter_value_t', + 'struct_amdsmi_driver_info_t', 'struct_amdsmi_engine_usage_t', + 'struct_amdsmi_error_count_t', + 'struct_amdsmi_evt_notification_data_t', + 'struct_amdsmi_freq_volt_region_t', 'struct_amdsmi_frequencies_t', + 'struct_amdsmi_frequency_range_t', 'struct_amdsmi_fw_info_t', + 'struct_amdsmi_gpu_metrics_t', 'struct_amdsmi_od_vddc_point_t', + 'struct_amdsmi_od_volt_curve_t', + 'struct_amdsmi_od_volt_freq_data_t', + 'struct_amdsmi_pcie_bandwidth_t', 'struct_amdsmi_pcie_info_t', + 'struct_amdsmi_power_cap_info_t', 'struct_amdsmi_power_info_t', + 'struct_amdsmi_power_profile_status_t', + 'struct_amdsmi_proc_info_t', 'struct_amdsmi_process_info_t', + 'struct_amdsmi_range_t', 'struct_amdsmi_retired_page_record_t', + 'struct_amdsmi_utilization_counter_t', + 'struct_amdsmi_vbios_info_t', 'struct_amdsmi_version_t', + 'struct_amdsmi_vram_info_t', 'struct_amdsmi_xgmi_info_t', + 'struct_engine_usage_', 'struct_fields_', 'struct_fw_info_list_', + 'struct_memory_usage_', 'uint32_t', 'uint64_t', + 'union_amdsmi_bdf_t'] diff --git a/rocm_smi/example/rocm_smi_example.cc b/rocm_smi/example/rocm_smi_example.cc index 0e78debb91..9d1aea0d90 100755 --- a/rocm_smi/example/rocm_smi_example.cc +++ b/rocm_smi/example/rocm_smi_example.cc @@ -722,6 +722,11 @@ int main() { CHK_RSMI_RET_I(ret) std::cout << "\t**Dev.Rev.ID: 0x" << std::hex << val_ui16 << std::endl; + char pcie_vendor_name[256]; + ret = rsmi_dev_pcie_vendor_name_get(i, pcie_vendor_name, 256); + CHK_RSMI_RET_I(ret) + std::cout << "\t**PCIe vendor name: " << pcie_vendor_name << std::endl; + char current_compute_partition[256]; current_compute_partition[0] = '\0'; ret = rsmi_dev_compute_partition_get(i, current_compute_partition, 256); diff --git a/rocm_smi/include/rocm_smi/rocm_smi.h b/rocm_smi/include/rocm_smi/rocm_smi.h index 29103219de..1d95ed00ac 100755 --- a/rocm_smi/include/rocm_smi/rocm_smi.h +++ b/rocm_smi/include/rocm_smi/rocm_smi.h @@ -1155,6 +1155,43 @@ rsmi_status_t rsmi_dev_sku_get(uint32_t dv_ind, uint16_t *sku); */ rsmi_status_t rsmi_dev_vendor_id_get(uint32_t dv_ind, uint16_t *id); +/** + * @brief Get the name string for a give PCIe vendor ID + * + * @details Given a device index @p dv_ind, a pointer to a caller provided + * char buffer @p name, and a length of this buffer @p len, this function will + * write the name of the PCIe vendor (up to @p len characters) buffer @p name. + * + * If the integer ID associated with the PCIe vendor is not found in one of the + * system files containing device name information (e.g. + * /usr/share/misc/pci.ids), then this function will return RSMI_STATUS_NOT_FOUND. + * Updating the system name files can be accompplished with + * "sudo update-pciids". + * + * @param[in] dv_ind a device index + * + * @param[inout] name a pointer to a caller provided char buffer to which the + * name will be written + * If this parameter is nullptr, this function will return + * ::RSMI_STATUS_INVALID_ARGS if the function is supported with the provided, + * arguments and ::RSMI_STATUS_NOT_SUPPORTED if it is not supported with the + * provided arguments. + * + * @param[in] len the length of the caller provided buffer @p name. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_NOT_FOUND the vnedor name are not found + * @retval ::RSMI_STATUS_INSUFFICIENT_SIZE is returned if @p len bytes is not + * large enough to hold the entire name. In this case, only @p len bytes will + * be written. + * + */ +rsmi_status_t rsmi_dev_pcie_vendor_name_get(uint32_t dv_ind, char *name, + size_t len); + /** * @brief Get the name string of a gpu device. * diff --git a/rocm_smi/include/rocm_smi/rocm_smi_device.h b/rocm_smi/include/rocm_smi/rocm_smi_device.h index a1b2809457..43c1728809 100755 --- a/rocm_smi/include/rocm_smi/rocm_smi_device.h +++ b/rocm_smi/include/rocm_smi/rocm_smi_device.h @@ -167,7 +167,12 @@ enum DevInfoTypes { kDevGpuReset, kDevAvailableComputePartition, kDevComputePartition, - kDevMemoryPartition + kDevMemoryPartition, + + // The information read from pci core sysfs + kDevPCieTypeStart = 1000, + kDevPCieVendorID = kDevPCieTypeStart, + kDevPCieTypeEND = 2000, }; typedef struct { diff --git a/rocm_smi/include/rocm_smi/rocm_smi_utils.h b/rocm_smi/include/rocm_smi/rocm_smi_utils.h index 697fcb3723..04e49b1d41 100755 --- a/rocm_smi/include/rocm_smi/rocm_smi_utils.h +++ b/rocm_smi/include/rocm_smi/rocm_smi_utils.h @@ -103,6 +103,7 @@ std::tuple kDevAttribNameMap = { {kDevDevID, kDevDevIDFName}, {kDevDevRevID, kDevDevRevIDFName}, {kDevVendorID, kDevVendorIDFName}, + {kDevPCieVendorID, kDevPCieVendorIDFName}, {kDevSubSysDevID, kDevSubSysDevIDFName}, {kDevSubSysVendorID, kDevSubSysVendorIDFName}, {kDevGPUMClk, kDevGPUMClkFName}, @@ -589,6 +593,20 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) { sysfs_path += "/device/"; sysfs_path += kDevAttribNameMap.at(type); + // For the file under PCI sysfs + if (type >= kDevPCieTypeStart && type <= kDevPCieTypeEND) { + sysfs_path = "/sys/bus/pci/devices/"; + std::string bdf_str; + if (getBDFWithDomain(bdfid_, bdf_str) != RSMI_STATUS_SUCCESS) { + ss << "Fail to craft the bdf string"; + LOG_ERROR(ss); + return 1; + } + sysfs_path += bdf_str; + sysfs_path += "/"; + sysfs_path += kDevAttribNameMap.at(type); + } + DBG_FILE_ERROR(sysfs_path, str); bool reg_file; @@ -611,7 +629,7 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) { fs->open(sysfs_path); - if (!fs->is_open()) { + if (!fs) { ss << "Could not open - SYSFS file (" << sysfs_path << ") for " << "DevInfoInfoType (" << RocmSMI::devInfoTypesStrings.at(type) << "), " << ", returning " << std::to_string(errno) << " (" @@ -901,6 +919,7 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) { case kDevSubSysDevID: case kDevSubSysVendorID: case kDevVendorID: + case kDevPCieVendorID: case kDevErrCntFeatures: ret = readDevInfoStr(type, &tempStr); RET_IF_NONZERO(ret); @@ -1038,6 +1057,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) { case kDevSubSysDevID: case kDevSubSysVendorID: case kDevVendorID: + case kDevPCieVendorID: case kDevVramVendor: case kDevVBiosVer: case kDevPCIEThruPut: diff --git a/rocm_smi/src/rocm_smi_main.cc b/rocm_smi/src/rocm_smi_main.cc index 8cb95fe7f2..49dec9332d 100755 --- a/rocm_smi/src/rocm_smi_main.cc +++ b/rocm_smi/src/rocm_smi_main.cc @@ -150,7 +150,8 @@ amd::smi::RocmSMI::devInfoTypesStrings = { {amd::smi::kDevAvailableComputePartition, amdSMI + "kDevAvailableComputePartition"}, {amd::smi::kDevComputePartition, amdSMI + "kDevComputePartition"}, - {amd::smi::kDevMemoryPartition, amdSMI + "kDevMemoryPartition"} + {amd::smi::kDevMemoryPartition, amdSMI + "kDevMemoryPartition"}, + {amd::smi::kDevPCieVendorID, amdSMI + "kDevPCieVendorID"}, }; namespace amd { diff --git a/rocm_smi/src/rocm_smi_utils.cc b/rocm_smi/src/rocm_smi_utils.cc index 7e90d29209..582ed39703 100755 --- a/rocm_smi/src/rocm_smi_utils.cc +++ b/rocm_smi/src/rocm_smi_utils.cc @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -792,6 +793,29 @@ bool isSystemBigEndian() { return isBigEndian; } +rsmi_status_t getBDFWithDomain(uint64_t bdf_id, std::string& bfd_str) +{ + auto result = rsmi_status_t::RSMI_STATUS_SUCCESS; + auto domain_id = static_cast(bdf_id >> 32); + auto bus_id = static_cast((bdf_id & 0x0000FF00) >> 8); + auto dev_id = static_cast((bdf_id & 0x000000F8) >> 3); + auto func_id = static_cast(bdf_id & 0x00000003); + + bfd_str = std::string(); + if (!(bus_id > 0)) { + result = rsmi_status_t::RSMI_STATUS_NO_DATA; + return result; + } + + std::stringstream bdf_sstream; + bdf_sstream << std::hex << std::setfill('0') << std::setw(4) << +domain_id << ":"; + bdf_sstream << std::hex << std::setfill('0') << std::setw(2) << +bus_id << ":"; + bdf_sstream << std::hex << std::setfill('0') << std::setw(2) << +dev_id << "."; + bdf_sstream << std::hex << std::setfill('0') << +func_id; + bfd_str = bdf_sstream.str(); + return result; +} + rsmi_status_t getBDFString(uint64_t bdf_id, std::string& bfd_str) { auto result = rsmi_status_t::RSMI_STATUS_SUCCESS; diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index 829301b16e..53dad8e003 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -671,11 +671,10 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i info->rev_id = dev_info.pci_rev; info->vendor_id = gpu_device->get_vendor_id(); } - // For other sysfs related information, get from rocm-smi else { uint64_t dv_uid = 0; status = rsmi_wrapper(rsmi_dev_unique_id_get, processor_handle, &dv_uid); - if (status == AMDSMI_STATUS_SUCCESS) snprintf(info->asic_serial, sizeof(info->asic_serial), "%d", dv_uid); + if (status == AMDSMI_STATUS_SUCCESS) snprintf(info->asic_serial, sizeof(info->asic_serial), "%lu", dv_uid); status = rsmi_wrapper(rsmi_dev_brand_get, processor_handle, info->market_name, AMDSMI_NORMAL_STRING_LENGTH); @@ -688,6 +687,9 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i &subvendor_id); if (status == AMDSMI_STATUS_SUCCESS) info->subvendor_id = subvendor_id; } + // For other sysfs related information, get from rocm-smi + status = rsmi_wrapper(rsmi_dev_pcie_vendor_name_get, processor_handle, + info->vendor_name, AMDSMI_MAX_STRING_LENGTH); return AMDSMI_STATUS_SUCCESS; } @@ -1847,10 +1849,10 @@ amdsmi_status_t amdsmi_get_processor_handle_from_bdf(amdsmi_bdf_t bdf, return status; } amdsmi_bdf_t found_bdf = gpu_device->get_bdf(); - if (bdf.bus_number == found_bdf.bus_number && - bdf.device_number == found_bdf.device_number && - bdf.domain_number == found_bdf.domain_number && - bdf.function_number == found_bdf.function_number) { + if ((bdf.fields.bus_number == found_bdf.fields.bus_number) && + (bdf.fields.device_number == found_bdf.fields.device_number) && + (bdf.fields.domain_number == found_bdf.fields.domain_number) && + (bdf.fields.function_number == found_bdf.fields.function_number)) { *processor_handle = devs[idx]; return AMDSMI_STATUS_SUCCESS; } @@ -1861,14 +1863,20 @@ amdsmi_status_t amdsmi_get_processor_handle_from_bdf(amdsmi_bdf_t bdf, } #ifdef ENABLE_ESMI_LIB -amdsmi_status_t amdsmi_get_hsmp_proto_ver(uint32_t *proto_ver) +amdsmi_status_t amdsmi_get_cpu_hsmp_proto_ver(amdsmi_cpusocket_handle socket_handle, + uint32_t *proto_ver) { amdsmi_status_t status; uint32_t hsmp_proto_ver; - if (proto_ver == nullptr) + if (socket_handle == nullptr) return AMDSMI_STATUS_INVAL; + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + status = static_cast(esmi_hsmp_proto_ver_get(&hsmp_proto_ver)); *proto_ver = hsmp_proto_ver; @@ -1878,14 +1886,20 @@ amdsmi_status_t amdsmi_get_hsmp_proto_ver(uint32_t *proto_ver) return AMDSMI_STATUS_SUCCESS; } -amdsmi_status_t amdsmi_get_smu_fw_version(amdsmi_smu_fw_version_t *amdsmi_smu_fw) +amdsmi_status_t amdsmi_get_cpu_smu_fw_version(amdsmi_cpusocket_handle socket_handle, + amdsmi_smu_fw_version_t *amdsmi_smu_fw) { amdsmi_status_t status; struct smu_fw_version smu_fw; - if (amdsmi_smu_fw == nullptr) + if (socket_handle == nullptr) return AMDSMI_STATUS_INVAL; + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + status = static_cast(esmi_smu_fw_version_get(&smu_fw)); amdsmi_smu_fw->major = smu_fw.major; @@ -2179,6 +2193,483 @@ amdsmi_status_t amdsmi_get_cpu_pwr_svi_telemetry_all_rails(amdsmi_cpusocket_hand return AMDSMI_STATUS_SUCCESS; } +amdsmi_status_t amdsmi_set_cpu_socket_power_cap(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t pcap) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_power_cap_set(sock_ind, pcap)); + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_pwr_efficiency_mode(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t mode) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_pwr_efficiency_mode_set(sock_ind, mode)); + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_core_boostlimit(amdsmi_processor_handle processor_handle, + uint32_t core_ind, uint32_t *pboostlimit) +{ + amdsmi_status_t status; + uint32_t boostlimit; + + if (processor_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuCore* core = nullptr; + amdsmi_status_t r = get_cpu_core_from_handle(processor_handle, &core); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_core_boostlimit_get(core_ind, &boostlimit)); + *pboostlimit = boostlimit; + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_socket_c0_residency(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t *pc0_residency) +{ + amdsmi_status_t status; + uint32_t res; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_c0_residency_get(sock_ind, &res)); + *pc0_residency = res; + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_core_boostlimit(amdsmi_processor_handle processor_handle, + uint32_t core_ind, uint32_t boostlimit) +{ + amdsmi_status_t status; + + if (processor_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuCore* core = nullptr; + amdsmi_status_t r = get_cpu_core_from_handle(processor_handle, &core); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_core_boostlimit_set(core_ind, boostlimit)); + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_socket_boostlimit(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t boostlimit) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_boostlimit_set(sock_ind, boostlimit)); + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_ddr_bw(amdsmi_cpusocket_handle socket_handle, + amdsmi_ddr_bw_metrics_t *ddr_bw) +{ + amdsmi_status_t status; + struct ddr_bw_metrics ddr; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_ddr_bw_get(&ddr)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + ddr_bw->max_bw = ddr.max_bw; + ddr_bw->utilized_bw = ddr.utilized_bw; + ddr_bw->utilized_pct = ddr.utilized_pct; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_socket_temperature(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t *ptmon) +{ + amdsmi_status_t status; + uint32_t tmon; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_temperature_get(sock_ind, &tmon)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + *ptmon = tmon; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_dimm_temp_range_and_refresh_rate( + amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t dimm_addr, amdsmi_temp_range_refresh_rate_t *rate) +{ + amdsmi_status_t status; + struct temp_range_refresh_rate dimm_rate; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_dimm_temp_range_and_refresh_rate_get( + sock_ind, dimm_addr, &dimm_rate)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + rate->range = dimm_rate.range; + rate->ref_rate = dimm_rate.ref_rate; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_dimm_power_consumption(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t dimm_addr, amdsmi_dimm_power_t *dimm_pow) +{ + amdsmi_status_t status; + struct dimm_power d_power; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_dimm_power_consumption_get(sock_ind, + dimm_addr, &d_power)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + dimm_pow->power = d_power.power; + dimm_pow->update_rate = d_power.update_rate; + dimm_pow->dimm_addr = d_power.dimm_addr; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_dimm_thermal_sensor(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t dimm_addr, amdsmi_dimm_thermal_t *dimm_temp) +{ + amdsmi_status_t status; + struct dimm_thermal d_sensor; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_dimm_thermal_sensor_get(sock_ind, + dimm_addr, &d_sensor)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + dimm_temp->temp = d_sensor.temp; + dimm_temp->update_rate = d_sensor.update_rate; + dimm_temp->dimm_addr = d_sensor.dimm_addr; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_xgmi_width(amdsmi_cpusocket_handle socket_handle, + uint8_t min, uint8_t max) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_xgmi_width_set(min, max)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_gmi3_link_width_range(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t min_link_width, uint8_t max_link_width) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_gmi3_link_width_range_set(sock_ind, + min_link_width, max_link_width)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_cpu_apb_enable(amdsmi_cpusocket_handle socket_handle, uint32_t sock_ind) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_apb_enable(sock_ind)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_cpu_apb_disable(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint8_t pstate) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_apb_disable(sock_ind, pstate)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_socket_lclk_dpm_level(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint8_t nbio_id, uint8_t min, uint8_t max) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_lclk_dpm_level_set(sock_ind, + nbio_id, min, max)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_socket_lclk_dpm_level(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t nbio_id, amdsmi_dpm_level_t *nbio) +{ + amdsmi_status_t status; + struct dpm_level nb; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_socket_lclk_dpm_level_get(sock_ind, + nbio_id, &nb)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + nbio->min_dpm_level = nb.min_dpm_level; + nbio->max_dpm_level = nb.max_dpm_level; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_pcie_link_rate(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t rate_ctrl, uint8_t *prev_mode) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_pcie_link_rate_set(sock_ind, + rate_ctrl, prev_mode)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_set_cpu_df_pstate_range(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, uint8_t max_pstate, uint8_t min_pstate) +{ + amdsmi_status_t status; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_df_pstate_range_set(sock_ind, + max_pstate, min_pstate)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_current_io_bandwidth(amdsmi_cpusocket_handle socket_handle, + uint8_t sock_ind, amdsmi_link_id_bw_type_t link, uint32_t *io_bw) +{ + amdsmi_status_t status; + uint32_t bw; + struct link_id_bw_type io_link; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_current_io_bandwidth_get(sock_ind, + io_link, &bw)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + link.link_name = io_link.link_name; + link.bw_type= io_link.bw_type; + *io_bw = bw; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_current_xgmi_bw(amdsmi_cpusocket_handle socket_handle, + amdsmi_link_id_bw_type_t link, uint32_t *xgmi_bw) +{ + amdsmi_status_t status; + uint32_t bw; + struct link_id_bw_type io_link; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_current_xgmi_bw_get(io_link, &bw)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + link.link_name = io_link.link_name; + link.bw_type= io_link.bw_type; + *xgmi_bw = bw; + + return AMDSMI_STATUS_SUCCESS; +} + amdsmi_status_t amdsmi_get_number_of_cpu_sockets(uint32_t sockets) { amdsmi_status_t status = amd::smi::AMDSmiSystem::getInstance().get_cpu_sockets(sockets); @@ -2223,4 +2714,38 @@ amdsmi_status_t amdsmi_get_cpu_model(uint32_t model) return AMDSMI_STATUS_SUCCESS; } + +amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t *pcore_ind) +{ + amdsmi_status_t status; + uint32_t online_core; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_first_online_core_on_socket(sock_ind, &online_core)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + *pcore_ind = online_core; + + return AMDSMI_STATUS_SUCCESS; +} + +const char* amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string) +{ + for (auto& iter : amd::smi::esmi_status_map) { + if (iter.first == status) { + *status_string = esmi_get_err_msg(static_cast(iter.first)); + break; + } + } + return *status_string; +} #endif diff --git a/src/amd_smi/amd_smi_drm.cc b/src/amd_smi/amd_smi_drm.cc index 9f24920377..49677e77e8 100644 --- a/src/amd_smi/amd_smi_drm.cc +++ b/src/amd_smi/amd_smi_drm.cc @@ -171,10 +171,10 @@ amdsmi_status_t AMDSmiDrm::init() { continue; } - bdf.function_number = device->businfo.pci->func; - bdf.device_number = device->businfo.pci->dev; - bdf.bus_number = device->businfo.pci->bus; - bdf.domain_number = device->businfo.pci->domain; + bdf.fields.function_number = device->businfo.pci->func; + bdf.fields.device_number = device->businfo.pci->dev; + bdf.fields.bus_number = device->businfo.pci->bus; + bdf.fields.domain_number = device->businfo.pci->domain; vendor_id = device->deviceinfo.pci->vendor_id; diff --git a/src/amd_smi/fdinfo.cc b/src/amd_smi/fdinfo.cc index 7bb794e00a..857b09c71f 100644 --- a/src/amd_smi/fdinfo.cc +++ b/src/amd_smi/fdinfo.cc @@ -73,10 +73,11 @@ amdsmi_status_t gpuvsmi_get_pids(const amdsmi_bdf_t &bdf, std::vector struct dirent *dir; /* 0000:00:00.0 */ - snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", bdf.domain_number & 0xffff, - bdf.bus_number & 0xff, - bdf.device_number & 0x1f, - bdf.function_number & 0x7); + snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", + bdf.fields.domain_number & 0xffff, + bdf.fields.bus_number & 0xff, + bdf.fields.device_number & 0x1f, + bdf.fields.function_number & 0x7); d = opendir("/proc"); if (!d) @@ -121,10 +122,11 @@ amdsmi_status_t gpuvsmi_get_pid_info(const amdsmi_bdf_t &bdf, long int pid, struct dirent *dir; /* 0000:00:00.0 */ - snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", bdf.domain_number & 0xffff, - bdf.bus_number & 0xff, - bdf.device_number & 0x1f, - bdf.function_number & 0x7); + snprintf(bdf_str, 13, "%04x:%02x:%02x.%d", + bdf.fields.domain_number & 0xffff, + bdf.fields.bus_number & 0xff, + bdf.fields.device_number & 0x1f, + bdf.fields.function_number & 0x7); std::string path = "/proc/" + std::to_string(pid) + "/fdinfo/"; diff --git a/tests/amd_smi_test/functional/sys_info_read.cc b/tests/amd_smi_test/functional/sys_info_read.cc index 6b513e0ec2..05c327a3b0 100755 --- a/tests/amd_smi_test/functional/sys_info_read.cc +++ b/tests/amd_smi_test/functional/sys_info_read.cc @@ -163,11 +163,8 @@ void TestSysInfoRead::Run(void) { } else { if (err == AMDSMI_STATUS_SUCCESS) { IF_VERB(STANDARD) { - // TODO(bliu): read unique_id - /* - std::cout << "\t**GPU Unique ID : " << std::hex << asci_info.unique_id << - std::endl; - */ + std:: cout << "\t**GPU PCIe Vendor : " + << asci_info.vendor_name << std::endl; } // Verify api support checking functionality is working err = amdsmi_get_gpu_asic_info(processor_handles_[i], nullptr);