summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-18 19:47:40 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-21 16:38:34 +0100
commitf4539aa3950cbc0cd15b13e3327e6c674ebbb9d3 (patch)
treeeb745956ab1bde19c5067701c6c812819dd03601 /cpukit
parentscore: Add RTEMS_FATAL_SOURCE_POWERPC_EXCEPTION (diff)
downloadrtems-f4539aa3950cbc0cd15b13e3327e6c674ebbb9d3.tar.bz2
arm: Add _CPU_Thread_Idle_body for ARMv7-M
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/cpu/arm/Makefile.am1
-rw-r--r--cpukit/score/cpu/arm/armv7m-thread-idle.c30
-rw-r--r--cpukit/score/cpu/arm/rtems/score/cpu.h10
3 files changed, 40 insertions, 1 deletions
diff --git a/cpukit/score/cpu/arm/Makefile.am b/cpukit/score/cpu/arm/Makefile.am
index cf511c9417..0da1984297 100644
--- a/cpukit/score/cpu/arm/Makefile.am
+++ b/cpukit/score/cpu/arm/Makefile.am
@@ -33,6 +33,7 @@ libscorecpu_a_SOURCES += armv7m-isr-level-get.c
libscorecpu_a_SOURCES += armv7m-isr-level-set.c
libscorecpu_a_SOURCES += armv7m-isr-vector-install.c
libscorecpu_a_SOURCES += armv7m-multitasking-start-stop.c
+libscorecpu_a_SOURCES += armv7m-thread-idle.c
include $(srcdir)/preinstall.am
include $(top_srcdir)/automake/local.am
diff --git a/cpukit/score/cpu/arm/armv7m-thread-idle.c b/cpukit/score/cpu/arm/armv7m-thread-idle.c
new file mode 100644
index 0000000000..cc9a05c94d
--- /dev/null
+++ b/cpukit/score/cpu/arm/armv7m-thread-idle.c
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+#ifdef ARM_MULTILIB_ARCH_V7M
+
+void *_CPU_Thread_Idle_body( uintptr_t ignored )
+{
+ while ( true ) {
+ __asm__ volatile ("wfi");
+ }
+}
+
+#endif /* ARM_MULTILIB_ARCH_V7M */
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h
index b12133f054..5cc378a8c8 100644
--- a/cpukit/score/cpu/arm/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/rtems/score/cpu.h
@@ -147,7 +147,11 @@
#define CPU_USE_DEFERRED_FP_SWITCH FALSE
-#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE
+#if defined(ARM_MULTILIB_ARCH_V7M)
+ #define CPU_PROVIDES_IDLE_THREAD_BODY TRUE
+#else
+ #define CPU_PROVIDES_IDLE_THREAD_BODY FALSE
+#endif
#define CPU_STACK_GROWS_UP FALSE
@@ -461,6 +465,10 @@ static inline uint16_t CPU_swap_u16( uint16_t value )
#endif
}
+#if CPU_PROVIDES_IDLE_THREAD_BODY == TRUE
+ void *_CPU_Thread_Idle_body( uintptr_t ignored );
+#endif
+
/** @} */
#if defined(ARM_MULTILIB_ARCH_V4)