XenevaOS
Loading...
Searching...
No Matches
x86_64_gdt.h
Go to the documentation of this file.
1
30#ifndef __X86_64_GDT_H__
31#define __X86_64_GDT_H__
32
33#include <stdint.h>
34
35#define GDT_ENTRY_NULL 0
36#define GDT_ENTRY_KERNEL_CODE 1
37#define GDT_ENTRY_KERNEL_DATA 2
38#define GDT_ENTRY_USER_CODE32 3
39#define GDT_ENTRY_USER_DATA 4
40#define GDT_ENTRY_USER_CODE 5
41#define GDT_ENTRY_KERNEL_CODE32 6
42#define GDT_ENTRY_TSS 7
43#define GDT_ENTRY_MAX 9 //TSS takes two entries
44
45
46
47#define SEGVAL(gdtent, rpl) \
48 ((gdtent << 3) | rpl)
49
50#define SEGVAL_LDT(ldtent, rpl) \
51 ((ldtent << 3) | 0x4 | rpl)
52
61
62#define GDT_FLAG_GRAN 0x8
63#define GDT_FLAG_32BT 0x4
64#define GDT_FLAG_64BT 0x2
65
66#define GDT_ACCESS_PRESENT 0x80
67#define GDT_ACCESS_PRIVL(x) (x << 5)
68#define GDT_ACCESS_TYPE 0x10
69#define GDT_ACCESS_EX 0x8
70#define GDT_ACCESS_DC 0x4
71#define GDT_ACCESS_RW 0x2
72#define GDT_ACCESS_AC 0x1
73
74#pragma pack(push, 1)
75
84
89
90#pragma pack(pop)
91
92/*
93 * x86_64_hal_init_gdt -- initialize the global descriptor
94 * table
95 */
96extern "C" void x86_64_hal_init_gdt();
97
98/*
99* x86_64_hal_init_gdt_ap -- initialize gdt for Application
100* processors
101*/
102extern void x86_64_hal_init_gdt_ap();
103
104extern void set_gdt_entry(gdt_entry& entry, size_t base, size_t limit, uint8_t access, uint8_t flags);
105
106#endif
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
void(* entry)(void *)
Definition process.h:91
Definition x86_64_gdt.h:76
uint16_t base_low
Definition x86_64_gdt.h:78
uint8_t flags_limit
Definition x86_64_gdt.h:81
uint16_t limit_low
Definition x86_64_gdt.h:77
uint8_t base_high
Definition x86_64_gdt.h:82
uint8_t access
Definition x86_64_gdt.h:80
uint8_t base_mid
Definition x86_64_gdt.h:79
Definition x86_64_gdt.h:85
uint16_t size
Definition x86_64_gdt.h:86
pgdt_entry gdtaddr
Definition x86_64_gdt.h:87
struct _gdt gdt_entry
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
struct _gdtr gdtr
struct _gdtr * pgdtr
void x86_64_hal_init_gdt()
Initialize the Global Descriptor Table.
Definition x86_64_gdt.cpp:107
struct _gdt * pgdt_entry
sregs
Definition x86_64_gdt.h:53
@ SREG_FS
Definition x86_64_gdt.h:57
@ SREG_ES
Definition x86_64_gdt.h:56
@ SREG_CS
Definition x86_64_gdt.h:54
@ SREG_GS
Definition x86_64_gdt.h:58
@ SREG_DS
Definition x86_64_gdt.h:55
@ SREG_SS
Definition x86_64_gdt.h:59