Files
frostbyte/src/tss.c
T

39 lines
691 B
C

#include "tss.h"
#include "gdt.h"
#include "string.h"
typedef struct Tss {
uint32 reserved0;
uint64 rsp0;
uint64 rsp1;
uint64 rsp2;
uint64 reserved1;
uint64 ist1;
uint64 ist2;
uint64 ist3;
uint64 ist4;
uint64 ist5;
uint64 ist6;
uint64 ist7;
uint64 reserved2;
uint16 reserved3;
uint16 iomapBase;
} __attribute__((packed)) Tss;
static Tss tss;
void tssInit(uint64 rsp0)
{
memset(&tss, 0, sizeof(tss));
tss.rsp0 = rsp0;
tss.iomapBase = sizeof(Tss);
gdtInstallTss((uint64)&tss, sizeof(Tss) - 1);
__asm__ volatile("ltr %w0" : : "r"((uint16)tssSelector));
}
void tssSetRsp0(uint64 rsp0)
{
tss.rsp0 = rsp0;
}