Fix reversed interrupt vector name
[viridis.git] / asm / gdt.asm
1 .code32
2 .section .text_early, "ax"
3
4 #include <memmap.h>
5 #include <asm/gdt.h>
6
7 .global GDTR_32
8 .global GDTR_64
9
10 .align 8
11 GDTR_32:
12 .word (GDTEND - GDT - 1)
13 .quad GDT               // Pad out this GDTR so we can use
14                         // the 32-bit version from long mode
15                         // in efi_entry
16
17 .align 8
18 GDTR_64:
19 .word (GDTEND - GDT - 1)
20 .quad (GDT + VIRT_BASE)
21
22 .global CODE_SEL_32
23 .global DATA_SEL
24 .global CODE_SEL_64
25
26 .align 8
27 GDT:
28     /* NULL descriptor */
29     GDTENTRY    0, 0x0, 0x0
30     /* Code descriptor (Compat) */
31 .equ CODE_SEL_32, .-GDT
32     GDTENTRY    FLAGS_CODE_32, 0x0, 0xFFFFF
33     /* Data descriptor (Compat) */
34 .equ DATA_SEL, .-GDT
35     GDTENTRY    FLAGS_DATA_32, 0x0, 0xFFFFF
36     /* Code descriptor (Long) */
37 .equ CODE_SEL_64, .-GDT
38     GDTENTRY    FLAGS_CODE_64, 0x0, 0xFFFFF
39 GDTEND:
40
41 .global populate_gdt
42 populate_gdt:
43     lgdt GDTR_32
44     ret
45
46 .code64
47
48 .global populate_gdt64
49 populate_gdt64:
50     lgdt GDTR_32
51     ret
52
53 .global fixup_gdtr
54 fixup_gdtr:
55     mov $(VIRT_BASE + GDTR_64), %rax
56     lgdt (%rax)
57     ret