From 6e9b3275d75e0cdbae1e8f7e4dda8880bb6346bc Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sat, 3 Sep 2022 23:53:53 +0200 Subject: gdt & tss --- kernel/include/gdt.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 kernel/include/gdt.h (limited to 'kernel/include/gdt.h') 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 + +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 -- cgit v1.2.3