[USER] TSS

This commit is contained in:
2016-11-26 13:20:57 +01:00
parent 474914ab1e
commit f63afbb3b1
6 changed files with 42 additions and 19 deletions

View File

@@ -1,4 +1,5 @@
#include <gdt.h>
#include <cpu.h>
#include <stdint.h>
#include <debug.h>
#include <cpu.h>
@@ -10,16 +11,19 @@
void gdt_init()
{
cpu_t *cpu = get_cpu();
cpu->tss.io_mba = sizeof(tss_t);
GDT[0] = 0;
GDT[SEG_KCODE/8] = (uint64_t)(GDT_PRESENT | GDT_CODEDATA | GDT_WRITE | GDT_EXECUTE | GDT_64BIT);
GDT[SEG_KDATA/8] = (GDT_PRESENT | GDT_CODEDATA | GDT_WRITE);
GDT[SEG_UCODE/8] = (GDT_PRESENT | GDT_CODEDATA | GDT_WRITE | GDT_EXECUTE | GDT_64BIT | GDT_RING3);
GDT[SEG_UDATA/8] = (GDT_PRESENT | GDT_CODEDATA | GDT_WRITE | GDT_RING3);
GDT[SEG_TSS/8] = (GDT_PRESENT | GDT_TSS | TSS_BLO((uint64_t)&cpu->tss) | TSS_LIM(sizeof(tss_t)));
GDT[SEG_TSS/8 + 1] = (TSS_BHI((uint64_t)&cpu->tss));
GDTP.len = 5*8-1;
GDTP.len = 7*8-1;
GDTP.addr = (uint64_t)&GDT[0];
load_gdt(&GDTP);
load_tr(SEG_TSS);
}

View File

@@ -1,3 +1,4 @@
#include <mem.h>
.intel_syntax noprefix
#include <gdt.h>
@@ -41,3 +42,8 @@ load_gdt:
.load_gdt:
ret
.global load_tr
load_tr:
mov rax, rdi
ltr ax
ret