1 /* For starting linuxBIOS in protected mode */
3 #include <arch/rom_segs.h>
5 /* .section ".rom.text" */
11 /* This is the gdt for ROMCC/ASM part of LinuxBIOS.
12 * It is different from the gdt in GCC part of LinuxBIOS
13 * which is defined in c_start.S */
16 .word gdt_end - gdt -1 /* compute the table limit */
17 .long gdt /* we know the offset */
20 /* selgdt 0x08, flat code segment */
22 .byte 0x00, 0x9b, 0xcf, 0x00 /* G=1 and 0x0f, So we get 4Gbytes for limit */
24 /* selgdt 0x10,flat data segment */
26 .byte 0x00, 0x93, 0xcf, 0x00
32 * When we come here we are in protected mode. We expand
33 * the stack and copies the data segment from ROM to the
36 * After that, we call the chipset bootstrap routine that
37 * does what is left of the chipset initialization.
39 * NOTE aligned to 4 so that we are sure that the prefetch
40 * cache will be reloaded.
43 .globl protected_start
47 ljmp $ROM_CODE_SEG, $__protected_start
50 /* Save the BIST value */
53 intel_chip_post_macro(0x10) /* post 10 */
55 movw $ROM_DATA_SEG, %ax
62 /* Restore the BIST value to %eax */