diff options
| author | Miguel <m.i@gmx.at> | 2018-09-02 00:08:42 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-02 00:08:42 +0200 |
| commit | 8e3411139b27a3421e9ac75c13f14f99f6dd3137 (patch) | |
| tree | cf8b53ab02863117c310bde11ee4683e134cf1b2 /kernel/gdt.c | |
| parent | 0fff2e6dc6fae82da1c7978918a490c25cc36f04 (diff) | |
syscalls
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); } |
