From f4539aa3950cbc0cd15b13e3327e6c674ebbb9d3 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sun, 18 Nov 2012 19:47:40 +0100 Subject: arm: Add _CPU_Thread_Idle_body for ARMv7-M --- cpukit/score/cpu/arm/Makefile.am | 1 + cpukit/score/cpu/arm/armv7m-thread-idle.c | 30 ++++++++++++++++++++++++++++++ cpukit/score/cpu/arm/rtems/score/cpu.h | 10 +++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 cpukit/score/cpu/arm/armv7m-thread-idle.c 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 + * + * + * 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 + +#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) -- cgit v1.2.3