diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-03 23:53:53 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-04 16:42:56 +0200 |
| commit | 6e9b3275d75e0cdbae1e8f7e4dda8880bb6346bc (patch) | |
| tree | d6c7daf073f41ec2df196a322e8d1210d8e126a1 /kernel/include/gdt.h | |
| parent | 11ced165e0df11cc3c889eb0cc402467361c421b (diff) | |
gdt & tss
Diffstat (limited to 'kernel/include/gdt.h')
| -rw-r--r-- | kernel/include/gdt.h | 40 |
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 |
