aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorHongbo Zhang <hongbo.zhang@linaro.org>2016-01-27 16:56:06 +0800
committerMaxim Uvarov <maxim.uvarov@linaro.org>2016-02-08 20:45:23 +0300
commit1600aac0d24658455c7bceab013b4383d24e85a9 (patch)
tree602d08dc78dd2df598e915d6b719662b4a99c4c6 /platform
parent03bd111ef73fff184ef54acab621d6cd3bc3d83c (diff)
linux-generic: sysinfo: move x86 system info codes to its plarform file
This patch moves the x86 system info codes into the newly added x86 specific platform file. Signed-off-by: Hongbo Zhang <hongbo.zhang@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/Makefile.am6
-rw-r--r--platform/linux-generic/arch/x86/odp_sysinfo_parse.c72
-rw-r--r--platform/linux-generic/include/odp_internal.h4
-rw-r--r--platform/linux-generic/odp_system_info.c68
4 files changed, 81 insertions, 69 deletions
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index be2487b44..24fd58f78 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -149,12 +149,14 @@ __LIB__libodp_la_SOURCES = \
odp_timer.c \
odp_version.c \
odp_weak.c \
- arch/@ARCH@/odp_cpu_arch.c
+ arch/@ARCH@/odp_cpu_arch.c \
+ arch/@ARCH@/odp_sysinfo_parse.c
EXTRA_DIST = \
arch/linux/odp_cpu_arch.c \
arch/mips64/odp_cpu_arch.c \
- arch/x86/odp_cpu_arch.c
+ arch/x86/odp_cpu_arch.c \
+ arch/x86/odp_sysinfo_parse.c
if HAVE_PCAP
__LIB__libodp_la_SOURCES += pktio/pcap.c
diff --git a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c
new file mode 100644
index 000000000..e2931cb76
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c
@@ -0,0 +1,72 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <odp_internal.h>
+#include <string.h>
+
+int odp_cpuinfo_parser(FILE *file, odp_system_info_t *sysinfo)
+{
+ char str[1024];
+ char *pos;
+ double ghz = 0.0;
+ uint64_t hz;
+ int id = 0;
+
+ while (fgets(str, sizeof(str), file) != NULL && id < MAX_CPU_NUMBER) {
+ pos = strstr(str, "model name");
+ if (pos) {
+ pos = strchr(str, ':');
+ strncpy(sysinfo->model_str[id], pos + 2,
+ sizeof(sysinfo->model_str[id]));
+
+ pos = strchr(sysinfo->model_str[id], '@');
+ *(pos - 1) = '\0';
+ if (sscanf(pos, "@ %lfGHz", &ghz) == 1) {
+ hz = (uint64_t)(ghz * 1000000000.0);
+ sysinfo->cpu_hz[id] = hz;
+ }
+ id++;
+ }
+ }
+
+ return 0;
+}
+
+uint64_t odp_cpu_hz_current(int id)
+{
+ char str[1024];
+ FILE *file;
+ int cpu;
+ char *pos;
+ double mhz = 0.0;
+
+ file = fopen("/proc/cpuinfo", "rt");
+
+ /* find the correct processor instance */
+ while (fgets(str, sizeof(str), file) != NULL) {
+ pos = strstr(str, "processor");
+ if (pos) {
+ if (sscanf(pos, "processor : %d", &cpu) == 1)
+ if (cpu == id)
+ break;
+ }
+ }
+
+ /* extract the cpu current speed */
+ while (fgets(str, sizeof(str), file) != NULL) {
+ pos = strstr(str, "cpu MHz");
+ if (pos) {
+ if (sscanf(pos, "cpu MHz : %lf", &mhz) == 1)
+ break;
+ }
+ }
+
+ fclose(file);
+ if (mhz)
+ return (uint64_t)(mhz * 1000000.0);
+
+ return -1;
+}
diff --git a/platform/linux-generic/include/odp_internal.h b/platform/linux-generic/include/odp_internal.h
index 69e45543b..f37c6c3d2 100644
--- a/platform/linux-generic/include/odp_internal.h
+++ b/platform/linux-generic/include/odp_internal.h
@@ -20,6 +20,7 @@ extern "C" {
#include <odp/init.h>
#include <odp/thread.h>
+#include <stdio.h>
extern __thread int __odp_errno;
@@ -106,6 +107,9 @@ int odp_time_term_global(void);
void _odp_flush_caches(void);
+int odp_cpuinfo_parser(FILE *file, odp_system_info_t *sysinfo);
+uint64_t odp_cpu_hz_current(int id);
+
#ifdef __cplusplus
}
#endif
diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux-generic/odp_system_info.c
index 2220fe587..5f3f39636 100644
--- a/platform/linux-generic/odp_system_info.c
+++ b/platform/linux-generic/odp_system_info.c
@@ -109,71 +109,7 @@ static int huge_page_size(void)
/*
* HW specific /proc/cpuinfo file parsing
*/
-#if defined __x86_64__ || defined __i386__
-
-static int odp_cpuinfo_parser(FILE *file, odp_system_info_t *sysinfo)
-{
- char str[1024];
- char *pos;
- double ghz = 0.0;
- int id = 0;
-
- while (fgets(str, sizeof(str), file) != NULL && id < MAX_CPU_NUMBER) {
- pos = strstr(str, "model name");
- if (pos) {
- pos = strchr(str, ':');
- strncpy(sysinfo->model_str[id], pos + 2,
- sizeof(sysinfo->model_str[id]));
-
- pos = strchr(sysinfo->model_str[id], '@');
- *(pos - 1) = '\0';
- if (sscanf(pos, "@ %lfGHz", &ghz) == 1)
- sysinfo->cpu_hz[id] = (uint64_t)(ghz * 1000000000.0);
-
- id++;
- }
- }
-
- return 0;
-}
-
-static uint64_t odp_cpu_hz_current(int id)
-{
- char str[1024];
- FILE *file;
- int cpu;
- char *pos;
- double mhz = 0.0;
-
- file = fopen("/proc/cpuinfo", "rt");
-
- /* find the correct processor instance */
- while (fgets(str, sizeof(str), file) != NULL) {
- pos = strstr(str, "processor");
- if (pos) {
- if (sscanf(pos, "processor : %d", &cpu) == 1)
- if (cpu == id)
- break;
- }
- }
-
- /* extract the cpu current speed */
- while (fgets(str, sizeof(str), file) != NULL) {
- pos = strstr(str, "cpu MHz");
- if (pos) {
- if (sscanf(pos, "cpu MHz : %lf", &mhz) == 1)
- break;
- }
- }
-
- fclose(file);
- if (mhz)
- return (uint64_t)(mhz * 1000000.0);
-
- return -1;
-}
-
-#elif defined __arm__ || defined __aarch64__
+#if defined __arm__ || defined __aarch64__
static int odp_cpuinfo_parser(FILE *file ODP_UNUSED,
odp_system_info_t *sysinfo ODP_UNUSED)
@@ -279,8 +215,6 @@ static uint64_t odp_cpu_hz_current(int id ODP_UNUSED)
return -1;
}
-#else
- #error GCC target not found
#endif