aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2016-01-13 15:21:38 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2016-02-08 20:45:23 +0300
commit59128f5dc4cc831f569567917069b20ab045771e (patch)
treef8f426c66d660b41e6cbb72acfa09f9119ab4206 /platform
parent1613ad9696c742df2cc2dd487a715c77034592b8 (diff)
linux-generic: cpu: implemented pause
Implemented pause as an inline function in a cpu arch dependent header file. Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> Conflicts: platform/linux-generic/Makefile.am
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/Makefile.am4
-rw-r--r--platform/linux-generic/Makefile.inc2
-rw-r--r--platform/linux-generic/arch/linux/odp/cpu_arch.h22
-rw-r--r--platform/linux-generic/arch/mips64/odp/cpu_arch.h26
-rw-r--r--platform/linux-generic/arch/x86/odp/cpu_arch.h27
-rw-r--r--platform/linux-generic/include/odp/cpu.h2
6 files changed, 82 insertions, 1 deletions
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 9b98b6602..da8608ac4 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -2,6 +2,7 @@
#export CUSTOM_STR=https://git.linaro.org/lng/odp.git
include $(top_srcdir)/platform/Makefile.inc
+include $(top_srcdir)/platform/@with_platform@/Makefile.inc
AM_CFLAGS += -I$(srcdir)/include
AM_CFLAGS += -I$(top_srcdir)/include
@@ -51,7 +52,8 @@ odpinclude_HEADERS = \
$(srcdir)/include/odp/ticketlock.h \
$(srcdir)/include/odp/time.h \
$(srcdir)/include/odp/timer.h \
- $(srcdir)/include/odp/version.h
+ $(srcdir)/include/odp/version.h \
+ $(srcdir)/arch/@ARCH@/odp/cpu_arch.h
odpplatincludedir= $(includedir)/odp/plat
odpplatinclude_HEADERS = \
diff --git a/platform/linux-generic/Makefile.inc b/platform/linux-generic/Makefile.inc
index e69de29bb..048c8bb78 100644
--- a/platform/linux-generic/Makefile.inc
+++ b/platform/linux-generic/Makefile.inc
@@ -0,0 +1,2 @@
+AM_CFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH)
+AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH)
diff --git a/platform/linux-generic/arch/linux/odp/cpu_arch.h b/platform/linux-generic/arch/linux/odp/cpu_arch.h
new file mode 100644
index 000000000..1c79f875c
--- /dev/null
+++ b/platform/linux-generic/arch/linux/odp/cpu_arch.h
@@ -0,0 +1,22 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_CPU_ARCH_H_
+#define ODP_PLAT_CPU_ARCH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline void odp_cpu_pause(void)
+{
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/arch/mips64/odp/cpu_arch.h b/platform/linux-generic/arch/mips64/odp/cpu_arch.h
new file mode 100644
index 000000000..3bfa0dcde
--- /dev/null
+++ b/platform/linux-generic/arch/mips64/odp/cpu_arch.h
@@ -0,0 +1,26 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_CPU_ARCH_H_
+#define ODP_PLAT_CPU_ARCH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline void odp_cpu_pause(void)
+{
+ __asm__ __volatile__ ("nop");
+ __asm__ __volatile__ ("nop");
+ __asm__ __volatile__ ("nop");
+ __asm__ __volatile__ ("nop");
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/arch/x86/odp/cpu_arch.h b/platform/linux-generic/arch/x86/odp/cpu_arch.h
new file mode 100644
index 000000000..997a95475
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp/cpu_arch.h
@@ -0,0 +1,27 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_CPU_ARCH_H_
+#define ODP_PLAT_CPU_ARCH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline void odp_cpu_pause(void)
+{
+#ifdef __SSE2__
+ __asm__ __volatile__ ("pause");
+#else
+ __asm__ __volatile__ ("rep; nop");
+#endif
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp/cpu.h b/platform/linux-generic/include/odp/cpu.h
index b5b532005..b98507dd5 100644
--- a/platform/linux-generic/include/odp/cpu.h
+++ b/platform/linux-generic/include/odp/cpu.h
@@ -17,6 +17,8 @@
extern "C" {
#endif
+#include <odp/cpu_arch.h>
+
#include <odp/api/cpu.h>
#ifdef __cplusplus