#ifndef _JOVE_x86_64_HAL_GDT_H #define _JOVE_x86_64_HAL_GDT_H 1 #include #include #include "jove.h" enum { GDT_KERNEL_NULL = 0, GDT_KERNEL_CODE, GDT_KERNEL_DATA, GDT_USER_NULL, GDT_USER_DATA, GDT_USER_CODE, GDT_TSS_LO, GDT_TSS_HI }; #define GDT_OFFSET(i) (i << 3) struct gdt_entry { uint16_t limit_0_15; uint16_t base_0_15; uint8_t base_16_23; uint8_t type_flg; uint8_t limit_flg; uint8_t base_24_31; }; struct tss { uint32_t rsv0; uint64_t rsp[3]; uint64_t rsv1; uint64_t ist[7]; uint64_t rsv2; uint16_t rsv3; uint16_t iopb; } PACKED; struct gdt_descriptor { uint16_t limit; uint64_t base; } PACKED; #endif