summaryrefslogtreecommitdiffstats
path: root/include/arch/x86_64/tables.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/arch/x86_64/tables.h')
-rw-r--r--include/arch/x86_64/tables.h48
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;