diff options
author | Danny Holman <dholman@gymli.org> | 2024-02-16 13:04:01 -0600 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2024-02-16 13:04:01 -0600 |
commit | 95606a6be7c64065d295bdabb1a94fb42108e72f (patch) | |
tree | 6abd59826ec586e80d7546959e97503ceec20c41 /arch/i386/include/kernel | |
parent | c37c25b36ab7a0e244132f1556781e82e006ffa1 (diff) |
arch: i386: move GDT definitions to their own header
Move all the data structures required for operation of the GDT to their
own header file.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/include/kernel')
-rw-r--r-- | arch/i386/include/kernel/gdt.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/arch/i386/include/kernel/gdt.h b/arch/i386/include/kernel/gdt.h new file mode 100644 index 0000000..532881a --- /dev/null +++ b/arch/i386/include/kernel/gdt.h @@ -0,0 +1,55 @@ +#ifndef I386_GDT_H +#define I386_GDT_H + +#include <stdint.h> + +struct gdt_entry { + uint16_t limit_low; + uint16_t base_low; + uint8_t base_middle; + uint8_t access; + uint8_t gran; + uint8_t base_high; +} __attribute__((packed)); + +struct gdt_ptr { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); + +struct tss_entry { + 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; + uint16_t trap; + uint16_t iomap_base; +} __attribute__((packed)); + +void gdt_set_gate(int num, uint32_t base, uint32_t limit, uint8_t access, uint8_t gran); +void write_tss(int num, uint32_t ss0, uint32_t esp0); +void set_kernel_esp(uint32_t esp); +void gdt_install(void); + +void flush_gdt(void); + +#endif |