32 #include "gdt-layout.h"
33 #include "prot-domains.h"
34 #include "segmentation.h"
39 tss_t ATTR_BSS_KERN sys_tss;
53 KERN_WRITEW(sys_tss.
iomap_base,
sizeof(sys_tss));
54 KERN_WRITEL(sys_tss.
esp2, ((uint32_t)stacks_int) + STACKS_SIZE_INT);
55 KERN_WRITEL(sys_tss.
ss2, GDT_SEL_STK_INT);
56 KERN_WRITEL(sys_tss.
esp0, ((uint32_t)stacks_exc) + STACKS_SIZE_EXC);
57 KERN_WRITEL(sys_tss.
ss0, GDT_SEL_STK_EXC);
59 segment_desc_init(&seg_desc,
60 KERN_DATA_OFF_TO_PHYS_ADDR(&sys_tss),
sizeof(sys_tss),
61 SEG_FLAG(DPL, PRIV_LVL_EXC) |
62 SEG_DESCTYPE_SYS | SEG_TYPE_TSS32_AVAIL);
63 gdt_insert(GDT_IDX_OF_DESC(&sys_tss_desc), seg_desc);
65 __asm__ __volatile__ (
68 :
"r" ((uint16_t)GDT_SEL_OF_DESC(&sys_tss_desc, 0)));
uint32_t ss0
Stack segment selector for ring 0 code in this task.
uint32_t esp2
Stack pointer for ring 2 code in this task.
uint32_t esp0
Stack pointer for ring 0 code in this task.
uint32_t ss2
Stack segment selector for ring 2 code in this task.
uint16_t iomap_base
Offset from base of TSS to base of IO permission bitmap, if one is installed.