#ifndef _ARCH_X86_64_GDT_H #define _ARCH_X86_64_GDT_H #include #define GDT_KERNEL_CODE 0x08 #define GDT_KERNEL_DATA 0x10 #define GDT_USER_CODE 0x18 #define GDT_USER_DATA 0x20 #define GDT_TSS 0x28 typedef struct { uint16_t limit_low; uint16_t base_low; uint8_t base_middle; uint8_t access; uint8_t granularity; uint8_t base_high; } __attribute__((packed)) gdt_entry_t; typedef struct { uint16_t limit; uint64_t base; } __attribute__((packed)) gdt_ptr_t; typedef struct { uint32_t reserved0; uint64_t rsp0; uint64_t rsp1; uint64_t rsp2; uint64_t reserved1; uint64_t ist1; uint64_t ist2; uint64_t ist3; uint64_t ist4; uint64_t ist5; uint64_t ist6; uint64_t ist7; uint64_t reserved2; uint16_t reserved3; uint16_t iomap_base; } __attribute__((packed)) tss_entry_t; void gdt_init(void); void gdt_set_kernel_stack(uint64_t stack); #endif // _ARCH_X86_64_GDT_H