tell people that the segment descriptors are different for ROMCC and

GCC code.


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1740 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Li-Ta Lo 2004-11-04 18:36:06 +00:00
parent 1995f1af35
commit f84926efca
4 changed files with 33 additions and 29 deletions

View File

@ -247,43 +247,44 @@ gdtaddr:
.long gdt /* we know the offset */ .long gdt /* we know the offset */
.data .data
/* This is the gdt for GCC part of LinuxBIOS.
* It is different from the gdt in ROMCC/ASM part of LinuxBIOS
* which is defined in entry32.inc */
gdt: gdt:
// selgdt 0 /* selgdt 0, unused */
.word 0x0000, 0x0000 /* dummy */ .word 0x0000, 0x0000 /* dummy */
.byte 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00
// selgdt 8 /* selgdt 8, unused */
.word 0x0000, 0x0000 /* dummy */ .word 0x0000, 0x0000 /* dummy */
.byte 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00
// selgdt 0x10 /* selgdt 0x10, flat code segment */
/* flat code segment */
.word 0xffff, 0x0000 .word 0xffff, 0x0000
.byte 0x00, 0x9b, 0xcf, 0x00 .byte 0x00, 0x9b, 0xcf, 0x00
//selgdt 0x18 /* selgdt 0x18, flat data segment */
/* flat data segment */
.word 0xffff, 0x0000 .word 0xffff, 0x0000
.byte 0x00, 0x93, 0xcf, 0x00 .byte 0x00, 0x93, 0xcf, 0x00
//selgdt 0x20 /* selgdt 0x20, unused */
.word 0x0000, 0x0000 /* dummy */ .word 0x0000, 0x0000 /* dummy */
.byte 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00
#if defined(CONFIG_LEGACY_VGABIOS) && (CONFIG_LEGACY_VGABIOS == 1) #if defined(CONFIG_LEGACY_VGABIOS) && (CONFIG_LEGACY_VGABIOS == 1)
// from monty: /* from monty:
/* 0x00009a00,0000ffffULL, 20h: 16-bit 64k code at 0x00000000 */ * 0x00009a00,0000ffffULL, 20h: 16-bit 64k code at 0x00000000
/* 0x00009200,0000ffffULL 28h: 16-bit 64k data at 0x00000000 */ * 0x00009200,0000ffffULL 28h: 16-bit 64k data at 0x00000000 */
// selgdt 0x28
/*16-bit 64k code at 0x00000000 */
.word 0xffff, 0x0000
.byte 0, 0x9a, 0, 0
// selgdt 0x30 /* selgdt 0x28, 16-bit 64k code at 0x00000000 */
/*16-bit 64k data at 0x00000000 */ .word 0xffff, 0x0000
.byte 0x00, 0x9a, 0x00, 0x00
/* selgdt 0x30, 16-bit 64k data at 0x00000000 */
.word 0xffff, 0x0000 .word 0xffff, 0x0000
.byte 0, 0x92, 0, 0 .byte 0, 0x92, 0, 0
#endif // defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1) #endif /* defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1) */
gdt_end: gdt_end:
idtarg: idtarg:

View File

@ -108,10 +108,10 @@ _start:
/* Now that we are in protected mode jump to a 32 bit code segment. */ /* Now that we are in protected mode jump to a 32 bit code segment. */
data32 ljmp $ROM_CODE_SEG, $__protected_start data32 ljmp $ROM_CODE_SEG, $__protected_start
/** The gdt has a 4 Gb code segment at 0x10, and a 4 GB data segment /**
* at 0x18; these are Linux-compatible. * The gdt is defined in entry32.inc, it has a 4 Gb code segment
* at 0x08, and a 4 GB data segment at 0x10;
*/ */
.align 4 .align 4
.globl gdtptr16 .globl gdtptr16
gdtptr16: gdtptr16:

View File

@ -8,17 +8,20 @@
.align 4 .align 4
.globl gdtptr .globl gdtptr
/* This is the gdt for ROMCC/ASM part of LinuxBIOS.
* It is different from the gdt in GCC part of LinuxBIOS
* which is defined in c_start.S */
gdt: gdt:
gdtptr: gdtptr:
.word gdt_end - gdt -1 /* compute the table limit */ .word gdt_end - gdt -1 /* compute the table limit */
.long gdt /* we know the offset */ .long gdt /* we know the offset */
.word 0 .word 0
/* flat code segment */ /* selgdt 0x08, flat code segment */
.word 0xffff, 0x0000 .word 0xffff, 0x0000
.byte 0x00, 0x9b, 0xcf, 0x00 .byte 0x00, 0x9b, 0xcf, 0x00
/* flat data segment */ /* selgdt 0x10,flat data segment */
.word 0xffff, 0x0000 .word 0xffff, 0x0000
.byte 0x00, 0x93, 0xcf, 0x00 .byte 0x00, 0x93, 0xcf, 0x00