summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/include/rtems/init.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-09-22 16:21:12 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-12-11 08:17:16 +0100
commitd0c39838146c6a186ddda3d95dac71c3fa90f11e (patch)
tree1f96df0fd4b6e5ee9658060529b69bea1a46de4a /cpukit/sapi/include/rtems/init.h
parentm32r/configure.ac: Looked for m32rsim to exist and now is gone (diff)
downloadrtems-d0c39838146c6a186ddda3d95dac71c3fa90f11e.tar.bz2
Use linker set for system initialization
Make rtems_initialize_data_structures(), rtems_initialize_before_drivers() and rtems_initialize_device_drivers() static. Rename rtems_initialize_start_multitasking() to rtems_initialize_executive() and call the registered system initialization handlers in this function. Add system initialization API available via #include <rtems/sysinit.h>. Update the documentation accordingly. This is no functional change, only the method to call the existing initialization routines changes. Instead of direct function calls a table of function pointers contained in the new RTEMS system initialization linker set is used. This table looks like this (the actual addresses depend on the target). nm *.exe | grep _Linker | sort 0201a2d0 D _Linker_set__Sysinit_begin 0201a2d0 D _Linker_set__Sysinit_bsp_work_area_initialize 0201a2d4 D _Linker_set__Sysinit_bsp_start 0201a2d8 D _Linker_set__Sysinit_rtems_initialize_data_structures 0201a2dc D _Linker_set__Sysinit_bsp_libc_init 0201a2e0 D _Linker_set__Sysinit_rtems_initialize_before_drivers 0201a2e4 D _Linker_set__Sysinit_bsp_predriver_hook 0201a2e8 D _Linker_set__Sysinit_rtems_initialize_device_drivers 0201a2ec D _Linker_set__Sysinit_bsp_postdriver_hook 0201a2f0 D _Linker_set__Sysinit_end Add test sptests/spsysinit01. Update #2408.
Diffstat (limited to 'cpukit/sapi/include/rtems/init.h')
-rw-r--r--cpukit/sapi/include/rtems/init.h45
1 files changed, 7 insertions, 38 deletions
diff --git a/cpukit/sapi/include/rtems/init.h b/cpukit/sapi/include/rtems/init.h
index ccb6ecd783..b92bf8590e 100644
--- a/cpukit/sapi/include/rtems/init.h
+++ b/cpukit/sapi/include/rtems/init.h
@@ -46,46 +46,16 @@ extern const rtems_multiprocessing_table
#endif
/**
- * @brief RTEMS data structures initialization.
+ * @brief Initializes the system and starts multitasking.
*
- * This routine implements the portion of the RTEMS initializatin process
- * that involves initializing data structures to a state that scheduling
- * can occur in a consistent manner.
- */
-void rtems_initialize_data_structures(void);
-
-/**
- * @brief RTEMS initialization before the device drivers are initialized.
- *
- * This routine implements the portion of RTEMS initialization that
- * is done immediately before device drivers are initialized.
- */
-void rtems_initialize_before_drivers(void);
-
-/**
- * @brief RTEMS initialization that initializes all device drivers.
- *
- * This routine implements the portion of RTEMS initialization that
- * initializes all device drivers.
- */
-void rtems_initialize_device_drivers(void);
-
-/**
- * @brief Starts the multitasking.
- *
- * This directive initiates multitasking and performs a context switch to the
- * first user application task and may enable interrupts as a side-effect of
- * that context switch. The context switch saves the executing context. The
- * application runs now. The directive rtems_shutdown_executive() will return
- * to the saved context. The exit() function will use this directive.
+ * Iterates through the system initialization linker set and invokes the
+ * registered handlers. The final step is to start multitasking.
*
- * After a return to the saved context a fatal system state is reached. The
- * fatal source is RTEMS_FATAL_SOURCE_EXIT with a fatal code set to the value
- * passed to rtems_shutdown_executive().
+ * This directive should be called by boot_card() only.
*
* This directive does not return.
*/
-void rtems_initialize_start_multitasking(void)
+void rtems_initialize_executive(void)
RTEMS_NO_RETURN;
/**
@@ -93,9 +63,8 @@ void rtems_initialize_start_multitasking(void)
*
* This routine implements the rtems_shutdown_executive directive. The
* invocation of this directive results in the RTEMS environment being
- * shutdown and multitasking halted. From the application's perspective,
- * invocation of this directive results in the rtems_initialize_executive
- * directive exitting to the startup code which invoked it.
+ * shutdown and multitasking halted. The system is terminated with a fatal
+ * source of RTEMS_FATAL_SOURCE_EXIT and the specified result code.
*/
void rtems_shutdown_executive(
uint32_t result