12#define TSS_LOW 0x28ULL
13#define TSS_HIGH 0x30ULL
41 _tss->ist[0] = _tss->ist[1] = _tss->ist[2] = _tss->ist[3] = 0;
42 _tss->ist[4] = _tss->ist[5] = _tss->ist[6] = 0;
43 _tss->iomap_base =
sizeof(*_tss);
48 entries[10].limit_low = limit;
50 entries[10].base_middle = (
uint8_t) ((
base >> 16) & 0xFF);
51 entries[10].access = 0x89;
52 entries[10].flags = 0x00;
53 entries[10].base_high = (
uint8_t) ((
base >> 24) & 0xFF);
56 *tss_high = (
base >> 32) & 0xFFFFFFFF;
59 _gdt_ptr->limit = (
uint16_t) (
sizeof(gdt_entry_t) * 14 - 1);
63 __asm__
volatile(
"ltr %%ax" : :
"a"((
uint16_t) 0x50));
69 _tss->rsp[0] = stack_top;
79 entry.base_low =
base & 0xFFFF;
80 entry.base_middle = (
base >> 16) & 0xFF;
81 entry.base_high = (
base >> 24) & 0xFF;
82 entry.limit_low = limit;
84 entry.access = access;
90 __asm__
volatile(
"lgdt %0" : :
"memory"(p));
uint8_t ap_stack_top[VOXIA_MAX_CORE][65536]
elf_section_map uintptr_t base
gdt_entry_t gdt_make_entry(uint32_t base, uint16_t limit, uint8_t access, uint8_t flags)
void reloadGDT(int cs, int ds)
void set_tss_stack(uint16_t core, uintptr_t stack_top)
static gdt_each_core_t __gdt_entries[VOXIA_MAX_CORE]
void gdt_flush(gdt_ptr_t p)