mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 07:24:37 +00:00
Updated GDT code
This commit is contained in:
parent
6d15a42e17
commit
8e579133cc
@ -8,12 +8,67 @@
|
||||
namespace GlobalDescriptorTable
|
||||
{
|
||||
static GlobalDescriptorTableEntries GDTEntries = {
|
||||
{.Length = 0x0000, .BaseLow = 0x0000, .BaseMiddle = 0x00, .Access = 0b00000000, .Flags = 0b00000000, .BaseHigh = 0x00}, // null
|
||||
{.Length = 0x0000, .BaseLow = 0x0000, .BaseMiddle = 0x00, .Access = 0b10011010, .Flags = 0b00100000, .BaseHigh = 0x00}, // kernel code
|
||||
{.Length = 0x0000, .BaseLow = 0x0000, .BaseMiddle = 0x00, .Access = 0b10010010, .Flags = 0b00000000, .BaseHigh = 0x00}, // kernel data
|
||||
{.Length = 0x0000, .BaseLow = 0x0000, .BaseMiddle = 0x00, .Access = 0b11111010, .Flags = 0b00100000, .BaseHigh = 0x00}, // user code
|
||||
{.Length = 0x0000, .BaseLow = 0x0000, .BaseMiddle = 0x00, .Access = 0b11110010, .Flags = 0b00000000, .BaseHigh = 0x00}, // user data
|
||||
{.Length = 0, .Low = 0, .Middle = 0, .Flags1 = 0b10001001, .Flags2 = 0b00000000, .High = 0, .Upper32 = 0, .Reserved = 0}}; // tss
|
||||
// null
|
||||
{.Length = 0x0,
|
||||
.BaseLow = 0x0,
|
||||
.BaseMiddle = 0x0,
|
||||
.Access = 0b00000000,
|
||||
.Flags = 0b00000000,
|
||||
.BaseHigh = 0x0},
|
||||
|
||||
// kernel code
|
||||
{.Length = 0x0,
|
||||
.BaseLow = 0x0,
|
||||
.BaseMiddle = 0x0,
|
||||
.Access = RING0 |
|
||||
CODE_READABLE |
|
||||
CODE_SEGMENT |
|
||||
PRESENT,
|
||||
.Flags = _64BITS,
|
||||
.BaseHigh = 0x0},
|
||||
|
||||
// kernel data
|
||||
{.Length = 0x0,
|
||||
.BaseLow = 0x0,
|
||||
.BaseMiddle = 0x0,
|
||||
.Access = RING0 |
|
||||
DATA_WRITEABLE |
|
||||
DATA_SEGMENT |
|
||||
PRESENT,
|
||||
.Flags = 0b00000000,
|
||||
.BaseHigh = 0x0},
|
||||
|
||||
// user code
|
||||
{.Length = 0x0,
|
||||
.BaseLow = 0x0,
|
||||
.BaseMiddle = 0x0,
|
||||
.Access = CODE_READABLE |
|
||||
CODE_SEGMENT |
|
||||
RING3 |
|
||||
PRESENT,
|
||||
.Flags = _64BITS,
|
||||
.BaseHigh = 0x0},
|
||||
|
||||
// user data
|
||||
{.Length = 0x0,
|
||||
.BaseLow = 0x0,
|
||||
.BaseMiddle = 0x0,
|
||||
.Access = DATA_WRITEABLE |
|
||||
DATA_SEGMENT |
|
||||
RING3 |
|
||||
PRESENT,
|
||||
.Flags = 0b00000000,
|
||||
.BaseHigh = 0x0},
|
||||
|
||||
// tss
|
||||
{.Length = 0x0,
|
||||
.Low = 0x0,
|
||||
.Middle = 0x0,
|
||||
.Flags1 = 0b10001001,
|
||||
.Flags2 = 0b00000000,
|
||||
.High = 0x0,
|
||||
.Upper32 = 0x0,
|
||||
.Reserved = 0x0}};
|
||||
|
||||
GlobalDescriptorTableDescriptor gdt = {.Length = sizeof(GlobalDescriptorTableEntries) - 1, .Entries = &GDTEntries};
|
||||
|
||||
|
@ -5,6 +5,40 @@
|
||||
|
||||
namespace GlobalDescriptorTable
|
||||
{
|
||||
/* https://github.com/nanobyte-dev/nanobyte_os/blob/master/src/kernel/arch/i686/gdt.c */
|
||||
/* https://wiki.osdev.org/Global_Descriptor_Table */
|
||||
typedef enum
|
||||
{
|
||||
CODE_READABLE = 0b00000010,
|
||||
DATA_WRITEABLE = 0b00000010,
|
||||
|
||||
CODE_CONFORMING = 0b00000100,
|
||||
DATA_DIRECTION_NORMAL = 0b00000000,
|
||||
DATA_DIRECTION_DOWN = 0b00000100,
|
||||
|
||||
DATA_SEGMENT = 0b00010000,
|
||||
CODE_SEGMENT = 0b00011000,
|
||||
|
||||
DESCRIPTOR_TSS = 0b00000000,
|
||||
|
||||
RING0 = 0b00000000,
|
||||
RING1 = 0b00100000,
|
||||
RING2 = 0b01000000,
|
||||
RING3 = 0b01100000,
|
||||
|
||||
PRESENT = 0b10000000
|
||||
} AccessFlags;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
_64BITS = 0b00100000,
|
||||
_32BITS = 0b01000000,
|
||||
_16BITS = 0b00000000,
|
||||
|
||||
GRANULARITY_1B = 0b00000000,
|
||||
GRANULARITY_4K = 0b10000000
|
||||
} GDTFlags;
|
||||
|
||||
typedef struct _TaskStateSegmentEntry
|
||||
{
|
||||
uint16_t Length;
|
||||
|
Loading…
x
Reference in New Issue
Block a user