diff options
Diffstat (limited to 'kernel/gdt.h')
-rw-r--r-- | kernel/gdt.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/kernel/gdt.h b/kernel/gdt.h index e2c5b46..36c37dd 100644 --- a/kernel/gdt.h +++ b/kernel/gdt.h @@ -4,6 +4,45 @@ #include "types.h" typedef struct { + uint32_t link; + + uint32_t esp0; + uint32_t ss0; + + uint32_t esp1; + uint32_t ss1; + + uint32_t esp2; + 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 ldt; + + uint16_t trap; + uint16_t iomap; +} __attribute__((packed)) tss_entry; + +typedef struct { uint16_t limit_low; uint16_t base_low; uint8_t base_mid; @@ -23,6 +62,16 @@ typedef struct { .limit_low = (l & 0xffff), \ .flags = (f | (l >> 8 & 0x0f00))} +#define tss_entry_init(e, s, c, d) { \ + .esp0 = e, \ + .ss0 = s, \ + .cs = c, \ + .ss = d, \ + .ds = d, \ + .es = d, \ + .fs = d, \ + .gs = d} + void gdt_init(); #endif |