IO_MANAGER: early dynamic driver registration

Adds the possibility to register drivers before the IO Manager has
completed the initialization. Sometimes the BSP may want to register
a driver dynamically early in the boot process.
This commit is contained in:
Daniel Hellstrom
2011-11-24 16:54:28 +01:00
parent ab69324746
commit 04cf2c5556
2 changed files with 17 additions and 1 deletions

View File

@@ -21,10 +21,14 @@
#include <rtems/io.h>
int _IO_Manager_drivers_inititalized = 0;
void _IO_Initialize_all_drivers( void )
{
rtems_device_major_number major;
_IO_Manager_drivers_inititalized = 1;
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
(void) rtems_io_initialize( major, 0, NULL );
}

View File

@@ -25,6 +25,8 @@
#include <rtems/rtems/intr.h>
#include <rtems/score/threaddispatch.h>
extern int _IO_Manager_drivers_inititalized;
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
@@ -108,5 +110,15 @@ rtems_status_code rtems_io_register_driver(
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
if ( _IO_Manager_drivers_inititalized ) {
/* Other drivers have already been initialized, we initialize
* the driver directly.
*/
return rtems_io_initialize( major, 0, NULL );
} else {
/* The driver will be initialized together with all other drivers
* in a later stage by _IO_Initialize_all_drivers().
*/
return RTEMS_SUCCESSFUL;
}
}