summaryrefslogtreecommitdiffstats
path: root/c/src/exec/sapi
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1996-02-14 17:06:40 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1996-02-14 17:06:40 +0000
commit389fa85047aee8511379a80c5a7ebbfdb302791f (patch)
tree18d191bd763719e19b18784f8a770880f66d95f5 /c/src/exec/sapi
parentremoved post switch extension (diff)
downloadrtems-389fa85047aee8511379a80c5a7ebbfdb302791f.tar.bz2
Moved some initialization from the system initialization thread to
initialize_executive_early. This was done to clear up an ordering problem in which global tasks could be created before the MPCI layer was initialized.
Diffstat (limited to 'c/src/exec/sapi')
-rw-r--r--c/src/exec/sapi/src/exinit.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/c/src/exec/sapi/src/exinit.c b/c/src/exec/sapi/src/exinit.c
index c75018bca8..303e235e0e 100644
--- a/c/src/exec/sapi/src/exinit.c
+++ b/c/src/exec/sapi/src/exinit.c
@@ -174,13 +174,18 @@ rtems_interrupt_level rtems_initialize_executive_early(
multiprocessing_table->maximum_proxies
);
+ /*
+ * No threads should be created before this point!!! _Thread_Executing
+ * and _Thread_Heir are not set yet.
+ */
+
+ _Internal_threads_Initialization();
+
_MPCI_Handler_initialization(
multiprocessing_table->User_mpci_table,
RTEMS_TIMEOUT
);
- _Internal_threads_Initialization();
-
/* MANAGERS */
_Extension_Manager_initialization( configuration_table->maximum_extensions );
@@ -200,6 +205,41 @@ rtems_interrupt_level rtems_initialize_executive_early(
_System_state_Set( SYSTEM_STATE_BEFORE_MULTITASKING );
+ /*
+ * Run the API and BSPs predriver hook.
+ */
+
+ _API_extensions_Run_predriver();
+
+ if ( _CPU_Table.predriver_hook )
+ (*_CPU_Table.predriver_hook)();
+
+ /*
+ * Initialize all the device drivers and initialize the MPCI layer.
+ *
+ * NOTE: The MPCI may be build upon a device driver.
+ */
+
+ _IO_Initialize_all_drivers();
+
+ if ( _System_state_Is_multiprocessing ) {
+ _MPCI_Initialization();
+ _Internal_threads_MP_Send_process_packet(
+ INTERNAL_THREADS_MP_SYSTEM_VERIFY
+ );
+ }
+
+ /*
+ * Run the APIs and BSPs postdriver hooks.
+ *
+ * The API extensions are supposed to create user initialization tasks.
+ */
+
+ _API_extensions_Run_postdriver();
+
+ if ( _CPU_Table.postdriver_hook )
+ (*_CPU_Table.postdriver_hook)();
+
return bsp_level;
}