2 #include <lunaix/types.h>
3 #include <sys/x86_isa.h>
8 u16_t _gdt_limit = sizeof(_gdt) - 1;
11 _set_gdt_entry(u32_t index, u32_t base, u32_t limit, u32_t flags)
14 SEG_BASE_H(base) | flags | SEG_LIM_H(limit) | SEG_BASE_M(base);
16 _gdt[index] |= SEG_BASE_L(base) | SEG_LIM_L(limit);
19 extern struct x86_tss _tss;
24 _set_gdt_entry(0, 0, 0, 0);
25 _set_gdt_entry(1, 0, 0xfffff, SEG_R0_CODE);
26 _set_gdt_entry(2, 0, 0xfffff, SEG_R0_DATA);
27 _set_gdt_entry(3, 0, 0xfffff, SEG_R3_CODE);
28 _set_gdt_entry(4, 0, 0xfffff, SEG_R3_DATA);
29 _set_gdt_entry(5, (u32_t)&_tss, sizeof(struct x86_tss) - 1, SEG_TSS);