coverity appeasement
[minix.git] / kernel / arch / i386 / trampoline.S
blob92e4635cda67c124506591a7904fc0054381843a
1 #include <machine/asm.h>
2 #include <machine/vm.h>
3 #include "archconst.h"
5 .balign 4096
6 .text
7 .code16
8 ENTRY(trampoline)
9         cli
11         /* %cs has some value and we must use the same for data */
12         mov     %cs, %ax
13         mov     %ax, %ds
15         /* load gdt and idt prepared by bsp */
16         lgdtl   _C_LABEL(__ap_gdt) - _C_LABEL(trampoline)
17         lidtl   _C_LABEL(__ap_idt) - _C_LABEL(trampoline)
19         /* switch to protected mode */
20         mov     %cr0, %eax
21         orb     $1, %al
22         mov     %eax, %cr0
24         /* set page table feature flags: cr4.PSE on, cr4.PGE off */
25         movl    %cr4, %eax
26         orl     $I386_CR4_PSE, %eax     /* Turn on PSE */
27         andl    $~I386_CR4_PGE, %eax    /* Turn off PGE */
28         movl    %eax, %cr4
30         /* load boot cr3 and turn PG on so CPU can see all of memory */
31         movl    _C_LABEL(__ap_pt) - _C_LABEL(trampoline), %eax
32         movl    %eax, %cr3
33         movl    %cr0, %ecx
34         orl     $I386_CR0_PG, %ecx
35         movl    %ecx, %cr0
37         /* turn on cr4.PGE after cr0.PG is on */
38         movl    %cr4, %eax
39         orl     $I386_CR4_PGE, %eax
40         movl    %eax, %cr4
42         /* jump into regular highly mapped kernel */
43         ljmpl   $KERN_CS_SELECTOR, $_C_LABEL(startup_ap_32)
45 .balign 4
46 LABEL(__ap_id)
47 .space 4
48 LABEL(__ap_pt)
49 .space 4
50 LABEL(__ap_gdt)
51 .space 8
52 LABEL(__ap_idt)
53 .space 8
54 LABEL(__ap_gdt_tab)
55 .space GDT_SIZE*DESC_SIZE
56 LABEL(__ap_idt_tab)
57 .space IDT_SIZE*DESC_SIZE
58 LABEL(__trampoline_end)