summaryrefslogtreecommitdiff
path: root/arch/i386/boot/tss.h
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2022-01-15 16:20:52 -0600
committerDanny Holman <dholman@gymli.org>2022-01-15 16:22:58 -0600
commitacc73186bc3de78ceb0a54cbf2605dff1b9a6d62 (patch)
tree0b2b930e1e9ad4f96d6b91ff7400a14f7d0335c6 /arch/i386/boot/tss.h
parent5db084e3b478be1c9aa9caeeea94b949264aa853 (diff)
arch: i386: simplifiy GDT setup
Simplify the setup and definitions of GDT/TSS entries. Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/boot/tss.h')
-rw-r--r--arch/i386/boot/tss.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/i386/boot/tss.h b/arch/i386/boot/tss.h
new file mode 100644
index 0000000..28bae6e
--- /dev/null
+++ b/arch/i386/boot/tss.h
@@ -0,0 +1,39 @@
+#ifndef I386_TSS_H
+#define I386_TSS_H
+
+#include <stdint.h>
+
+struct tss {
+ uint32_t link;
+ uint32_t esp0;
+ uint32_t ss0;
+ uint32_t esp1;
+ 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;
+ uint32_t cs;
+ uint32_t ss;
+ uint32_t ds;
+ uint32_t fs;
+ uint32_t gs;
+ uint32_t ldtr;
+ uint32_t io_offset;
+}__attribute__((packed));
+
+void flush_tss(void);
+
+uint64_t create_gdt_entry(uint32_t base, uint32_t limit, uint16_t flag);
+uint64_t create_tss_entry(uint16_t ss0, uint32_t esp0);
+void set_kernel_stack(uint32_t stack);
+
+#endif