From fe6ef776a79c19d0950891252da4343a6eeb9c1d Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 15 Oct 1996 21:39:27 +0000 Subject: updated to format of 3.6.0 --- c/src/lib/libbsp/i386/i386ex/include/bsp.h | 13 +-- c/src/lib/libbsp/i386/i386ex/startup/bspstart.c | 131 ++++++++++++++++++------ 2 files changed, 102 insertions(+), 42 deletions(-) (limited to 'c/src') diff --git a/c/src/lib/libbsp/i386/i386ex/include/bsp.h b/c/src/lib/libbsp/i386/i386ex/include/bsp.h index 3b8e68ec93..04195a2f4b 100644 --- a/c/src/lib/libbsp/i386/i386ex/include/bsp.h +++ b/c/src/lib/libbsp/i386/i386ex/include/bsp.h @@ -21,6 +21,8 @@ extern "C" { #include #include +#include +#include /* * Define the time limits for RTEMS Test Suite test durations. @@ -88,17 +90,6 @@ extern "C" { #define Is_rx_ready( _status ) ( (_status) & 0x01 ) -/* Timer constants: WE DON'T use THESE */ - -#define IERA 0x106 /* Interrupt Enable Register A */ -#define IMRA 0x112 /* Interrupt Mask Register A */ -#define TACR 0x118 /* Timer A Control Register */ -#define TADR 0x11e /* Timer A Data Register */ - -#define IERB 0x108 /* Interrupt Enable Register B */ -#define TBCR 0x11a /* Timer B Control Register */ -#define TBDR 0x120 /* Timer B Data Register */ - /* Structures */ #ifdef F386_INIT diff --git a/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c b/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c index c6e0947988..5542612dcf 100644 --- a/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c +++ b/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c @@ -20,14 +20,17 @@ * $Id$ */ -#include #include +#include + #include + +#include -#include - -#include +#ifdef PRINTON +extern char inbyte(void); extern void outbyte(char); +#endif /* * The original table from the application and our copy of it with @@ -39,78 +42,145 @@ rtems_configuration_table BSP_Configuration; rtems_cpu_table Cpu_table; +char *rtems_progname; + /* Initialize whatever libc we are using * called from postdriver hook */ - + void bsp_libc_init() { extern int end; rtems_unsigned32 heap_start; - + heap_start = (rtems_unsigned32) &end; if (heap_start & (CPU_ALIGNMENT-1)) heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1); - + RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0); - + + /* + * Init the RTEMS libio facility to provide UNIX-like system + * calls for use by newlib (ie: provide __open, __close, etc) + * Uses malloc() to get area for the iops, so must be after malloc init + */ + + rtems_libio_init(); + /* * Set up for the libc handling. */ - + if (BSP_Configuration.ticks_per_timeslice > 0) libc_init(1); /* reentrant if possible */ else libc_init(0); /* non-reentrant */ +} +/* + * 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) +{ + bsp_libc_init(); + +#ifdef STACK_CHECKER_ON /* * Initialize the stack bounds checker + * We can either turn it on here or from the app. */ - -#ifdef STACK_CHECKER_ON + Stack_check_Initialize(); #endif + +#ifdef RTEMS_DEBUG + rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); +#endif +} + +/* + * After drivers are setup, register some "filenames" + * and open stdin, stdout, stderr files + * + * Newlib will automatically associate the files with these + * (it hardcodes the numbers) + */ + +void +bsp_postdriver_hook(void) +{ + int stdin_fd, stdout_fd, stderr_fd; + int error_code; + + error_code = 'S' << 24 | 'T' << 16; + + if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1) + rtems_fatal_error_occurred( error_code | 'D' << 8 | '0' ); + + if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1) + rtems_fatal_error_occurred( error_code | 'D' << 8 | '1' ); + + if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1) + rtems_fatal_error_occurred( error_code | 'D' << 8 | '2' ); + + if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2)) + rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' ); } -extern char inbyte(void); -extern void outbyte(char); -int bsp_start( + +int main( int argc, char **argv, char **environp ) { -#ifdef PRINTON +#ifdef PRINTON outbyte('a'); outbyte('b'); outbyte('c'); outbyte ('S'); - #endif + if ((argc > 0) && argv && argv[0]) + rtems_progname = argv[0]; + else + rtems_progname = "RTEMS"; + /* * we do not use the pretasking_hook. */ - Cpu_table.pretasking_hook = NULL; - - Cpu_table.predriver_hook = bsp_libc_init; /* RTEMS resources available */ - - Cpu_table.postdriver_hook = NULL; /* Call our main() for constructors */ - + Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */ + + Cpu_table.predriver_hook = NULL; + + Cpu_table.postdriver_hook = bsp_postdriver_hook; + Cpu_table.idle_task = NULL; /* do not override system IDLE task */ - + Cpu_table.do_zero_of_workspace = TRUE; - + Cpu_table.interrupt_table_segment = get_ds(); - + Cpu_table.interrupt_table_offset = (void *)Interrupt_descriptor_table; - + Cpu_table.interrupt_stack_size = 4096; - - Cpu_table.extra_system_initialization_stack = 0; + + Cpu_table.extra_mpci_receive_server_stack = 0; /* * Copy the table @@ -121,7 +191,6 @@ int bsp_start( BSP_Configuration.work_space_start = (void *) RAM_END - BSP_Configuration.work_space_size; - #ifdef SPRINTON sprintf( x_buffer, "ram end : %u, work_space_size: %d\n", @@ -135,7 +204,7 @@ int bsp_start( * Add 1 region for Malloc in libc_low */ - BSP_Configuration.maximum_regions++; + BSP_Configuration.RTEMS_api_configuration->maximum_regions++; /* * Add 1 extension for newlib libc @@ -155,6 +224,6 @@ int bsp_start( rtems_initialize_executive( &BSP_Configuration, &Cpu_table ); /* does not return */ - /* no cleanup necessary for Force CPU-386 */ + /* no cleanup necessary for i386ex */ for (;;); /* was return 0 to go to the debug monitor */ } -- cgit v1.2.3