Move the idle thread body configuration constant out of the configuration table.
Provide a default definition of the idle thread body constant. Update #3875. --- cpukit/Makefile.am | 1 + cpukit/include/rtems/confdefs.h | 7 +++--- cpukit/include/rtems/config.h | 8 +------ cpukit/include/rtems/score/threadidledata.h | 13 +++++++++++ cpukit/score/src/threadcreateidle.c | 3 +-- cpukit/score/src/threadidledefault.c | 35 +++++++++++++++++++++++++++++ 6 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 cpukit/score/src/threadidledefault.c diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am index 1adcbb3ae9..42e16d71e6 100644 --- a/cpukit/Makefile.am +++ b/cpukit/Makefile.am @@ -956,6 +956,7 @@ librtemscpu_a_SOURCES += score/src/threaddispatch.c librtemscpu_a_SOURCES += score/src/threadget.c librtemscpu_a_SOURCES += score/src/threadhandler.c librtemscpu_a_SOURCES += score/src/threadinitialize.c +librtemscpu_a_SOURCES += score/src/threadidledefault.c librtemscpu_a_SOURCES += score/src/threadloadenv.c librtemscpu_a_SOURCES += score/src/threadrestart.c librtemscpu_a_SOURCES += score/src/threadsetstate.c diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index 442ee7af92..ae1dca11e0 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -1092,10 +1092,12 @@ extern "C" { #ifndef CONFIGURE_IDLE_TASK_BODY #if defined(BSP_IDLE_TASK_BODY) #define CONFIGURE_IDLE_TASK_BODY BSP_IDLE_TASK_BODY - #else - #define CONFIGURE_IDLE_TASK_BODY _CPU_Thread_Idle_body #endif #endif + +#if defined(CONFIGURE_INIT) && defined(CONFIGURE_IDLE_TASK_BODY) +const Thread_Idle_body _Thread_Idle_body = CONFIGURE_IDLE_TASK_BODY; +#endif /**@}*/ /* end of IDLE thread configuration */ /** @@ -2636,7 +2638,6 @@ struct _reent *__getreent(void) */ const rtems_configuration_table Configuration = { CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */ - CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */ #ifdef CONFIGURE_UNIFIED_WORK_AREAS /* true for unified work areas */ true, #else diff --git a/cpukit/include/rtems/config.h b/cpukit/include/rtems/config.h index 62804be41c..017b4ed476 100644 --- a/cpukit/include/rtems/config.h +++ b/cpukit/include/rtems/config.h @@ -87,12 +87,6 @@ typedef struct { */ uintptr_t work_space_size; - /** - * This element points to the BSP's optional idle task which may override - * the default one provided with RTEMS. - */ - void *(*idle_task)( uintptr_t ); - /** * @brief Specifies if a unified work area is used or not. * @@ -155,7 +149,7 @@ uint32_t rtems_configuration_get_maximum_extensions( void ); (_Watchdog_Ticks_per_timeslice) #define rtems_configuration_get_idle_task() \ - (Configuration.idle_task) + (_Thread_Idle_entry) #define rtems_configuration_get_idle_task_stack_size() \ (_Thread_Idle_stack_size) diff --git a/cpukit/include/rtems/score/threadidledata.h b/cpukit/include/rtems/score/threadidledata.h index 0011776ffa..79ac020576 100644 --- a/cpukit/include/rtems/score/threadidledata.h +++ b/cpukit/include/rtems/score/threadidledata.h @@ -56,6 +56,19 @@ extern "C" { */ extern const size_t _Thread_Idle_stack_size; +/** + * @brief The idle thread body type. + */ +typedef void *( *Thread_Idle_body )( uintptr_t ); + +/** + * @brief The idle thread body. + * + * This constant is defined by the application configuration via + * <rtems/confdefs.h>. + */ +extern const Thread_Idle_body _Thread_Idle_body; + /** @} */ #ifdef __cplusplus diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c index 66ed92702e..52c3ad4534 100644 --- a/cpukit/score/src/threadcreateidle.c +++ b/cpukit/score/src/threadcreateidle.c @@ -25,7 +25,6 @@ #include <rtems/score/stackimpl.h> #include <rtems/score/sysstate.h> #include <rtems/score/userextimpl.h> -#include <rtems/config.h> #include <string.h> @@ -79,7 +78,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) idle->is_idle = true; idle->Start.Entry.adaptor = _Thread_Entry_adaptor_idle; - idle->Start.Entry.Kinds.Idle.entry = rtems_configuration_get_idle_task(); + idle->Start.Entry.Kinds.Idle.entry = _Thread_Idle_body; _Thread_Load_environment( idle ); diff --git a/cpukit/score/src/threadidledefault.c b/cpukit/score/src/threadidledefault.c new file mode 100644 index 0000000000..6babe25d70 --- /dev/null +++ b/cpukit/score/src/threadidledefault.c @@ -0,0 +1,35 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/score/threadidledata.h> +#include <rtems/score/cpu.h> + +const Thread_Idle_body _Thread_Idle_body = _CPU_Thread_Idle_body; -- 2.16.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel