• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 
3 #include <stdbool.h>
4 #include <stdint.h>
5 
6 #if defined(_WIN32) || defined(__CYGWIN__)
7 #include <windows.h>
8 #endif
9 
10 #include <cpuinfo.h>
11 #include <cpuinfo/common.h>
12 
13 enum cpuinfo_cache_level {
14 	cpuinfo_cache_level_1i = 0,
15 	cpuinfo_cache_level_1d = 1,
16 	cpuinfo_cache_level_2 = 2,
17 	cpuinfo_cache_level_3 = 3,
18 	cpuinfo_cache_level_4 = 4,
19 	cpuinfo_cache_level_max = 5,
20 };
21 
22 extern CPUINFO_INTERNAL bool cpuinfo_is_initialized;
23 
24 extern CPUINFO_INTERNAL struct cpuinfo_processor* cpuinfo_processors;
25 extern CPUINFO_INTERNAL struct cpuinfo_core* cpuinfo_cores;
26 extern CPUINFO_INTERNAL struct cpuinfo_cluster* cpuinfo_clusters;
27 extern CPUINFO_INTERNAL struct cpuinfo_package* cpuinfo_packages;
28 extern CPUINFO_INTERNAL struct cpuinfo_cache* cpuinfo_cache[cpuinfo_cache_level_max];
29 
30 extern CPUINFO_INTERNAL uint32_t cpuinfo_processors_count;
31 extern CPUINFO_INTERNAL uint32_t cpuinfo_cores_count;
32 extern CPUINFO_INTERNAL uint32_t cpuinfo_clusters_count;
33 extern CPUINFO_INTERNAL uint32_t cpuinfo_packages_count;
34 extern CPUINFO_INTERNAL uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max];
35 extern CPUINFO_INTERNAL uint32_t cpuinfo_max_cache_size;
36 
37 #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 || CPUINFO_ARCH_RISCV32 || CPUINFO_ARCH_RISCV64
38 extern CPUINFO_INTERNAL struct cpuinfo_uarch_info* cpuinfo_uarchs;
39 extern CPUINFO_INTERNAL uint32_t cpuinfo_uarchs_count;
40 #else
41 extern CPUINFO_INTERNAL struct cpuinfo_uarch_info cpuinfo_global_uarch;
42 #endif
43 
44 #ifdef __linux__
45 extern CPUINFO_INTERNAL uint32_t cpuinfo_linux_cpu_max;
46 extern CPUINFO_INTERNAL const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map;
47 extern CPUINFO_INTERNAL const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map;
48 #endif
49 
50 CPUINFO_PRIVATE void cpuinfo_x86_mach_init(void);
51 CPUINFO_PRIVATE void cpuinfo_x86_linux_init(void);
52 CPUINFO_PRIVATE void cpuinfo_x86_freebsd_init(void);
53 #if defined(_WIN32) || defined(__CYGWIN__)
54 #if CPUINFO_ARCH_ARM64
55 CPUINFO_PRIVATE BOOL CALLBACK cpuinfo_arm_windows_init(PINIT_ONCE init_once, PVOID parameter, PVOID* context);
56 #else
57 CPUINFO_PRIVATE BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PVOID* context);
58 #endif
59 #endif
60 CPUINFO_PRIVATE void cpuinfo_arm_mach_init(void);
61 CPUINFO_PRIVATE void cpuinfo_arm_linux_init(void);
62 CPUINFO_PRIVATE void cpuinfo_riscv_linux_init(void);
63 CPUINFO_PRIVATE void cpuinfo_emscripten_init(void);
64 
65 CPUINFO_PRIVATE uint32_t cpuinfo_compute_max_cache_size(const struct cpuinfo_processor* processor);
66 
67 typedef void (*cpuinfo_processor_callback)(uint32_t);
68