Example #1
0
void rtems_initialize_device_drivers(void)
{
  /*
   *  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 defined(RTEMS_MULTIPROCESSING)
    if ( _System_state_Is_multiprocessing ) {
      _MPCI_Initialization();
      _MPCI_Internal_packets_Send_process_packet(
	MPCI_PACKETS_SYSTEM_VERIFY
      );
    }
  #endif

  /*
   *  Run the APIs and BSPs postdriver hooks.
   *
   *  The API extensions are supposed to create user initialization tasks.
   */
  _API_extensions_Run_postdriver();
}
Example #2
0
File: exinit.c Project: fsmd/RTEMS
void rtems_initialize_device_drivers(void)
{
  /*
   *  Initialize all the device drivers and initialize the MPCI layer.
   *
   *  NOTE:  The MPCI may be build upon a device driver.
   */

  #ifdef RTEMS_DRVMGR_STARTUP
  /* BSPs has already registered their "root bus" driver in the
   * bsp_predriver hook or so.
   *
   * Init Drivers to Level 1, constraints:
   *   - Interrupts and system clock timer does not work.
   *   - malloc() work, however other memory services may not
   *     have been initialized yet.
   *   - initializes most basic stuff
   *
   * Typical setup in Level 1:
   *   - Find most devices in system, do PCI scan and configuration.
   *   - Reset hardware if needed.
   *   - Install IRQ driver
   *   - Install Timer driver
   *   - Install console driver and debug printk()
   *   - Install extra memory.
   */
  _DRV_Manager_init_level(1);
  bsp_driver_level_hook(1);
  #endif

  /* Initialize I/O drivers. 
   *
   * Driver Manager note:
   * All drivers may not be registered yet. Drivers will dynamically
   * be initialized when registered in level 2,3 and 4.
   */
  _IO_Initialize_all_drivers();

  #ifdef RTEMS_DRVMGR_STARTUP
  /* Init Drivers to Level 2, constraints:
   *  - Interrupts can be registered and enabled.
   *  - System Clock is running
   *  - Console may be used.
   *
   * This is typically where drivers are initialized
   * for the first time.
   */
  _DRV_Manager_init_level(2);
  bsp_driver_level_hook(2);

  /* Init Drivers to Level 3 
   * 
   * This is typically where normal drivers are initialized
   * for the second time, they may depend on other drivers
   * API inited in level 2
   */
  _DRV_Manager_init_level(3);
  bsp_driver_level_hook(3);

  /* Init Drivers to Level 4,
   * Init drivers that depend on services initialized in Level 3
   */
  _DRV_Manager_init_level(4);
  bsp_driver_level_hook(4);
  #endif

  #if defined(RTEMS_MULTIPROCESSING)
    if ( _System_state_Is_multiprocessing ) {
      _MPCI_Initialization();
      _MPCI_Internal_packets_Send_process_packet(
	MPCI_PACKETS_SYSTEM_VERIFY
      );
    }
  #endif

  /*
   *  Run the APIs and BSPs postdriver hooks.
   *
   *  The API extensions are supposed to create user initialization tasks.
   */
  _API_extensions_Run_postdriver();
}