summaryrefslogtreecommitdiff
path: root/src/kernel/mem/gdt.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/mem/gdt.h')
-rw-r--r--src/kernel/mem/gdt.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/kernel/mem/gdt.h b/src/kernel/mem/gdt.h
index aac16bb..485002b 100644
--- a/src/kernel/mem/gdt.h
+++ b/src/kernel/mem/gdt.h
@@ -17,7 +17,38 @@ struct gdt_ptr {
uint32_t base;
} __attribute__((packed));
+struct tss_entry {
+ uint32_t prev_tss; // The previous TSS - if we used hardware task switching this would form a linked list.
+ uint32_t esp0; // The stack pointer to load when we change to kernel mode.
+ uint32_t ss0; // The stack segment to load when we change to kernel mode.
+ uint32_t esp1; // Unused...
+ uint32_t ss1;
+ uint32_t esp2;
+ uint32_t ss2;
+ uint32_t cr3;
+ uint32_t eip;
+ uint32_t eflags;
+ uint32_t eax;
+ uint32_t ecx;
+ uint32_t edx;
+ uint32_t ebx;
+ uint32_t esp;
+ uint32_t ebp;
+ uint32_t esi;
+ uint32_t edi;
+ uint32_t es; // The value to load into ES when we change to kernel mode.
+ uint32_t cs; // The value to load into CS when we change to kernel mode.
+ uint32_t ss; // The value to load into SS when we change to kernel mode.
+ uint32_t ds; // The value to load into DS when we change to kernel mode.
+ uint32_t fs; // The value to load into FS when we change to kernel mode.
+ uint32_t gs; // The value to load into GS when we change to kernel mode.
+ uint32_t ldt; // Unused...
+ uint16_t trap;
+ uint16_t iomap_base;
+} __attribute__((packed));
+
void gdt_init();
+void gdt_setKernelStack(uint32_t esp0);
#endif