summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/i386ex/startup
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-21 00:23:02 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-09-21 00:23:02 +0000
commit04bc5d97f10929df9fb0e230334fc92266cea633 (patch)
treec6b1cbda36928536f2103d471f5b9fd8d2198176 /c/src/lib/libbsp/i386/i386ex/startup
parentPatch from Eric Norum: (diff)
downloadrtems-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.c19
-rw-r--r--c/src/lib/libbsp/i386/i386ex/startup/linkcmds117
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
+}