forked from Imagelibrary/rtems
* shared/startup/pretaskinghook.c: Add capability for bootcard.c BSP Initialization Framework to ask the BSP where it has memory for the RTEMS Workspace and C Program Heap. These collectively are referred to as work area. If the BSP supports this, then it does not have to include code to split the available memory between the two areas. This reduces the amount of code in the BSP specific bspstart.c file. Additionally, the shared framework can initialize the C Library, call rtems_debug_enable(), and dirty the work area memory. Until most/all BSPs support this new capability, if the BSP supports this, it should call RTEMS_BSP_BOOTCARD_HANDLES_RAM_ALLOCATION from its configure.ac. When the transition is complete, this autoconf macro can be removed.
97 lines
2.5 KiB
C
97 lines
2.5 KiB
C
/*
|
|
* bsp_pretasking_hook().
|
|
* Initializes the heap, libc and VME.
|
|
*
|
|
* COPYRIGHT (c) 1989-1998.
|
|
* On-Line Applications Research Corporation (OAR).
|
|
*
|
|
* The license and distribution terms for this file may be
|
|
* found in the file LICENSE in this distribution or at
|
|
* http://www.rtems.com/license/LICENSE.
|
|
*
|
|
* Modified to support the MCP750.
|
|
* Modifications Copyright (C) 1999 Eric Valette. valette@crf.canon.fr
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include <string.h>
|
|
|
|
#include <bsp.h>
|
|
#ifndef BSP_HAS_NO_VME
|
|
#include <bsp/VME.h>
|
|
#endif
|
|
|
|
#ifdef SHOW_MORE_INIT_SETTINGS
|
|
#include <rtems/bspIo.h>
|
|
#endif
|
|
|
|
#include <rtems/malloc.h>
|
|
|
|
void bsp_libc_init( void *, uint32_t, int );
|
|
|
|
/*
|
|
* Function: bsp_pretasking_hook
|
|
* Created: 95/03/10
|
|
*
|
|
* Description:
|
|
* BSP pretasking hook. Called just before drivers are initialized.
|
|
* Used to setup libc and install any BSP extensions.
|
|
*
|
|
* NOTES:
|
|
* Must not use libc (to do io) from here, since drivers are
|
|
* not yet initialized.
|
|
*
|
|
*/
|
|
|
|
void bsp_pretasking_hook(void)
|
|
{
|
|
uint32_t heap_size;
|
|
uint32_t heap_sbrk_spared;
|
|
extern uint32_t _bsp_sbrk_init(uint32_t, uint32_t*);
|
|
extern void BSP_vme_config();
|
|
|
|
/* make sure it's properly aligned */
|
|
BSP_heap_start = (BSP_heap_start + CPU_ALIGNMENT - 1) & ~(CPU_ALIGNMENT-1);
|
|
|
|
heap_size = (BSP_mem_size - BSP_heap_start) - rtems_configuration_get_work_space_size();
|
|
heap_sbrk_spared=_bsp_sbrk_init(BSP_heap_start, &heap_size);
|
|
|
|
#ifdef SHOW_MORE_INIT_SETTINGS
|
|
printk( "HEAP start %x size %x (%x bytes spared for sbrk)\n",
|
|
BSP_heap_start, heap_size, heap_sbrk_spared);
|
|
#endif
|
|
|
|
/* Must install sbrk helpers since we rely on sbrk for giving
|
|
* us even the first chunk of memory (bsp_libc_init(heap start==NULL))
|
|
*/
|
|
|
|
rtems_malloc_sbrk_helpers = &rtems_malloc_sbrk_helpers_table;
|
|
|
|
bsp_libc_init((void *) 0, heap_size, heap_sbrk_spared);
|
|
|
|
/* Note that VME support may be omitted also by
|
|
* providing a NULL BSP_vme_config routine
|
|
* (e.g., linker script)
|
|
*/
|
|
#ifndef BSP_HAS_NO_VME
|
|
/*
|
|
* Initialize VME bridge - needs working PCI
|
|
* and IRQ subsystems...
|
|
*
|
|
* NOTE: vmeUniverse driver now uses shared interrupts.
|
|
* this requires malloc/free which are not available
|
|
* from bspstart()...
|
|
*/
|
|
#ifdef SHOW_MORE_INIT_SETTINGS
|
|
printk("Going to initialize VME bridge\n");
|
|
#endif
|
|
if ( BSP_vme_config )
|
|
BSP_vme_config();
|
|
#endif
|
|
|
|
#ifdef SHOW_MORE_INIT_SETTINGS
|
|
printk("Leaving bsp_pretasking_hook\n");
|
|
#endif
|
|
}
|