summaryrefslogtreecommitdiff
path: root/kernel/include/gdt.h
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-09-03 23:53:53 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-09-04 16:42:56 +0200
commit6e9b3275d75e0cdbae1e8f7e4dda8880bb6346bc (patch)
treed6c7daf073f41ec2df196a322e8d1210d8e126a1 /kernel/include/gdt.h
parent11ced165e0df11cc3c889eb0cc402467361c421b (diff)
gdt & tss
Diffstat (limited to 'kernel/include/gdt.h')
-rw-r--r--kernel/include/gdt.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/include/gdt.h b/kernel/include/gdt.h
new file mode 100644
index 0000000..4c84fe9
--- /dev/null
+++ b/kernel/include/gdt.h
@@ -0,0 +1,40 @@
+#ifndef GDT_H
+#define GDT_H
+
+#include <types.h>
+
+struct gdt_seg_entry {
+ uint16_t limit;
+ uint16_t offset1;
+ uint8_t offset2;
+ uint8_t access;
+ uint8_t limitflags;
+ uint8_t offset3;
+} __attribute__((packed));
+typedef struct gdt_seg_entry gdt_seg_entry;
+
+struct gdt_tss_entry {
+ uint16_t limit;
+ uint16_t offset1;
+ uint8_t offset2;
+ uint8_t access;
+ uint8_t limitflags;
+ uint8_t offset3;
+ uint32_t offset4;
+ uint32_t reserved;
+} __attribute__((packed));
+typedef struct gdt_tss_entry gdt_tss_entry;
+
+struct gdt_p {
+ uint16_t size;
+ uint64_t offset;
+} __attribute__((packed));
+typedef struct gdt_p gdt_p;
+
+void add_gdt_entry(uint32_t num, uint32_t offset, uint32_t limit, uint8_t access, uint8_t flags);
+void add_gdt_tss(uint32_t num, uint64_t offset, uint32_t limit, uint8_t access, uint8_t flags);
+void reload_gdt(void);
+void load_gdt(gdt_p* pointer);
+void init_gdt(void);
+
+#endif