1 #include <arch/x86/gdt.h>
2 #include <arch/x86/tss.h>
7 uint64_t _gdt[GDT_ENTRY];
8 uint16_t _gdt_limit = sizeof(_gdt) - 1;
10 void _set_gdt_entry(uint32_t index, uint32_t base, uint32_t limit, uint32_t flags) {
11 _gdt[index] = SEG_BASE_H(base) | flags | SEG_LIM_H(limit) | SEG_BASE_M(base);
13 _gdt[index] |= SEG_BASE_L(base) | SEG_LIM_L(limit);
16 extern struct x86_tss _tss;
20 _set_gdt_entry(0, 0, 0, 0);
21 _set_gdt_entry(1, 0, 0xfffff, SEG_R0_CODE);
22 _set_gdt_entry(2, 0, 0xfffff, SEG_R0_DATA);
23 _set_gdt_entry(3, 0, 0xfffff, SEG_R3_CODE);
24 _set_gdt_entry(4, 0, 0xfffff, SEG_R3_DATA);
25 _set_gdt_entry(5, &_tss, sizeof(struct x86_tss) - 1, SEG_TSS);