summaryrefslogtreecommitdiff
path: root/kernel/gdt.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-02 00:08:42 +0200
committerMiguel <m.i@gmx.at>2018-09-02 00:08:42 +0200
commit8e3411139b27a3421e9ac75c13f14f99f6dd3137 (patch)
treecf8b53ab02863117c310bde11ee4683e134cf1b2 /kernel/gdt.c
parent0fff2e6dc6fae82da1c7978918a490c25cc36f04 (diff)
syscalls
Diffstat (limited to 'kernel/gdt.c')
-rw-r--r--kernel/gdt.c24
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);
}