diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-09-21 00:23:02 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-09-21 00:23:02 +0000 |
commit | 04bc5d97f10929df9fb0e230334fc92266cea633 (patch) | |
tree | c6b1cbda36928536f2103d471f5b9fd8d2198176 /c/src/lib/libbsp/i386/i386ex/startup | |
parent | Patch from Eric Norum: (diff) | |
download | rtems-04bc5d97f10929df9fb0e230334fc92266cea633.tar.bz2 |
Update from Erik Ivanenko <erik.ivanenko@utoronto.ca> to bring the
i386ex bsp up to date.
1) A 'hlt' instruction is coded in case of a return from boot_card in
start.s.
Diffstat (limited to 'c/src/lib/libbsp/i386/i386ex/startup')
-rw-r--r-- | c/src/lib/libbsp/i386/i386ex/startup/bspstart.c | 19 | ||||
-rw-r--r-- | c/src/lib/libbsp/i386/i386ex/startup/linkcmds | 117 |
2 files changed, 42 insertions, 94 deletions
diff --git a/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c b/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c index fc519b430a..7208694304 100644 --- a/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c +++ b/c/src/lib/libbsp/i386/i386ex/startup/bspstart.c @@ -21,6 +21,8 @@ * $Id$ */ +void bsp_clean_up(void); + #include <bsp.h> #include <rtems/libio.h> @@ -79,6 +81,7 @@ void bsp_pretasking_hook(void) heap_size &= 0xfffffff0; /* keep it as a multiple of 16 bytes */ bsp_libc_init((void *) heap_start, heap_size, 0); + #ifdef RTEMS_DEBUG rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); #endif @@ -92,22 +95,27 @@ void bsp_pretasking_hook(void) void bsp_start( void ) { - /* - * we do not use the pretasking_hook. + /* + * we do not use the pretasking_hook. */ Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */ Cpu_table.postdriver_hook = bsp_postdriver_hook; Cpu_table.interrupt_table_segment = get_ds(); Cpu_table.interrupt_table_offset = (void *)Interrupt_descriptor_table; - Cpu_table.interrupt_stack_size = 4096; /* STACK_MINIMUM_SIZE */ + Cpu_table.interrupt_stack_size = 8192; /* changed Sept 14 STACK_MINIMUM_SIZE */ #if defined(RTEMS_POSIX_API) BSP_Configuration.work_space_size *= 3; #endif - BSP_Configuration.work_space_start = (void *) + /* BSP_Configuration.work_space_size += 128 * RTEMS_MINIMUM_STACK_SIZE; */ + + BSP_Configuration.work_space_start = (void *) RAM_END - BSP_Configuration.work_space_size; +#ifdef DEBUG + printk("workspace size = 0x%x\nstart = 0x%x, RAM_END = 0x%x\n",BSP_Configuration.work_space_size, BSP_Configuration.work_space_start, RAM_END ); +#endif /* * Account for the console's resources @@ -119,3 +127,6 @@ void bsp_start( void ) */ rtems_irq_mngt_init(); } +void bsp_clean_up(void) { + printk("bsp_cleanup called\n"); +} diff --git a/c/src/lib/libbsp/i386/i386ex/startup/linkcmds b/c/src/lib/libbsp/i386/i386ex/startup/linkcmds index 24202aa59c..983e3993f5 100644 --- a/c/src/lib/libbsp/i386/i386ex/startup/linkcmds +++ b/c/src/lib/libbsp/i386/i386ex/startup/linkcmds @@ -11,108 +11,43 @@ * http://www.OARcorp.com/rtems/license.html. * * $Id$ + * + * Memory layout: + * + * 0x3f80000 -> 0x3ff0000 : text section + * 0x3ff0000 -> 0x3ff0028 : global descriptor table in ROM + * 0x3ff0028 -> 0x3fff000 : data section ( copied by start.s to RAM ) + * 0x3fff000 -> 0x3fffff0 : initial section ( init 386ex, goto protected mode, copy ROM-RAM ) + * 0x3fffff0 -> 0x4000000 : reset section ( jmp to initial only ) */ - ENTRY(reset) ; SECTIONS { -/******************************************************************************* - * Interrupts section: - * - * This section defines the layout of the interrupts in ROM ( VMA ) as well as their - * location in RAM (LMA). The _rom_ and _ram_ variables are used in start.s - * in order for the code to move the interrupt vector tables from ROM to RAM - * while still running in real-mode. The tables are moved from ROM, as the IDT - * is initialized with only 16-bit offsets for the interrupt handlers. - * This is purely an implementation issue. If you prefer the interrupt handlers - * to be resident in flash, then you must provide the code to create the interrupt - * gates with full 32bit offsets. The code in the current start.s does NOT support - * interrupts in ROM by merely redefining their location. - ******************************************************************************/ - _rom_ints = 0x3ff0000; /* was 0x3fb0000 */ - _rom_ints_segment = 0xF000 ; - _rom_ints_offset = 0x0000 ; - - _ram_ints_segment = 0x0000 ; - _ram_ints_offset = 0x0100 ; - - - .ints _ram_ints_offset : - AT ( _rom_ints ) - { - _sints = .; - *(.ints); - _eints = ALIGN (0x010); - } - - _ints_size = _eints - _sints ; -/************************************************************************************** - * GDT section: - * - * This section defines the locations of the GDT in ROM as well as in RAM. The _rom_ and - * _ram_ variables are used by start.s to copy the GDT from ROM to RAM when still in - * real-mode. The move from ROM to RAM is made as a writeable GDT is required for the - * jump to protected mode to be successful. - **************************************************************************************/ - - _rom_gdt = _rom_ints + _ints_size; - _rom_gdt_segment = 0xF000; - _rom_gdt_offset = _rom_ints_offset + _ints_size; - - _ram_gdt_segment = 0x0000 ; - _ram_gdt_offset = _ram_ints_offset + _ints_size; - - .gdt _ram_gdt_offset : - AT ( _rom_gdt ) - { - _sgdt = .; - *(.gdt); - _egdt = ALIGN (0x10); - } - _gdt_size = _egdt - _sgdt; - -/***************************************************************************************** - * IDT section: - * - * This section defines the locations of the IDT in ROM as well as in RAM. The _rom_ and - * _ram_ variables are used by start.s to copy the IDT from ROM to RAM when still in real-mode. - * The move from ROM to RAM is required to enable RTEMS to hook the interrupts, however, - * this move could be made when in protected mode. - ****************************************************************************************/ - - _rom_idt = _rom_gdt + _gdt_size ; - _rom_idt_segment = 0xF000 ; - _rom_idt_offset = _rom_gdt_offset + _gdt_size ; - - _ram_idt_segment = 0x0000 ; - _ram_idt_offset = _ram_gdt_offset + _gdt_size ; - - .idt _ram_idt_offset : - AT ( _rom_idt ) - { - _sidt = .; - *(.idt); - _eidt = ALIGN (0x10); - } - _idt_size = _eidt - _sidt; - /**************************************************************************************** * data section: * * This section defines the locations of the data section in ROM as well as in RAM. - * start.s copies the data section to RAM when in protected mode. + * start.s copies the data section to RAM in real mode. This is done PRIOR to the lgdt + * instruction since the data section contains the Global_descriptor_table and GDTR. ***********************************************************************************/ - _rom_data_start = _rom_idt + _idt_size ; + _rom_data_start = 0x3ff0000; + + _rom_data_segment = 0xF000; + _rom_data_offset = 0x0; + + _ram_data_segment = 0x0000 ; + _ram_data_offset = 0x0; + _ram_data_location = _ram_data_segment * 16 + _ram_data_offset; .data : - AT ( _rom_data_start ) + AT ( _rom_data_start ) { _sdata = .; *(.data); - _edata = ALIGN( 0x10 ) ; + _edata = .; } _data_start = ADDR(.data) ; data_start = _data_start ; @@ -123,6 +58,7 @@ SECTIONS * * The bss section is the last section in RAM. *************************************************************************************/ + _edata = ALIGN( 0x10 ); .bss : { _bss_start = .; @@ -143,7 +79,7 @@ SECTIONS * the heap used by RTEMS is as large as the RAM remaining after all workspace configurations * are complete. *************************************************************************************/ - stack_size = 0x1000 ; + stack_size = 0x8000 ; stack_origin = end + stack_size ; heap_bottom = stack_origin + 4 ; @@ -186,7 +122,8 @@ SECTIONS * * This section is defined after the data section. It must be in the top 64K of memory * to enable the initial short jmp from the reset section while still in real-mode. It - * contains ALL initialization and data movement directives. + * initializes the i386ex, moves the gdt from ROM to RAM,loads the gdt, + * jumps to protected mode, copies the data section from ROM to RAM and loads the idt. ******************************************************************************************/ .initial _rom_data_start + _data_size : @@ -195,14 +132,14 @@ SECTIONS } /******************************************************************************************* - * reset section: + * board reset section: * * This section contains the short jmp from the reset section to the initial section. It is * the first code executed on reset/power on. ******************************************************************************************/ - .reset 0x3fffff0: + .reset 0x3fffff0: { *(.reset); } -}
\ No newline at end of file +} |