summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-12-10 15:44:02 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-02-03 10:00:51 +0100
commita853c8518d7b8ccf54491018857ed86548f3ea24 (patch)
treee333b5dd474718b8037a865690706811b810f93c /cpukit
parentscore: Create idle threads via linker set (diff)
downloadrtems-a853c8518d7b8ccf54491018857ed86548f3ea24.tar.bz2
Optional Initial Extensions initialization
Update #2408.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/sapi/include/confdefs.h8
-rw-r--r--cpukit/sapi/src/exinit.c2
-rw-r--r--cpukit/score/include/rtems/sysinit.h3
-rw-r--r--cpukit/score/src/threaddispatch.c2
-rw-r--r--cpukit/score/src/userext.c23
5 files changed, 20 insertions, 18 deletions
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 8635ca02d4..8f5906d067 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -26,8 +26,10 @@
* Include the executive's configuration
*/
#include <rtems.h>
+#include <rtems/sysinit.h>
#include <rtems/score/apimutex.h>
#include <rtems/score/percpu.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#ifdef CONFIGURE_DISABLE_BSP_SETTINGS
@@ -2394,6 +2396,12 @@ const rtems_libio_helper rtems_fs_init_helper =
#define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
RTEMS_ARRAY_SIZE(Configuration_Initial_Extensions)
+
+ RTEMS_SYSINIT_ITEM(
+ _User_extensions_Handler_initialization,
+ RTEMS_SYSINIT_INITIAL_EXTENSIONS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+ );
#else
#define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c
index faaf283a30..685197df90 100644
--- a/cpukit/sapi/src/exinit.c
+++ b/cpukit/sapi/src/exinit.c
@@ -47,7 +47,6 @@
#include <rtems/score/timecounter.h>
#include <rtems/score/threadimpl.h>
#include <rtems/score/todimpl.h>
-#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdogimpl.h>
#include <rtems/score/wkspace.h>
@@ -113,7 +112,6 @@ static void rtems_initialize_data_structures(void)
_Thread_Dispatch_initialization();
- _User_extensions_Handler_initialization();
_ISR_Handler_initialization();
_API_Mutex_Initialization( 2 );
diff --git a/cpukit/score/include/rtems/sysinit.h b/cpukit/score/include/rtems/sysinit.h
index e6fe62f230..49c465bfbc 100644
--- a/cpukit/score/include/rtems/sysinit.h
+++ b/cpukit/score/include/rtems/sysinit.h
@@ -28,7 +28,8 @@ extern "C" {
*/
#define RTEMS_SYSINIT_BSP_WORK_AREAS 000100
#define RTEMS_SYSINIT_BSP_START 000200
-#define RTEMS_SYSINIT_DATA_STRUCTURES 000300
+#define RTEMS_SYSINIT_INITIAL_EXTENSIONS 000300
+#define RTEMS_SYSINIT_DATA_STRUCTURES 000301
#define RTEMS_SYSINIT_IDLE_THREADS 000380
#define RTEMS_SYSINIT_BSP_LIBC 000400
#define RTEMS_SYSINIT_BEFORE_DRIVERS 000500
diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
index 3ae8335fef..00c2f095a2 100644
--- a/cpukit/score/src/threaddispatch.c
+++ b/cpukit/score/src/threaddispatch.c
@@ -30,6 +30,8 @@
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
+CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );
+
static Thread_Action *_Thread_Get_post_switch_action(
Thread_Control *executing
)
diff --git a/cpukit/score/src/userext.c b/cpukit/score/src/userext.c
index 1328f68b42..1ac622e093 100644
--- a/cpukit/score/src/userext.c
+++ b/cpukit/score/src/userext.c
@@ -23,8 +23,6 @@
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
-CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );
-
typedef struct {
User_extensions_Switch_control *switch_control;
} User_extensions_Switch_context;
@@ -50,17 +48,12 @@ static void _User_extensions_Switch_visitor(
void _User_extensions_Handler_initialization(void)
{
- uint32_t number_of_initial_extensions =
- rtems_configuration_get_number_of_initial_extensions();
-
- if ( number_of_initial_extensions > 0 ) {
- User_extensions_Switch_control *initial_extension_switch_controls =
- _Workspace_Allocate_or_fatal_error(
- number_of_initial_extensions
- * sizeof( *initial_extension_switch_controls )
- );
- User_extensions_Switch_context ctx = { initial_extension_switch_controls };
-
- _User_extensions_Iterate( &ctx, _User_extensions_Switch_visitor );
- }
+ User_extensions_Switch_control *initial_extension_switch_controls =
+ _Workspace_Allocate_or_fatal_error(
+ rtems_configuration_get_number_of_initial_extensions()
+ * sizeof( *initial_extension_switch_controls )
+ );
+ User_extensions_Switch_context ctx = { initial_extension_switch_controls };
+
+ _User_extensions_Iterate( &ctx, _User_extensions_Switch_visitor );
}