aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>2017-09-05 21:11:06 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2017-10-03 11:52:14 +0300
commit052d2687930e5a99568e9349ca9704ae507e8dc5 (patch)
tree8cd3a7a1ebe79abe3ae4b09db647185c6fa22964
parent0ff7861b8a958b5e23adc5b13783aeeff0629e03 (diff)
linux-gen: deduplicate arch-specific files
Rewrite ARCH-specific files so that there is no significant code duplication between different arch files and default files set. Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/Makefile.inc22
-rw-r--r--platform/linux-generic/Makefile.am46
-rw-r--r--platform/linux-generic/arch/aarch64/odp_global_time.c (renamed from platform/linux-generic/arch/aarch64/odp_cpu_arch.c)37
-rw-r--r--platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c28
-rw-r--r--platform/linux-generic/arch/arm/odp_cpu_arch.c79
-rw-r--r--platform/linux-generic/arch/arm/odp_sysinfo_parse.c28
-rw-r--r--platform/linux-generic/arch/default/odp_cpu_arch.c28
-rw-r--r--platform/linux-generic/arch/default/odp_cpu_cycles.c19
-rw-r--r--platform/linux-generic/arch/default/odp_global_time.c33
-rw-r--r--platform/linux-generic/arch/mips64/odp_cpu_arch.c25
-rw-r--r--platform/linux-generic/arch/powerpc/odp_cpu_arch.c25
-rw-r--r--platform/linux-generic/arch/powerpc/odp_global_time.c15
-rw-r--r--platform/linux-generic/arch/x86/odp_cpu_arch.c72
-rw-r--r--platform/linux-generic/arch/x86/odp_global_time.c77
14 files changed, 169 insertions, 365 deletions
diff --git a/platform/Makefile.inc b/platform/Makefile.inc
index bb5da187b..f3161abd4 100644
--- a/platform/Makefile.inc
+++ b/platform/Makefile.inc
@@ -81,25 +81,3 @@ odpapiabiarchinclude_HEADERS = \
$(top_srcdir)/include/odp/arch/@ARCH_ABI@/odp/api/abi/pool.h \
$(top_srcdir)/include/odp/arch/@ARCH_ABI@/odp/api/abi/queue.h \
$(top_srcdir)/include/odp/arch/@ARCH_ABI@/odp/api/abi/shared_memory.h
-
-EXTRA_DIST = \
- arch/arm/odp/api/cpu_arch.h \
- arch/arm/odp_cpu_arch.c \
- arch/arm/odp_sysinfo_parse.c \
- arch/aarch64/odp/api/cpu_arch.h \
- arch/aarch64/odp_cpu_arch.c \
- arch/aarch64/odp_sysinfo_parse.c \
- arch/default/odp/api/cpu_arch.h \
- arch/default/odp_cpu_arch.c \
- arch/default/odp_sysinfo_parse.c \
- arch/mips64/odp/api/cpu_arch.h \
- arch/mips64/odp_cpu_arch.c \
- arch/mips64/odp_sysinfo_parse.c \
- arch/powerpc/odp/api/cpu_arch.h \
- arch/powerpc/odp_cpu_arch.c \
- arch/powerpc/odp_sysinfo_parse.c \
- arch/x86/odp/api/cpu_arch.h \
- arch/x86/odp_cpu_arch.c \
- arch/x86/odp_sysinfo_parse.c \
- arch/x86/cpu_flags.c \
- arch/x86/cpu_flags.h
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 7257a60f5..0ebb6f76c 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -68,22 +68,6 @@ odpapiinclude_HEADERS = \
$(srcdir)/include/odp/api/traffic_mngr.h \
$(srcdir)/include/odp/api/version.h
-if ARCH_IS_ARM
-odpapiinclude_HEADERS += $(srcdir)/arch/arm/odp/api/cpu_arch.h
-endif
-if ARCH_IS_AARCH64
-odpapiinclude_HEADERS += $(srcdir)/arch/aarch64/odp/api/cpu_arch.h
-endif
-if ARCH_IS_MIPS64
-odpapiinclude_HEADERS += $(srcdir)/arch/mips64/odp/api/cpu_arch.h
-endif
-if ARCH_IS_POWERPC
-odpapiinclude_HEADERS += $(srcdir)/arch/powerpc/odp/api/cpu_arch.h
-endif
-if ARCH_IS_X86
-odpapiinclude_HEADERS += $(srcdir)/arch/x86/odp/api/cpu_arch.h
-endif
-
odpapiplatincludedir= $(includedir)/odp/api/plat
odpapiplatinclude_HEADERS = \
$(builddir)/include/odp/api/plat/static_inline.h \
@@ -238,27 +222,47 @@ __LIB__libodp_linux_la_SOURCES = \
odp_weak.c
if ARCH_IS_ARM
-__LIB__libodp_linux_la_SOURCES += arch/arm/odp_cpu_arch.c \
- arch/arm/odp_sysinfo_parse.c
+__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_arch.c \
+ arch/default/odp_cpu_cycles.c \
+ arch/default/odp_global_time.c \
+ arch/default/odp_sysinfo_parse.c
+arch_odp_headers = $(srcdir)/arch/arm/odp/api/cpu_arch.h
endif
if ARCH_IS_AARCH64
-__LIB__libodp_linux_la_SOURCES += arch/aarch64/odp_cpu_arch.c \
- arch/aarch64/odp_sysinfo_parse.c
+__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_arch.c \
+ arch/default/odp_cpu_cycles.c \
+ arch/aarch64/odp_global_time.c \
+ arch/default/odp_sysinfo_parse.c
+arch_odp_headers = $(srcdir)/arch/aarch64/odp/api/cpu_arch.h
endif
if ARCH_IS_MIPS64
__LIB__libodp_linux_la_SOURCES += arch/mips64/odp_cpu_arch.c \
+ arch/default/odp_cpu_cycles.c \
+ arch/default/odp_global_time.c \
arch/mips64/odp_sysinfo_parse.c
+arch_odp_headers = $(srcdir)/arch/mips64/odp/api/cpu_arch.h
endif
if ARCH_IS_POWERPC
-__LIB__libodp_linux_la_SOURCES += arch/powerpc/odp_cpu_arch.c \
+__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_arch.c \
+ arch/default/odp_cpu_cycles.c \
+ arch/default/odp_global_time.c \
arch/powerpc/odp_sysinfo_parse.c
+arch_odp_headers = $(srcdir)/arch/powerpc/odp/api/cpu_arch.h
endif
if ARCH_IS_X86
__LIB__libodp_linux_la_SOURCES += arch/x86/cpu_flags.c \
arch/x86/odp_cpu_arch.c \
+ arch/default/odp_cpu_cycles.c \
+ arch/x86/odp_global_time.c \
arch/x86/odp_sysinfo_parse.c
+arch_odp_headers = $(srcdir)/arch/x86/odp/api/cpu_arch.h
+noinst_HEADERS += $(srcdir)/arch/x86/cpu_flags.h
endif
+noinst_HEADERS += $(srcdir)/arch/default/odp/api/cpu_arch.h
+
+odpapiinclude_HEADERS += $(arch_odp_headers)
+
if HAVE_PCAP
__LIB__libodp_linux_la_SOURCES += pktio/pcap.c
endif
diff --git a/platform/linux-generic/arch/aarch64/odp_cpu_arch.c b/platform/linux-generic/arch/aarch64/odp_global_time.c
index b87d1c102..97444f7e9 100644
--- a/platform/linux-generic/arch/aarch64/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/aarch64/odp_global_time.c
@@ -8,48 +8,11 @@
#include <odp_posix_extensions.h>
-#include <stdlib.h>
#include <time.h>
-#include <odp/api/cpu.h>
-#include <odp/api/hints.h>
-#include <odp/api/system_info.h>
#include <odp_debug_internal.h>
#include <odp_time_internal.h>
-#define GIGA 1000000000
-
-uint64_t odp_cpu_cycles(void)
-{
- struct timespec time;
- uint64_t sec, ns, hz, cycles;
- int ret;
-
- ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
-
- if (ret != 0)
- ODP_ABORT("clock_gettime failed\n");
-
- hz = odp_cpu_hz_max();
- sec = (uint64_t)time.tv_sec;
- ns = (uint64_t)time.tv_nsec;
-
- cycles = sec * hz;
- cycles += (ns * hz) / GIGA;
-
- return cycles;
-}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
int cpu_has_global_time(void)
{
uint64_t hz = cpu_global_time_freq();
diff --git a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c b/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c
deleted file mode 100644
index 1e2c729a7..000000000
--- a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (c) 2016, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "config.h"
-
-#include <odp_internal.h>
-#include <odp_debug_internal.h>
-#include <string.h>
-
-int cpuinfo_parser(FILE *file ODP_UNUSED, system_info_t *sysinfo)
-{
- int i;
-
- ODP_DBG("Warning: use dummy values for freq and model string\n");
- for (i = 0; i < MAX_CPU_NUMBER; i++) {
- sysinfo->cpu_hz_max[i] = 1400000000;
- strcpy(sysinfo->model_str[i], "UNKNOWN");
- }
-
- return 0;
-}
-
-void sys_info_print_arch(void)
-{
-}
diff --git a/platform/linux-generic/arch/arm/odp_cpu_arch.c b/platform/linux-generic/arch/arm/odp_cpu_arch.c
deleted file mode 100644
index fc49ce371..000000000
--- a/platform/linux-generic/arch/arm/odp_cpu_arch.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (c) 2015, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "config.h"
-
-#include <odp_posix_extensions.h>
-
-#include <stdlib.h>
-#include <time.h>
-
-#include <odp/api/cpu.h>
-#include <odp/api/hints.h>
-#include <odp/api/system_info.h>
-#include <odp_debug_internal.h>
-#include <odp_time_internal.h>
-
-#define GIGA 1000000000
-
-uint64_t odp_cpu_cycles(void)
-{
- struct timespec time;
- uint64_t sec, ns, hz, cycles;
- int ret;
-
- ret = clock_gettime(CLOCK_MONOTONIC_RAW, &time);
-
- if (ret != 0)
- ODP_ABORT("clock_gettime failed\n");
-
- hz = odp_cpu_hz_max();
- sec = (uint64_t)time.tv_sec;
- ns = (uint64_t)time.tv_nsec;
-
- cycles = sec * hz;
- cycles += (ns * hz) / GIGA;
-
- return cycles;
-}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
-int cpu_has_global_time(void)
-{
- uint64_t hz = cpu_global_time_freq();
-
- /*
- * The system counter portion of the architected timer must
- * provide a uniform view of system time to all processing
- * elements in the system. This should hold true even for
- * heterogeneous SoCs.
- *
- * Determine whether the system has 'global time' by checking
- * whether a read of the architected timer frequency sys reg
- * returns a sane value. Sane is considered to be within
- * 1MHz and 6GHz (1us and .1667ns period).
- */
- return hz >= 1000000 && hz <= 6000000000;
-}
-
-uint64_t cpu_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time_freq(void)
-{
- return 0;
-}
diff --git a/platform/linux-generic/arch/arm/odp_sysinfo_parse.c b/platform/linux-generic/arch/arm/odp_sysinfo_parse.c
deleted file mode 100644
index 1e2c729a7..000000000
--- a/platform/linux-generic/arch/arm/odp_sysinfo_parse.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (c) 2016, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "config.h"
-
-#include <odp_internal.h>
-#include <odp_debug_internal.h>
-#include <string.h>
-
-int cpuinfo_parser(FILE *file ODP_UNUSED, system_info_t *sysinfo)
-{
- int i;
-
- ODP_DBG("Warning: use dummy values for freq and model string\n");
- for (i = 0; i < MAX_CPU_NUMBER; i++) {
- sysinfo->cpu_hz_max[i] = 1400000000;
- strcpy(sysinfo->model_str[i], "UNKNOWN");
- }
-
- return 0;
-}
-
-void sys_info_print_arch(void)
-{
-}
diff --git a/platform/linux-generic/arch/default/odp_cpu_arch.c b/platform/linux-generic/arch/default/odp_cpu_arch.c
index fab351feb..8a8da7445 100644
--- a/platform/linux-generic/arch/default/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/default/odp_cpu_arch.c
@@ -12,10 +12,7 @@
#include <time.h>
#include <odp/api/cpu.h>
-#include <odp/api/hints.h>
-#include <odp/api/system_info.h>
#include <odp_debug_internal.h>
-#include <odp_time_internal.h>
#define GIGA 1000000000
@@ -39,28 +36,3 @@ uint64_t odp_cpu_cycles(void)
return cycles;
}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
-int cpu_has_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time_freq(void)
-{
- return 0;
-}
diff --git a/platform/linux-generic/arch/default/odp_cpu_cycles.c b/platform/linux-generic/arch/default/odp_cpu_cycles.c
new file mode 100644
index 000000000..ccc588825
--- /dev/null
+++ b/platform/linux-generic/arch/default/odp_cpu_cycles.c
@@ -0,0 +1,19 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "config.h"
+
+#include <odp/api/cpu.h>
+
+uint64_t odp_cpu_cycles_max(void)
+{
+ return UINT64_MAX;
+}
+
+uint64_t odp_cpu_cycles_resolution(void)
+{
+ return 1;
+}
diff --git a/platform/linux-generic/arch/default/odp_global_time.c b/platform/linux-generic/arch/default/odp_global_time.c
new file mode 100644
index 000000000..89cce1cfb
--- /dev/null
+++ b/platform/linux-generic/arch/default/odp_global_time.c
@@ -0,0 +1,33 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "config.h"
+
+#include <odp_posix_extensions.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+#include <odp/api/cpu.h>
+#include <odp/api/hints.h>
+#include <odp/api/system_info.h>
+#include <odp_debug_internal.h>
+#include <odp_time_internal.h>
+
+int cpu_has_global_time(void)
+{
+ return 0;
+}
+
+uint64_t cpu_global_time(void)
+{
+ return 0;
+}
+
+uint64_t cpu_global_time_freq(void)
+{
+ return 0;
+}
diff --git a/platform/linux-generic/arch/mips64/odp_cpu_arch.c b/platform/linux-generic/arch/mips64/odp_cpu_arch.c
index 143867ea0..620a01044 100644
--- a/platform/linux-generic/arch/mips64/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/mips64/odp_cpu_arch.c
@@ -22,28 +22,3 @@ uint64_t odp_cpu_cycles(void)
return cycle;
}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
-int cpu_has_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time_freq(void)
-{
- return 0;
-}
diff --git a/platform/linux-generic/arch/powerpc/odp_cpu_arch.c b/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
index fab351feb..6a16f13a2 100644
--- a/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/powerpc/odp_cpu_arch.c
@@ -39,28 +39,3 @@ uint64_t odp_cpu_cycles(void)
return cycles;
}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
-int cpu_has_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time(void)
-{
- return 0;
-}
-
-uint64_t cpu_global_time_freq(void)
-{
- return 0;
-}
diff --git a/platform/linux-generic/arch/powerpc/odp_global_time.c b/platform/linux-generic/arch/powerpc/odp_global_time.c
new file mode 100644
index 000000000..d54ba6bc8
--- /dev/null
+++ b/platform/linux-generic/arch/powerpc/odp_global_time.c
@@ -0,0 +1,15 @@
+
+int cpu_has_global_time(void)
+{
+ return 0;
+}
+
+uint64_t cpu_global_time(void)
+{
+ return 0;
+}
+
+uint64_t cpu_global_time_freq(void)
+{
+ return 0;
+}
diff --git a/platform/linux-generic/arch/x86/odp_cpu_arch.c b/platform/linux-generic/arch/x86/odp_cpu_arch.c
index 50fbbac66..a20d91734 100644
--- a/platform/linux-generic/arch/x86/odp_cpu_arch.c
+++ b/platform/linux-generic/arch/x86/odp_cpu_arch.c
@@ -9,7 +9,6 @@
#include <odp_posix_extensions.h>
#include <odp/api/cpu.h>
-#include <odp_time_internal.h>
#include <odp_debug_internal.h>
#include <time.h>
@@ -30,74 +29,3 @@ uint64_t odp_cpu_cycles(void)
return tsc.tsc_64;
}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
-uint64_t cpu_global_time(void)
-{
- return odp_cpu_cycles();
-}
-
-#define SEC_IN_NS 1000000000ULL
-
-/* Measure TSC frequency. Frequency information registers are defined for x86,
- * but those are often not enumerated. */
-uint64_t cpu_global_time_freq(void)
-{
- struct timespec sleep, ts1, ts2;
- uint64_t t1, t2, ts_nsec, cycles, hz;
- int i;
- uint64_t avg = 0;
- int rounds = 3;
- int warm_up = 1;
-
- for (i = 0; i < rounds; i++) {
- sleep.tv_sec = 0;
-
- if (warm_up)
- sleep.tv_nsec = SEC_IN_NS / 1000;
- else
- sleep.tv_nsec = SEC_IN_NS / 4;
-
- if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts1)) {
- ODP_DBG("clock_gettime failed\n");
- return 0;
- }
-
- t1 = cpu_global_time();
-
- if (nanosleep(&sleep, NULL) < 0) {
- ODP_DBG("nanosleep failed\n");
- return 0;
- }
-
- if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts2)) {
- ODP_DBG("clock_gettime failed\n");
- return 0;
- }
-
- t2 = cpu_global_time();
-
- ts_nsec = (ts2.tv_sec - ts1.tv_sec) * SEC_IN_NS;
- ts_nsec += ts2.tv_nsec - ts1.tv_nsec;
-
- cycles = t2 - t1;
-
- hz = (cycles * SEC_IN_NS) / ts_nsec;
-
- if (warm_up)
- warm_up = 0;
- else
- avg += hz;
- }
-
- return avg / (rounds - 1);
-}
diff --git a/platform/linux-generic/arch/x86/odp_global_time.c b/platform/linux-generic/arch/x86/odp_global_time.c
new file mode 100644
index 000000000..3ed243cc6
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp_global_time.c
@@ -0,0 +1,77 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "config.h"
+
+#include <odp_posix_extensions.h>
+
+#include <time.h>
+
+#include <odp/api/cpu.h>
+#include <odp/api/hints.h>
+#include <odp_debug_internal.h>
+#include <odp_time_internal.h>
+
+uint64_t cpu_global_time(void)
+{
+ return odp_cpu_cycles();
+}
+
+#define SEC_IN_NS 1000000000ULL
+
+/* Measure TSC frequency. Frequency information registers are defined for x86,
+ * but those are often not enumerated. */
+uint64_t cpu_global_time_freq(void)
+{
+ struct timespec sleep, ts1, ts2;
+ uint64_t t1, t2, ts_nsec, cycles, hz;
+ int i;
+ uint64_t avg = 0;
+ int rounds = 3;
+ int warm_up = 1;
+
+ for (i = 0; i < rounds; i++) {
+ sleep.tv_sec = 0;
+
+ if (warm_up)
+ sleep.tv_nsec = SEC_IN_NS / 1000;
+ else
+ sleep.tv_nsec = SEC_IN_NS / 4;
+
+ if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts1)) {
+ ODP_DBG("clock_gettime failed\n");
+ return 0;
+ }
+
+ t1 = cpu_global_time();
+
+ if (nanosleep(&sleep, NULL) < 0) {
+ ODP_DBG("nanosleep failed\n");
+ return 0;
+ }
+
+ if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts2)) {
+ ODP_DBG("clock_gettime failed\n");
+ return 0;
+ }
+
+ t2 = cpu_global_time();
+
+ ts_nsec = (ts2.tv_sec - ts1.tv_sec) * SEC_IN_NS;
+ ts_nsec += ts2.tv_nsec - ts1.tv_nsec;
+
+ cycles = t2 - t1;
+
+ hz = (cycles * SEC_IN_NS) / ts_nsec;
+
+ if (warm_up)
+ warm_up = 0;
+ else
+ avg += hz;
+ }
+
+ return avg / (rounds - 1);
+}