diff options
Diffstat (limited to 'kernel/gdt.c')
| -rw-r--r-- | kernel/gdt.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/kernel/gdt.c b/kernel/gdt.c index 4df089f..562fbd5 100644 --- a/kernel/gdt.c +++ b/kernel/gdt.c @@ -1,14 +1,28 @@ -#include "kernel/kernel.h" // http://wiki.osdev.org/GDT_Tutorial +#include "kernel/kernel.h" +#include "kernel/gdt.h" #include "usermode.h" #include <stdint.h> + #define GDT_SIZE 6 +static uint8_t gdt_struct[GDT_SIZE*8]; // GLOBAL DESCRIPTOR TABLE +uint64_t gdt_descriptor; -extern sys_tss; -static uint8_t gdt_struct[GDT_SIZE*8]; +//https://wiki.osdev.org/Task_State_Segment +tss_struct sys_tss; //Define the TSS as a global structure +void install_tss(uint32_t esp0){ + + // now fill each value + // set values necessary + sys_tss.ss0 = 0x10; //kernel data + sys_tss.esp0 = esp0; + + // now set the IO bitmap (not necessary, so set above limit) + // sys_tss.iomap = ( unsigned short ) sizeof( tss_struct ); +} typedef struct GDT_struct { uint32_t base; @@ -130,7 +144,7 @@ void gdt_init() encodeGdtEntry(&gdt_struct[8*i],myGDT[i]); // update tss entry - install_tss(); + install_tss(0); - setup_gdt(&gdt_struct[0],8*GDT_SIZE); + asm_setup_gdt(&gdt_struct[0],8*GDT_SIZE); } |
