From 8776bb94197613a369b47b3adf4b2d4e0ba766ed Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 26 Sep 2018 06:34:54 +0200 Subject: score: Remove CPU_PROVIDES_IDLE_THREAD_BODY Remove the CPU_PROVIDES_IDLE_THREAD_BODY option to avoid unnecessary conditional compilation. Close #3539. --- cpukit/score/cpu/arm/armv7-thread-idle.c | 6 +-- cpukit/score/cpu/arm/include/rtems/score/cpu.h | 10 +---- cpukit/score/cpu/bfin/cpu.c | 2 - cpukit/score/cpu/bfin/include/rtems/score/cpu.h | 36 ------------------ .../score/cpu/epiphany/include/rtems/score/cpu.h | 34 ----------------- cpukit/score/cpu/i386/Makefile.am | 1 + cpukit/score/cpu/i386/include/rtems/score/cpu.h | 23 ------------ cpukit/score/cpu/lm32/include/rtems/score/cpu.h | 36 ------------------ cpukit/score/cpu/m32c/include/rtems/score/cpu.h | 36 ------------------ cpukit/score/cpu/m68k/include/rtems/score/cpu.h | 10 ----- cpukit/score/cpu/mips/include/rtems/score/cpu.h | 33 ----------------- cpukit/score/cpu/moxie/Makefile.am | 1 + cpukit/score/cpu/moxie/include/rtems/score/cpu.h | 43 +--------------------- cpukit/score/cpu/nios2/Makefile.am | 1 + cpukit/score/cpu/nios2/include/rtems/score/cpu.h | 4 +- cpukit/score/cpu/no_cpu/Makefile.am | 1 + cpukit/score/cpu/no_cpu/cpuidle.c | 28 ++++++++++++++ cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h | 29 --------------- cpukit/score/cpu/or1k/include/rtems/score/cpu.h | 34 ----------------- cpukit/score/cpu/powerpc/Makefile.am | 1 + cpukit/score/cpu/powerpc/include/rtems/score/cpu.h | 25 +------------ cpukit/score/cpu/riscv/include/rtems/score/cpu.h | 1 - cpukit/score/cpu/sh/Makefile.am | 1 + cpukit/score/cpu/sh/cpu.c | 28 -------------- cpukit/score/cpu/sh/include/rtems/score/cpu.h | 32 ---------------- cpukit/score/cpu/sparc/Makefile.am | 3 +- cpukit/score/cpu/sparc/include/rtems/score/cpu.h | 18 +-------- cpukit/score/cpu/sparc64/Makefile.am | 1 + cpukit/score/cpu/sparc64/include/rtems/score/cpu.h | 24 ------------ cpukit/score/cpu/v850/Makefile.am | 1 + cpukit/score/cpu/v850/include/rtems/score/cpu.h | 29 +-------------- cpukit/score/cpu/x86_64/Makefile.am | 1 + cpukit/score/cpu/x86_64/include/rtems/score/cpu.h | 1 - 33 files changed, 52 insertions(+), 482 deletions(-) create mode 100644 cpukit/score/cpu/no_cpu/cpuidle.c (limited to 'cpukit/score') diff --git a/cpukit/score/cpu/arm/armv7-thread-idle.c b/cpukit/score/cpu/arm/armv7-thread-idle.c index 527fbbcc88..dd78a938ef 100644 --- a/cpukit/score/cpu/arm/armv7-thread-idle.c +++ b/cpukit/score/cpu/arm/armv7-thread-idle.c @@ -8,7 +8,7 @@ * Copyright (c) 2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH - * Obere Lagerstr. 30 + * Dornierstr. 4 * 82178 Puchheim * Germany * @@ -24,13 +24,13 @@ #include -#ifdef ARM_MULTILIB_HAS_WFI void *_CPU_Thread_Idle_body( uintptr_t ignored ) { while ( true ) { +#ifdef ARM_MULTILIB_HAS_WFI __asm__ volatile ("wfi"); +#endif /* ARM_MULTILIB_HAS_WFI */ } } -#endif /* ARM_MULTILIB_HAS_WFI */ diff --git a/cpukit/score/cpu/arm/include/rtems/score/cpu.h b/cpukit/score/cpu/arm/include/rtems/score/cpu.h index 3343b40297..a44abe167e 100644 --- a/cpukit/score/cpu/arm/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/arm/include/rtems/score/cpu.h @@ -119,12 +119,6 @@ #define CPU_ENABLE_ROBUST_THREAD_DISPATCH TRUE -#if defined(ARM_MULTILIB_HAS_WFI) - #define CPU_PROVIDES_IDLE_THREAD_BODY TRUE -#else - #define CPU_PROVIDES_IDLE_THREAD_BODY FALSE -#endif - #define CPU_STACK_GROWS_UP FALSE #if defined(ARM_MULTILIB_CACHE_LINE_MAX_64) @@ -597,9 +591,7 @@ static inline CPU_Counter_ticks _CPU_Counter_difference( return second - first; } -#if CPU_PROVIDES_IDLE_THREAD_BODY == TRUE - void *_CPU_Thread_Idle_body( uintptr_t ignored ); -#endif +void *_CPU_Thread_Idle_body( uintptr_t ignored ); /** @} */ diff --git a/cpukit/score/cpu/bfin/cpu.c b/cpukit/score/cpu/bfin/cpu.c index 00d0f21b41..0771b4b3cd 100644 --- a/cpukit/score/cpu/bfin/cpu.c +++ b/cpukit/score/cpu/bfin/cpu.c @@ -168,14 +168,12 @@ void _CPU_ISR_install_vector( _CPU_ISR_install_raw_handler( vector, _ISR_Handler, &ignored ); } -#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE) void *_CPU_Thread_Idle_body(uintptr_t ignored) { while (1) { __asm__ __volatile__("ssync; idle; ssync"); } } -#endif /* * Copied from the arm port. diff --git a/cpukit/score/cpu/bfin/include/rtems/score/cpu.h b/cpukit/score/cpu/bfin/include/rtems/score/cpu.h index af68905edf..329a1b6762 100644 --- a/cpukit/score/cpu/bfin/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/bfin/include/rtems/score/cpu.h @@ -172,32 +172,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine @ref _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * @ref _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * -# BSP provided - * -# CPU dependent (if provided) - * -# generic (if no BSP and no CPU dependent) - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -719,16 +693,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/** - * This routine is the CPU dependent IDLE thread body. - * - * @note It need only be provided if @ref CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ void *_CPU_Thread_Idle_body( uintptr_t ignored ); /** diff --git a/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h b/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h index 46213ff262..d5c046a1fa 100644 --- a/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/epiphany/include/rtems/score/cpu.h @@ -146,30 +146,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - * - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -636,16 +612,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Thread_Idle_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); /* diff --git a/cpukit/score/cpu/i386/Makefile.am b/cpukit/score/cpu/i386/Makefile.am index b03d8593c4..faef1fbf04 100644 --- a/cpukit/score/cpu/i386/Makefile.am +++ b/cpukit/score/cpu/i386/Makefile.am @@ -4,6 +4,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c cpu_asm.S libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) include $(top_srcdir)/automake/local.am diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h index 2007426843..d38af9475f 100644 --- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h @@ -96,19 +96,6 @@ extern "C" { #define CPU_STRUCTURE_ALIGNMENT -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - #define CPU_MAXIMUM_PROCESSORS 32 #define I386_CONTEXT_CONTROL_EFLAGS_OFFSET 0 @@ -577,18 +564,8 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Thread_Idle_body - * - * Use the halt instruction of low power mode of a particular i386 model. - */ - -#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE) - void *_CPU_Thread_Idle_body( uintptr_t ignored ); -#endif /* CPU_PROVIDES_IDLE_THREAD_BODY */ - /* * _CPU_Context_switch * diff --git a/cpukit/score/cpu/lm32/include/rtems/score/cpu.h b/cpukit/score/cpu/lm32/include/rtems/score/cpu.h index 782412f7d5..80374a6a83 100644 --- a/cpukit/score/cpu/lm32/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/lm32/include/rtems/score/cpu.h @@ -166,32 +166,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine @ref _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * @ref _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * -# BSP provided - * -# CPU dependent (if provided) - * -# generic (if no BSP and no CPU dependent) - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -753,16 +727,6 @@ void _CPU_ISR_install_vector( /** @} */ -/** - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if @ref CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ void *_CPU_Thread_Idle_body( uintptr_t ignored ); /** diff --git a/cpukit/score/cpu/m32c/include/rtems/score/cpu.h b/cpukit/score/cpu/m32c/include/rtems/score/cpu.h index 7eb3ab326e..3dc6b2a136 100644 --- a/cpukit/score/cpu/m32c/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/m32c/include/rtems/score/cpu.h @@ -188,32 +188,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine @ref _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * @ref _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * -# BSP provided - * -# CPU dependent (if provided) - * -# generic (if no BSP and no CPU dependent) - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -738,16 +712,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/** - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if @ref CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ void *_CPU_Thread_Idle_body( uintptr_t ignored ); /** diff --git a/cpukit/score/cpu/m68k/include/rtems/score/cpu.h b/cpukit/score/cpu/m68k/include/rtems/score/cpu.h index b7ab352cad..cd3f55fe0a 100644 --- a/cpukit/score/cpu/m68k/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/m68k/include/rtems/score/cpu.h @@ -82,7 +82,6 @@ extern "C" { #define CPU_USE_DEFERRED_FP_SWITCH TRUE #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE #define CPU_STACK_GROWS_UP FALSE /* FIXME: Is this the right value? */ @@ -401,15 +400,6 @@ void _CPU_Context_Initialize( /* end of Context handler macros */ -/* - * _CPU_Thread_Idle_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); /* diff --git a/cpukit/score/cpu/mips/include/rtems/score/cpu.h b/cpukit/score/cpu/mips/include/rtems/score/cpu.h index 42eae73b0a..fbb519ed1d 100644 --- a/cpukit/score/cpu/mips/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/mips/include/rtems/score/cpu.h @@ -174,30 +174,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Internal_threads_Idle_thread_body - * must be provided and is the default IDLE thread body instead of - * _Internal_threads_Idle_thread_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - */ - -/* we can use the low power wait instruction for the IDLE thread */ -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -802,15 +778,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Internal_threads_Idle_thread_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); /* diff --git a/cpukit/score/cpu/moxie/Makefile.am b/cpukit/score/cpu/moxie/Makefile.am index d5e8952693..93cf64b82e 100644 --- a/cpukit/score/cpu/moxie/Makefile.am +++ b/cpukit/score/cpu/moxie/Makefile.am @@ -8,6 +8,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c moxie-exception-frame-print.c cpu_asm.S libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) include $(top_srcdir)/automake/local.am diff --git a/cpukit/score/cpu/moxie/include/rtems/score/cpu.h b/cpukit/score/cpu/moxie/include/rtems/score/cpu.h index 79c5a61c0c..fbf689438e 100644 --- a/cpukit/score/cpu/moxie/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/moxie/include/rtems/score/cpu.h @@ -135,35 +135,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Internal_threads_Idle_thread_body - * must be provided and is the default IDLE thread body instead of - * _Internal_threads_Idle_thread_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - * - * MOXIE Specific Information: - * - * XXX - * The port initially called a BSP dependent routine called - * IDLE_Monitor. The idle task body can be overridden by - * the BSP in newer versions of RTEMS. - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -598,19 +569,7 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Internal_threads_Idle_thread_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - * MOXIE Specific Information: - * - * XXX - */ -void *_CPU_Thread_Idle_body( uint32_t ); +void *_CPU_Thread_Idle_body( uintptr_t ); /* * _CPU_Context_switch diff --git a/cpukit/score/cpu/nios2/Makefile.am b/cpukit/score/cpu/nios2/Makefile.am index a0ecab3345..4619db0b28 100644 --- a/cpukit/score/cpu/nios2/Makefile.am +++ b/cpukit/score/cpu/nios2/Makefile.am @@ -7,6 +7,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += nios2-context-initialize.c libscorecpu_a_SOURCES += nios2-context-switch.S libscorecpu_a_SOURCES += nios2-context-validate.S diff --git a/cpukit/score/cpu/nios2/include/rtems/score/cpu.h b/cpukit/score/cpu/nios2/include/rtems/score/cpu.h index fa052842c8..c86b13bb73 100644 --- a/cpukit/score/cpu/nios2/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/nios2/include/rtems/score/cpu.h @@ -51,8 +51,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - #define CPU_STACK_GROWS_UP FALSE /* FIXME: Is this the right value? */ @@ -316,6 +314,8 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); +void *_CPU_Thread_Idle_body( uintptr_t ignored ); + void _CPU_Context_switch( Context_Control *run, Context_Control *heir ); void _CPU_Context_restore( diff --git a/cpukit/score/cpu/no_cpu/Makefile.am b/cpukit/score/cpu/no_cpu/Makefile.am index 0d89f5af2b..b5f59e56f8 100644 --- a/cpukit/score/cpu/no_cpu/Makefile.am +++ b/cpukit/score/cpu/no_cpu/Makefile.am @@ -4,6 +4,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c cpu_asm.c libscorecpu_a_SOURCES += cpucounterfrequency.c libscorecpu_a_SOURCES += cpucounterread.c +libscorecpu_a_SOURCES += cpuidle.c libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) include $(top_srcdir)/automake/local.am diff --git a/cpukit/score/cpu/no_cpu/cpuidle.c b/cpukit/score/cpu/no_cpu/cpuidle.c new file mode 100644 index 0000000000..de66b39faa --- /dev/null +++ b/cpukit/score/cpu/no_cpu/cpuidle.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 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.org/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +void *_CPU_Thread_Idle_body( uintptr_t ignored ) +{ + while ( true ) { + /* Do nothing */ + } + + return NULL; +} diff --git a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h index 427e381582..8e66182bba 100644 --- a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h @@ -197,32 +197,6 @@ extern "C" { */ #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine @ref _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * @ref _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * -# BSP provided - * -# CPU dependent (if provided) - * -# generic (if no BSP and no CPU dependent) - * - * Port Specific Information: - * - * XXX document implementation including references if appropriate - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -1044,9 +1018,6 @@ void _CPU_ISR_install_vector( /** * This routine is the CPU dependent IDLE thread body. * - * NOTE: It need only be provided if @ref CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * * Port Specific Information: * * XXX document implementation including references if appropriate diff --git a/cpukit/score/cpu/or1k/include/rtems/score/cpu.h b/cpukit/score/cpu/or1k/include/rtems/score/cpu.h index 1989417a3f..8d66ccf522 100644 --- a/cpukit/score/cpu/or1k/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/or1k/include/rtems/score/cpu.h @@ -138,30 +138,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - * - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -644,16 +620,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Thread_Idle_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - * - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); /* diff --git a/cpukit/score/cpu/powerpc/Makefile.am b/cpukit/score/cpu/powerpc/Makefile.am index 05ab2f480d..15736ab809 100644 --- a/cpukit/score/cpu/powerpc/Makefile.am +++ b/cpukit/score/cpu/powerpc/Makefile.am @@ -2,6 +2,7 @@ include $(top_srcdir)/automake/compile.am noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += ppc-context-volatile-clobber.S libscorecpu_a_SOURCES += ppc-context-validate.S libscorecpu_a_SOURCES += ppc-isr-disable-mask.S diff --git a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h index beacc2829e..85864ff71b 100644 --- a/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/powerpc/include/rtems/score/cpu.h @@ -52,29 +52,6 @@ extern "C" { /* conditional compilation parameters */ -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -940,6 +917,8 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); +void *_CPU_Thread_Idle_body( uintptr_t ignored ); + /* * _CPU_Context_switch * diff --git a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h index e836ac0919..4a81d0cd87 100644 --- a/cpukit/score/cpu/riscv/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/riscv/include/rtems/score/cpu.h @@ -52,7 +52,6 @@ extern "C" { #define CPU_ALL_TASKS_ARE_FP FALSE #define CPU_IDLE_TASK_IS_FP FALSE #define CPU_USE_DEFERRED_FP_SWITCH FALSE -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE #define CPU_STACK_GROWS_UP FALSE #define CPU_STRUCTURE_ALIGNMENT __attribute__ ((aligned (64))) diff --git a/cpukit/score/cpu/sh/Makefile.am b/cpukit/score/cpu/sh/Makefile.am index 37188443ff..b4a125fd81 100644 --- a/cpukit/score/cpu/sh/Makefile.am +++ b/cpukit/score/cpu/sh/Makefile.am @@ -4,6 +4,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c context.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += sh-exception-frame-print.c libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/cpukit/score/cpu/sh/cpu.c b/cpukit/score/cpu/sh/cpu.c index 8988da98ce..b1e8766ff0 100644 --- a/cpukit/score/cpu/sh/cpu.c +++ b/cpukit/score/cpu/sh/cpu.c @@ -175,34 +175,6 @@ void _CPU_ISR_install_vector( _ISR_Vector_table[ vector ] = new_handler; } -/* - * _CPU_Thread_Idle_body - * - * NOTES: - * - * 1. This is the same as the regular CPU independent algorithm. - * - * 2. If you implement this using a "halt", "idle", or "shutdown" - * instruction, then don't forget to put it in an infinite loop. - * - * 3. Be warned. Some processors with onboard DMA have been known - * to stop the DMA if the CPU were put in IDLE mode. This might - * also be a problem with other on-chip peripherals. So use this - * hook with caution. - */ - -#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE) -void *_CPU_Thread_Idle_body( uintptr_t ignored ) -{ - - for( ; ; ) - { - __asm__ volatile("nop"); - } - /* insert your "halt" instruction here */ ; -} -#endif - void _CPU_Context_Initialize( Context_Control *_the_context, void *_stack_base, diff --git a/cpukit/score/cpu/sh/include/rtems/score/cpu.h b/cpukit/score/cpu/sh/include/rtems/score/cpu.h index a61355d858..61d8e56448 100644 --- a/cpukit/score/cpu/sh/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/sh/include/rtems/score/cpu.h @@ -147,29 +147,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * 1. BSP provided - * 2. CPU dependent (if provided) - * 3. generic (if no BSP and no CPU dependent) - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY TRUE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -594,15 +571,6 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -/* - * _CPU_Thread_Idle_body - * - * This routine is the CPU dependent IDLE thread body. - * - * NOTE: It need only be provided if CPU_PROVIDES_IDLE_THREAD_BODY - * is TRUE. - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); /* diff --git a/cpukit/score/cpu/sparc/Makefile.am b/cpukit/score/cpu/sparc/Makefile.am index 2e0ab5999d..6c06ce0d11 100644 --- a/cpukit/score/cpu/sparc/Makefile.am +++ b/cpukit/score/cpu/sparc/Makefile.am @@ -3,8 +3,9 @@ include $(top_srcdir)/automake/compile.am noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = libscorecpu_a_SOURCES += access_le.c -libscorecpu_a_SOURCES += cpu.c libscorecpu_a_SOURCES += cpu_asm.S +libscorecpu_a_SOURCES += cpu.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += sparc-access.S libscorecpu_a_SOURCES += sparc-context-validate.S libscorecpu_a_SOURCES += sparc-context-volatile-clobber.S diff --git a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h index a53791ce3f..8c6212725d 100644 --- a/cpukit/score/cpu/sparc/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/sparc/include/rtems/score/cpu.h @@ -135,22 +135,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * - If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * - If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * The SPARC architecture does not have a low power or halt instruction. - * It is left to the BSP and/or CPU specific code to provide an IDLE - * thread body which is aware of low power modes. - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -988,6 +972,8 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); +void *_CPU_Thread_Idle_body( uintptr_t ignored ); + /** * @brief SPARC specific context switch. * diff --git a/cpukit/score/cpu/sparc64/Makefile.am b/cpukit/score/cpu/sparc64/Makefile.am index 711036e41a..0d3d649c77 100644 --- a/cpukit/score/cpu/sparc64/Makefile.am +++ b/cpukit/score/cpu/sparc64/Makefile.am @@ -7,6 +7,7 @@ libscorecpu_a_SOURCES += cpu.c libscorecpu_a_SOURCES += interrupt.S libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += sparc64-exception-frame-print.c libscorecpu_a_SOURCES += sparc64-syscall.S diff --git a/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h b/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h index 9175a2c888..0249023f94 100644 --- a/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/sparc64/include/rtems/score/cpu.h @@ -106,19 +106,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/* - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - */ - -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - /* * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -877,19 +864,8 @@ void _CPU_ISR_install_vector( proc_ptr *old_handler ); -#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE) - -/* - * _CPU_Thread_Idle_body - * - * Some SPARC implementations have low power, sleep, or idle modes. This - * tries to take advantage of those models. - */ - void *_CPU_Thread_Idle_body( uintptr_t ignored ); -#endif /* CPU_PROVIDES_IDLE_THREAD_BODY */ - /* * _CPU_Context_switch * diff --git a/cpukit/score/cpu/v850/Makefile.am b/cpukit/score/cpu/v850/Makefile.am index 8db039c9f5..3e3e8ae94f 100644 --- a/cpukit/score/cpu/v850/Makefile.am +++ b/cpukit/score/cpu/v850/Makefile.am @@ -5,6 +5,7 @@ libscorecpu_a_SOURCES = cpu.c libscorecpu_a_SOURCES += cpu_asm.S libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += v850-exception-frame-print.c libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/cpukit/score/cpu/v850/include/rtems/score/cpu.h b/cpukit/score/cpu/v850/include/rtems/score/cpu.h index 46e7bca754..7011366ffb 100644 --- a/cpukit/score/cpu/v850/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/v850/include/rtems/score/cpu.h @@ -164,33 +164,6 @@ extern "C" { #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -/** - * Does this port provide a CPU dependent IDLE task implementation? - * - * If TRUE, then the routine @ref _CPU_Thread_Idle_body - * must be provided and is the default IDLE thread body instead of - * @ref _CPU_Thread_Idle_body. - * - * If FALSE, then use the generic IDLE thread body if the BSP does - * not provide one. - * - * This is intended to allow for supporting processors which have - * a low power or idle mode. When the IDLE thread is executed, then - * the CPU can be powered down. - * - * The order of precedence for selecting the IDLE thread body is: - * - * -# BSP provided - * -# CPU dependent (if provided) - * -# generic (if no BSP and no CPU dependent) - * - * Port Specific Information: - * - * There does not appear to be a reason for the v850 port itself to provide - * a special idle task. - */ -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE - /** * Does the stack grow up (toward higher addresses) or down * (toward lower addresses)? @@ -665,6 +638,8 @@ void _CPU_Context_Initialize( */ void _CPU_Initialize(void); +void *_CPU_Thread_Idle_body( uintptr_t ignored ); + /** * @addtogroup CPUContext */ diff --git a/cpukit/score/cpu/x86_64/Makefile.am b/cpukit/score/cpu/x86_64/Makefile.am index db4bd15cd5..556246d9f7 100644 --- a/cpukit/score/cpu/x86_64/Makefile.am +++ b/cpukit/score/cpu/x86_64/Makefile.am @@ -4,6 +4,7 @@ noinst_LIBRARIES = libscorecpu.a libscorecpu_a_SOURCES = cpu.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterfrequency.c libscorecpu_a_SOURCES += ../no_cpu/cpucounterread.c +libscorecpu_a_SOURCES += ../no_cpu/cpuidle.c libscorecpu_a_SOURCES += x86_64-context-initialize.c libscorecpu_a_SOURCES += x86_64-context-switch.S libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h index 8f4a3c8d2e..7f3aed3bb1 100644 --- a/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/x86_64/include/rtems/score/cpu.h @@ -52,7 +52,6 @@ extern "C" { #define CPU_IDLE_TASK_IS_FP FALSE #define CPU_USE_DEFERRED_FP_SWITCH TRUE #define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE #define CPU_STACK_GROWS_UP FALSE #define CPU_STRUCTURE_ALIGNMENT RTEMS_ALIGNED(64) -- cgit v1.2.3