aboutsummaryrefslogtreecommitdiff
path: root/src/api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/api.c')
-rw-r--r--src/api.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/api.c b/src/api.c
index 1ffdb8c..0504a63 100644
--- a/src/api.c
+++ b/src/api.c
@@ -2,8 +2,11 @@
#include <cpuinfo.h>
#include <api.h>
+#include <log.h>
+bool cpuinfo_is_initialized = false;
+
struct cpuinfo_processor* cpuinfo_processors = NULL;
struct cpuinfo_core* cpuinfo_cores = NULL;
struct cpuinfo_cluster* cpuinfo_clusters = NULL;
@@ -18,22 +21,37 @@ uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max] = { 0 };
const struct cpuinfo_processor* cpuinfo_get_processors(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processors");
+ }
return cpuinfo_processors;
}
const struct cpuinfo_core* cpuinfo_get_cores(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "core");
+ }
return cpuinfo_cores;
}
const struct cpuinfo_cluster* cpuinfo_get_clusters(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "clusters");
+ }
return cpuinfo_clusters;
}
const struct cpuinfo_package* cpuinfo_get_packages(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "packages");
+ }
return cpuinfo_packages;
}
const struct cpuinfo_processor* cpuinfo_get_processor(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processor");
+ }
if (index < cpuinfo_processors_count) {
return cpuinfo_processors + index;
} else {
@@ -42,6 +60,9 @@ const struct cpuinfo_processor* cpuinfo_get_processor(uint32_t index) {
}
const struct cpuinfo_core* cpuinfo_get_core(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "core");
+ }
if (index < cpuinfo_cores_count) {
return cpuinfo_cores + index;
} else {
@@ -50,6 +71,9 @@ const struct cpuinfo_core* cpuinfo_get_core(uint32_t index) {
}
const struct cpuinfo_cluster* cpuinfo_get_cluster(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "cluster");
+ }
if (index < cpuinfo_clusters_count) {
return cpuinfo_clusters + index;
} else {
@@ -58,6 +82,9 @@ const struct cpuinfo_cluster* cpuinfo_get_cluster(uint32_t index) {
}
const struct cpuinfo_package* cpuinfo_get_package(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "package");
+ }
if (index < cpuinfo_packages_count) {
return cpuinfo_packages + index;
} else {
@@ -66,42 +93,72 @@ const struct cpuinfo_package* cpuinfo_get_package(uint32_t index) {
}
uint32_t cpuinfo_get_processors_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processors_count");
+ }
return cpuinfo_processors_count;
}
uint32_t cpuinfo_get_cores_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "cores_count");
+ }
return cpuinfo_cores_count;
}
uint32_t cpuinfo_get_clusters_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "clusters_count");
+ }
return cpuinfo_clusters_count;
}
uint32_t cpuinfo_get_packages_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "packages_count");
+ }
return cpuinfo_packages_count;
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_caches(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_caches");
+ }
return cpuinfo_cache[cpuinfo_cache_level_1i];
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_caches(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_caches");
+ }
return cpuinfo_cache[cpuinfo_cache_level_1d];
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_caches(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_caches");
+ }
return cpuinfo_cache[cpuinfo_cache_level_2];
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_caches(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_caches");
+ }
return cpuinfo_cache[cpuinfo_cache_level_3];
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_caches(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_caches");
+ }
return cpuinfo_cache[cpuinfo_cache_level_4];
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_cache");
+ }
if (index < cpuinfo_cache_count[cpuinfo_cache_level_1i]) {
return cpuinfo_cache[cpuinfo_cache_level_1i] + index;
} else {
@@ -110,6 +167,9 @@ const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index) {
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_cache");
+ }
if (index < cpuinfo_cache_count[cpuinfo_cache_level_1d]) {
return cpuinfo_cache[cpuinfo_cache_level_1d] + index;
} else {
@@ -118,6 +178,9 @@ const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index) {
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_cache");
+ }
if (index < cpuinfo_cache_count[cpuinfo_cache_level_2]) {
return cpuinfo_cache[cpuinfo_cache_level_2] + index;
} else {
@@ -126,6 +189,9 @@ const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index) {
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_cache");
+ }
if (index < cpuinfo_cache_count[cpuinfo_cache_level_3]) {
return cpuinfo_cache[cpuinfo_cache_level_3] + index;
} else {
@@ -134,6 +200,9 @@ const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index) {
}
const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_cache");
+ }
if (index < cpuinfo_cache_count[cpuinfo_cache_level_4]) {
return cpuinfo_cache[cpuinfo_cache_level_4] + index;
} else {
@@ -142,21 +211,36 @@ const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index) {
}
uint32_t CPUINFO_ABI cpuinfo_get_l1i_caches_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_caches_count");
+ }
return cpuinfo_cache_count[cpuinfo_cache_level_1i];
}
uint32_t CPUINFO_ABI cpuinfo_get_l1d_caches_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_caches_count");
+ }
return cpuinfo_cache_count[cpuinfo_cache_level_1d];
}
uint32_t CPUINFO_ABI cpuinfo_get_l2_caches_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_caches_count");
+ }
return cpuinfo_cache_count[cpuinfo_cache_level_2];
}
uint32_t CPUINFO_ABI cpuinfo_get_l3_caches_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_caches_count");
+ }
return cpuinfo_cache_count[cpuinfo_cache_level_3];
}
uint32_t CPUINFO_ABI cpuinfo_get_l4_caches_count(void) {
+ if (!cpuinfo_is_initialized) {
+ cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_caches_count");
+ }
return cpuinfo_cache_count[cpuinfo_cache_level_4];
}