30#ifndef __X86_64_GDT_H__
31#define __X86_64_GDT_H__
36#define GDT_ENTRY_NULL 0
37#define GDT_ENTRY_KERNEL_CODE 1
38#define GDT_ENTRY_KERNEL_DATA 2
39#define GDT_ENTRY_USER_CODE32 3
40#define GDT_ENTRY_USER_DATA 4
41#define GDT_ENTRY_USER_CODE 5
42#define GDT_ENTRY_KERNEL_CODE32 6
43#define GDT_ENTRY_TSS 7
44#define GDT_ENTRY_MAX 9
48#define SEGVAL(gdtent, rpl) \
51#define SEGVAL_LDT(ldtent, rpl) \
52 ((ldtent << 3) | 0x4 | rpl)
63#define GDT_FLAG_GRAN 0x8
64#define GDT_FLAG_32BT 0x4
65#define GDT_FLAG_64BT 0x2
67#define GDT_ACCESS_PRESENT 0x80
68#define GDT_ACCESS_PRIVL(x) (x << 5)
69#define GDT_ACCESS_TYPE 0x10
70#define GDT_ACCESS_EX 0x8
71#define GDT_ACCESS_DC 0x4
72#define GDT_ACCESS_RW 0x2
73#define GDT_ACCESS_AC 0x1
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
void(* entry)(void *)
Definition process.h:98
Definition x86_64_gdt.h:77
uint16_t base_low
Definition x86_64_gdt.h:79
uint8_t flags_limit
Definition x86_64_gdt.h:82
uint16_t limit_low
Definition x86_64_gdt.h:78
uint8_t base_high
Definition x86_64_gdt.h:83
uint8_t access
Definition x86_64_gdt.h:81
uint8_t base_mid
Definition x86_64_gdt.h:80
Definition x86_64_gdt.h:86
uint16_t size
Definition x86_64_gdt.h:87
pgdt_entry gdtaddr
Definition x86_64_gdt.h:88
void set_gdt_entry(gdt_entry &entry, size_t base, size_t limit, uint8_t access, uint8_t flags)
Definition x86_64_gdt.cpp:55
void x86_64_hal_init_gdt_ap()
Definition x86_64_gdt.cpp:121
void x86_64_hal_init_gdt()
Initialize the Global Descriptor Table.
Definition x86_64_gdt.cpp:107
sregs
Definition x86_64_gdt.h:54
@ SREG_FS
Definition x86_64_gdt.h:58
@ SREG_ES
Definition x86_64_gdt.h:57
@ SREG_CS
Definition x86_64_gdt.h:55
@ SREG_GS
Definition x86_64_gdt.h:59
@ SREG_DS
Definition x86_64_gdt.h:56
@ SREG_SS
Definition x86_64_gdt.h:60