1 #pragma once 2 3 #include <stdbool.h> 4 #include <stddef.h> 5 #include <stdint.h> 6 7 #include <cpuinfo.h> 8 #include <cpuinfo/common.h> 9 10 #define CPUINFO_LINUX_FLAG_PRESENT UINT32_C(0x00000001) 11 #define CPUINFO_LINUX_FLAG_POSSIBLE UINT32_C(0x00000002) 12 #define CPUINFO_LINUX_FLAG_MAX_FREQUENCY UINT32_C(0x00000004) 13 #define CPUINFO_LINUX_FLAG_MIN_FREQUENCY UINT32_C(0x00000008) 14 #define CPUINFO_LINUX_FLAG_SMT_ID UINT32_C(0x00000010) 15 #define CPUINFO_LINUX_FLAG_CORE_ID UINT32_C(0x00000020) 16 #define CPUINFO_LINUX_FLAG_PACKAGE_ID UINT32_C(0x00000040) 17 #define CPUINFO_LINUX_FLAG_APIC_ID UINT32_C(0x00000080) 18 #define CPUINFO_LINUX_FLAG_SMT_CLUSTER UINT32_C(0x00000100) 19 #define CPUINFO_LINUX_FLAG_CORE_CLUSTER UINT32_C(0x00000200) 20 #define CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER UINT32_C(0x00000400) 21 #define CPUINFO_LINUX_FLAG_PROC_CPUINFO UINT32_C(0x00000800) 22 #define CPUINFO_LINUX_FLAG_VALID UINT32_C(0x00001000) 23 #define CPUINFO_LINUX_FLAG_CUR_FREQUENCY UINT32_C(0x00002000) 24 #define CPUINFO_LINUX_FLAG_CLUSTER_CLUSTER UINT32_C(0x00004000) 25 26 typedef bool (*cpuinfo_cpulist_callback)(uint32_t, uint32_t, void*); 27 CPUINFO_INTERNAL bool cpuinfo_linux_parse_cpulist( 28 const char* filename, 29 cpuinfo_cpulist_callback callback, 30 void* context); 31 typedef bool (*cpuinfo_smallfile_callback)(const char*, const char*, const char*, void*); 32 CPUINFO_INTERNAL bool cpuinfo_linux_parse_small_file( 33 const char* filename, 34 size_t buffer_size, 35 cpuinfo_smallfile_callback, 36 void* context); 37 typedef bool (*cpuinfo_line_callback)(const char*, const char*, void*, uint64_t); 38 CPUINFO_INTERNAL bool cpuinfo_linux_parse_multiline_file( 39 const char* filename, 40 size_t buffer_size, 41 cpuinfo_line_callback, 42 void* context); 43 44 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_processors_count(void); 45 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_possible_processor(uint32_t max_processors_count); 46 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_present_processor(uint32_t max_processors_count); 47 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_processor_cur_frequency(uint32_t processor); 48 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_processor_min_frequency(uint32_t processor); 49 CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_processor_max_frequency(uint32_t processor); 50 CPUINFO_INTERNAL bool cpuinfo_linux_get_processor_package_id( 51 uint32_t processor, 52 uint32_t package_id[restrict static 1]); 53 CPUINFO_INTERNAL bool cpuinfo_linux_get_processor_core_id(uint32_t processor, uint32_t core_id[restrict static 1]); 54 55 CPUINFO_INTERNAL bool cpuinfo_linux_detect_possible_processors( 56 uint32_t max_processors_count, 57 uint32_t* processor0_flags, 58 uint32_t processor_struct_size, 59 uint32_t possible_flag); 60 CPUINFO_INTERNAL bool cpuinfo_linux_detect_present_processors( 61 uint32_t max_processors_count, 62 uint32_t* processor0_flags, 63 uint32_t processor_struct_size, 64 uint32_t present_flag); 65 66 typedef bool (*cpuinfo_siblings_callback)(uint32_t, uint32_t, uint32_t, void*); 67 CPUINFO_INTERNAL bool cpuinfo_linux_detect_core_siblings( 68 uint32_t max_processors_count, 69 uint32_t processor, 70 cpuinfo_siblings_callback callback, 71 void* context); 72 CPUINFO_INTERNAL bool cpuinfo_linux_detect_thread_siblings( 73 uint32_t max_processors_count, 74 uint32_t processor, 75 cpuinfo_siblings_callback callback, 76 void* context); 77 CPUINFO_INTERNAL bool cpuinfo_linux_detect_cluster_cpus( 78 uint32_t max_processors_count, 79 uint32_t processor, 80 cpuinfo_siblings_callback callback, 81 void* context); 82 CPUINFO_INTERNAL bool cpuinfo_linux_detect_core_cpus( 83 uint32_t max_processors_count, 84 uint32_t processor, 85 cpuinfo_siblings_callback callback, 86 void* context); 87 CPUINFO_INTERNAL bool cpuinfo_linux_detect_package_cpus( 88 uint32_t max_processors_count, 89 uint32_t processor, 90 cpuinfo_siblings_callback callback, 91 void* context); 92 93 extern CPUINFO_INTERNAL const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map; 94 extern CPUINFO_INTERNAL const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map; 95