aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/linux/odp_cpu_arch.c
diff options
context:
space:
mode:
authorMaxim Uvarov <maxim.uvarov@linaro.org>2016-02-08 20:47:58 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2016-02-08 20:47:58 +0300
commitbbd5ac81d9e606415f2ad2ecb999c2ff8c3716c9 (patch)
treed6da6a9a491b05721cd562b1c22ea49c6076b107 /platform/linux-generic/arch/linux/odp_cpu_arch.c
parentee90f447a6f5c76ab7751e6b747d1da3ac407fb1 (diff)
parentfd93da30b42937f62afecccd43809815044f5a45 (diff)
Merge branch 'next'v1.7.0.0
Diffstat (limited to 'platform/linux-generic/arch/linux/odp_cpu_arch.c')
-rw-r--r--platform/linux-generic/arch/linux/odp_cpu_arch.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/platform/linux-generic/arch/linux/odp_cpu_arch.c b/platform/linux-generic/arch/linux/odp_cpu_arch.c
new file mode 100644
index 000000000..3112d0cd0
--- /dev/null
+++ b/platform/linux-generic/arch/linux/odp_cpu_arch.c
@@ -0,0 +1,48 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <odp_posix_extensions.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+#include <odp/cpu.h>
+#include <odp/hints.h>
+#include <odp/system_info.h>
+#include <odp_debug_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;
+}