#ifndef _JOVE_X86_64_TABLES_H #define _JOVE_X86_64_TABLES_H 1 #include #define CD_SEGMENT_TYPE_ACCESSED 1 #define CD_SEGMENT_TYPE_WRITEABLE 2 #define CD_SEGMENT_TYPE_DATA_EXPAND_DOWN 4 #define CD_SEGMENT_TYPE_CODE_CONFORMING 4 #define CD_SEGMENT_TYPE_CODE 8 #define S_SEGMENT_TYPE_LDT 2 #define S_SEGMENT_TYPE_TSS_AVAIL 9 #define S_SEGMENT_TYPE_TSS_BUSY 11 #define S_SEGMENT_TYPE_CALLGATE 12 #define S_SEGMENT_TYPE_INT_GATE 14 #define S_SEGMENT_TYPE_TRAP_GATE 15 typedef struct segment_descriptor { uint16_t limit_0_15; /* Segment limit. */ uint16_t base_0_15; /* Segment base. */ uint8_t base_16_23; uint8_t type : 4; /* Segment type. */ uint8_t s : 1; /* Descriptor type (0 = system, 1 = code/data)*/ uint8_t dpl : 2; /* Descriptor privilege level. */ uint8_t p : 1; /* Present. */ uint8_t limit_16_19 : 4; uint8_t avl : 1; /* Available for use by system software. */ uint8_t l : 1; /* 64-bit segment (Ext). */ uint8_t d_b : 1; /* Default operation size (0 = 16-bit, 1 = 32-bit)*/ uint8_t g : 1; /* Granularity. */ uint8_t base_24_31; }__attribute__((packed)) segment_descriptor_t; typedef struct interrupt_gate { uint16_t base_0_15; uint16_t segment_selector; uint8_t ist : 3; uint8_t zero_0 : 5; uint8_t type : 4; uint8_t zero_1 : 1; uint8_t dpl : 2; uint8_t p : 1; uint16_t base_16_31; uint32_t base_32_63; uint32_t resv; }__attribute__((packed)) interrupt_gate_t; struct XDTR /* Generic table descriptor struct */ { uint16_t length; uint64_t address; }__attribute__((packed)); #endif