blob: 09171019c6bec0ede694663e5e27e32783aa505f [file] [log] [blame]
Marat Dukhan30401972017-09-26 18:35:52 -07001#include <stddef.h>
2
3#include <cpuinfo.h>
4#include <api.h>
5
6
7struct cpuinfo_processor* cpuinfo_processors;
8struct cpuinfo_core* cpuinfo_cores;
9struct cpuinfo_package* cpuinfo_packages;
10struct cpuinfo_cache* cpuinfo_cache[cpuinfo_cache_level_max] = { NULL };
11
12uint32_t cpuinfo_processors_count;
13uint32_t cpuinfo_cores_count;
14uint32_t cpuinfo_packages_count;
15uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max] = { 0 };
16
17
18const struct cpuinfo_processor* cpuinfo_get_processors(void) {
19 return cpuinfo_processors;
20}
21
22const struct cpuinfo_core* cpuinfo_get_cores(void) {
23 return cpuinfo_cores;
24}
25
26const struct cpuinfo_package* cpuinfo_get_packages(void) {
27 return cpuinfo_packages;
28}
29
30const struct cpuinfo_processor* cpuinfo_get_processor(uint32_t index) {
31 if (index < cpuinfo_processors_count) {
32 return cpuinfo_processors + index;
33 } else {
34 return NULL;
35 }
36}
37
38const struct cpuinfo_core* cpuinfo_get_core(uint32_t index) {
39 if (index < cpuinfo_cores_count) {
40 return cpuinfo_cores + index;
41 } else {
42 return NULL;
43 }
44}
45
46const struct cpuinfo_package* cpuinfo_get_package(uint32_t index) {
47 if (index < cpuinfo_packages_count) {
48 return cpuinfo_packages + index;
49 } else {
50 return NULL;
51 }
52}
53
54uint32_t cpuinfo_get_processors_count(void) {
55 return cpuinfo_processors_count;
56}
57
58uint32_t cpuinfo_get_cores_count(void) {
59 return cpuinfo_cores_count;
60}
61
62uint32_t cpuinfo_get_packages_count(void) {
63 return cpuinfo_packages_count;
64}
65
66const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_caches(void) {
67 return cpuinfo_cache[cpuinfo_cache_level_1i];
68}
69
70const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_caches(void) {
71 return cpuinfo_cache[cpuinfo_cache_level_1d];
72}
73
74const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_caches(void) {
75 return cpuinfo_cache[cpuinfo_cache_level_2];
76}
77
78const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_caches(void) {
79 return cpuinfo_cache[cpuinfo_cache_level_3];
80}
81
82const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_caches(void) {
83 return cpuinfo_cache[cpuinfo_cache_level_4];
84}
85
86const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index) {
87 if (index < cpuinfo_cache_count[cpuinfo_cache_level_1i]) {
88 return cpuinfo_cache[cpuinfo_cache_level_1i] + index;
89 } else {
90 return NULL;
91 }
92}
93
94const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index) {
95 if (index < cpuinfo_cache_count[cpuinfo_cache_level_1d]) {
96 return cpuinfo_cache[cpuinfo_cache_level_1d] + index;
97 } else {
98 return NULL;
99 }
100}
101
102const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index) {
103 if (index < cpuinfo_cache_count[cpuinfo_cache_level_2]) {
104 return cpuinfo_cache[cpuinfo_cache_level_2] + index;
105 } else {
106 return NULL;
107 }
108}
109
110const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index) {
111 if (index < cpuinfo_cache_count[cpuinfo_cache_level_3]) {
112 return cpuinfo_cache[cpuinfo_cache_level_3] + index;
113 } else {
114 return NULL;
115 }
116}
117
118const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index) {
119 if (index < cpuinfo_cache_count[cpuinfo_cache_level_4]) {
120 return cpuinfo_cache[cpuinfo_cache_level_4] + index;
121 } else {
122 return NULL;
123 }
124}
125
126uint32_t CPUINFO_ABI cpuinfo_get_l1i_caches_count(void) {
127 return cpuinfo_cache_count[cpuinfo_cache_level_1i];
128}
129
130uint32_t CPUINFO_ABI cpuinfo_get_l1d_caches_count(void) {
131 return cpuinfo_cache_count[cpuinfo_cache_level_1d];
132}
133
134uint32_t CPUINFO_ABI cpuinfo_get_l2_caches_count(void) {
135 return cpuinfo_cache_count[cpuinfo_cache_level_2];
136}
137
138uint32_t CPUINFO_ABI cpuinfo_get_l3_caches_count(void) {
139 return cpuinfo_cache_count[cpuinfo_cache_level_3];
140}
141
142uint32_t CPUINFO_ABI cpuinfo_get_l4_caches_count(void) {
143 return cpuinfo_cache_count[cpuinfo_cache_level_4];
144}