aboutsummaryrefslogtreecommitdiff
path: root/src/api.c
blob: 09171019c6bec0ede694663e5e27e32783aa505f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <stddef.h>

#include <cpuinfo.h>
#include <api.h>


struct cpuinfo_processor* cpuinfo_processors;
struct cpuinfo_core* cpuinfo_cores;
struct cpuinfo_package* cpuinfo_packages;
struct cpuinfo_cache* cpuinfo_cache[cpuinfo_cache_level_max] = { NULL };

uint32_t cpuinfo_processors_count;
uint32_t cpuinfo_cores_count;
uint32_t cpuinfo_packages_count;
uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max] = { 0 };


const struct cpuinfo_processor* cpuinfo_get_processors(void) {
	return cpuinfo_processors;
}

const struct cpuinfo_core* cpuinfo_get_cores(void) {
	return cpuinfo_cores;
}

const struct cpuinfo_package* cpuinfo_get_packages(void) {
	return cpuinfo_packages;
}

const struct cpuinfo_processor* cpuinfo_get_processor(uint32_t index) {
	if (index < cpuinfo_processors_count) {
		return cpuinfo_processors + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_core* cpuinfo_get_core(uint32_t index) {
	if (index < cpuinfo_cores_count) {
		return cpuinfo_cores + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_package* cpuinfo_get_package(uint32_t index) {
	if (index < cpuinfo_packages_count) {
		return cpuinfo_packages + index;
	} else {
		return NULL;
	}
}

uint32_t cpuinfo_get_processors_count(void) {
	return cpuinfo_processors_count;
}

uint32_t cpuinfo_get_cores_count(void) {
	return cpuinfo_cores_count;
}

uint32_t cpuinfo_get_packages_count(void) {
	return cpuinfo_packages_count;
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_caches(void) {
	return cpuinfo_cache[cpuinfo_cache_level_1i];
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_caches(void) {
	return cpuinfo_cache[cpuinfo_cache_level_1d];
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_caches(void) {
	return cpuinfo_cache[cpuinfo_cache_level_2];
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_caches(void) {
	return cpuinfo_cache[cpuinfo_cache_level_3];
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_caches(void) {
	return cpuinfo_cache[cpuinfo_cache_level_4];
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index) {
	if (index < cpuinfo_cache_count[cpuinfo_cache_level_1i]) {
		return cpuinfo_cache[cpuinfo_cache_level_1i] + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index) {
	if (index < cpuinfo_cache_count[cpuinfo_cache_level_1d]) {
		return cpuinfo_cache[cpuinfo_cache_level_1d] + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index) {
	if (index < cpuinfo_cache_count[cpuinfo_cache_level_2]) {
		return cpuinfo_cache[cpuinfo_cache_level_2] + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index) {
	if (index < cpuinfo_cache_count[cpuinfo_cache_level_3]) {
		return cpuinfo_cache[cpuinfo_cache_level_3] + index;
	} else {
		return NULL;
	}
}

const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index) {
	if (index < cpuinfo_cache_count[cpuinfo_cache_level_4]) {
		return cpuinfo_cache[cpuinfo_cache_level_4] + index;
	} else {
		return NULL;
	}
}

uint32_t CPUINFO_ABI cpuinfo_get_l1i_caches_count(void) {
	return cpuinfo_cache_count[cpuinfo_cache_level_1i];
}

uint32_t CPUINFO_ABI cpuinfo_get_l1d_caches_count(void) {
	return cpuinfo_cache_count[cpuinfo_cache_level_1d];
}

uint32_t CPUINFO_ABI cpuinfo_get_l2_caches_count(void) {
	return cpuinfo_cache_count[cpuinfo_cache_level_2];
}

uint32_t CPUINFO_ABI cpuinfo_get_l3_caches_count(void) {
	return cpuinfo_cache_count[cpuinfo_cache_level_3];
}

uint32_t CPUINFO_ABI cpuinfo_get_l4_caches_count(void) {
	return cpuinfo_cache_count[cpuinfo_cache_level_4];
}