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#include <stddef.h>
35
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 //TSS takes two entries
45
46
47
48#define SEGVAL(gdtent, rpl) \
49 ((gdtent << 3) | rpl)
50
51#define SEGVAL_LDT(ldtent, rpl) \
52 ((ldtent << 3) | 0x4 | rpl)
53
62
63#define GDT_FLAG_GRAN 0x8
64#define GDT_FLAG_32BT 0x4
65#define GDT_FLAG_64BT 0x2
66
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
74
75#pragma pack(push, 1)
76
85
90
91#pragma pack(pop)
92
93/*
94 * x86_64_hal_init_gdt -- initialize the global descriptor
95 * table
96 */
97extern "C" void x86_64_hal_init_gdt();
98
99/*
100* x86_64_hal_init_gdt_ap -- initialize gdt for Application
101* processors
102*/
103extern void x86_64_hal_init_gdt_ap();
104
105extern void set_gdt_entry(gdt_entry& entry, size_t base, size_t limit, uint8_t access, uint8_t flags);
106
107#endif
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
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: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