diff options
author | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-17 14:16:55 -0400 |
---|---|---|
committer | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-17 14:16:55 -0400 |
commit | 7ee9347560768641096df68c545ac085a20233e4 (patch) | |
tree | 5b567f2e98cd9e6aeee33eeecd7fbf6f2fafdeab /include/arch/x86_64/tables.h | |
parent | f466364b8a3858e7b3f19258d142851cb4a7e6d6 (diff) | |
download | jove-kernel-7ee9347560768641096df68c545ac085a20233e4.tar.gz jove-kernel-7ee9347560768641096df68c545ac085a20233e4.tar.bz2 jove-kernel-7ee9347560768641096df68c545ac085a20233e4.zip |
working usermode pager. fix usermode interrupts
Diffstat (limited to 'include/arch/x86_64/tables.h')
-rw-r--r-- | include/arch/x86_64/tables.h | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/include/arch/x86_64/tables.h b/include/arch/x86_64/tables.h index 42651a1..b35dd43 100644 --- a/include/arch/x86_64/tables.h +++ b/include/arch/x86_64/tables.h @@ -9,40 +9,44 @@ #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 +#define GDT_SEGMENT_TYPE_LDT 2 +#define GDT_SEGMENT_TYPE_TSS_AVAIL 0b1001 +#define GDT_SEGMENT_TYPE_TSS_BUSY 11 + +#define GDT_SEGMENT_FLAG_S (1 << 4) +#define GDT_SEGMENT_FLAG_DPL(l) (l << 5) +#define GDT_SEGMENT_FLAG_P (1 << 7) + +#define GDT_SEGMENT_AVLX_AVL (1 << 4) +#define GDT_SEGMENT_AVLX_L (1 << 5) +#define GDT_SEGMENT_AVLX_DB (1 << 6) +#define GDT_SEGMENT_AVLX_G (1 << 7) typedef struct jove_SegmentDescriptor { 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 type_flags; + uint8_t limit_16_19_avlx; uint8_t base_24_31; }__attribute__((packed)) segment_descriptor_t; +#define IDT_IST(v) (v & 7) + +#define IDT_TYPE_CALLGATE 12 +#define IDT_TYPE_INT_GATE 0b1110 +#define IDT_TYPE_TRAP_GATE 0b1111 + +#define IDT_FLAG_DPL(l) (l << 5) +#define IDT_FLAG_P (1 << 7) + typedef struct jove_InterruptGate { 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 cs; + uint8_t ist; + uint8_t type_flags; uint16_t base_16_31; uint32_t base_32_63; uint32_t resv; |