aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/x86/odp/api/abi
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2018-05-29 13:52:27 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-05-31 17:35:23 +0300
commitc6cc6d3a79976bfe96cbb9ff192cf22daffc18c4 (patch)
treec42771d0a7c13e9e02bb69137d2ad316fa0ba5f5 /platform/linux-generic/arch/x86/odp/api/abi
parent2a9d3323537d030c1b3385ed14b496bf9e2b20b3 (diff)
linux-gen: time: inline arch cpu time on x86
Inline cpu HW time counter read function on x86. Time global data structure is visible to applications, but Posix types (timespec) or header files are not. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/arch/x86/odp/api/abi')
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h15
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu_rdtsc.h29
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu_time.h29
3 files changed, 60 insertions, 13 deletions
diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h
index 63be3da65..1eb8a9561 100644
--- a/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h
+++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h
@@ -8,6 +8,7 @@
#define ODP_ARCH_CPU_INLINES_H_
#include <stdint.h>
+#include <odp/api/abi/cpu_rdtsc.h>
_ODP_INLINE void odp_cpu_pause(void)
{
@@ -20,19 +21,7 @@ _ODP_INLINE void odp_cpu_pause(void)
_ODP_INLINE uint64_t odp_cpu_cycles(void)
{
- union {
- uint64_t tsc_64;
- struct {
- uint32_t lo_32;
- uint32_t hi_32;
- };
- } tsc;
-
- __asm__ __volatile__ ("rdtsc" :
- "=a" (tsc.lo_32),
- "=d" (tsc.hi_32) : : "memory");
-
- return tsc.tsc_64;
+ return _odp_cpu_rdtsc();
}
_ODP_INLINE uint64_t odp_cpu_cycles_max(void)
diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu_rdtsc.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu_rdtsc.h
new file mode 100644
index 000000000..ccc5f0f36
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu_rdtsc.h
@@ -0,0 +1,29 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_ARCH_CPU_RDTSC_H_
+#define ODP_ARCH_CPU_RDTSC_H_
+
+#include <stdint.h>
+
+static inline uint64_t _odp_cpu_rdtsc(void)
+{
+ union {
+ uint64_t tsc_64;
+ struct {
+ uint32_t lo_32;
+ uint32_t hi_32;
+ };
+ } tsc;
+
+ __asm__ __volatile__ ("rdtsc" :
+ "=a" (tsc.lo_32),
+ "=d" (tsc.hi_32) : : "memory");
+
+ return tsc.tsc_64;
+}
+
+#endif
diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu_time.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu_time.h
new file mode 100644
index 000000000..05ff0db94
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu_time.h
@@ -0,0 +1,29 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_ARCH_CPU_TIME_H_
+#define ODP_ARCH_CPU_TIME_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <odp/api/abi/cpu_rdtsc.h>
+
+static inline uint64_t _odp_cpu_global_time(void)
+{
+ return _odp_cpu_rdtsc();
+}
+
+int _odp_cpu_has_global_time(void);
+uint64_t _odp_cpu_global_time_freq(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif