Cucumber/Kernel/include/Tier0/gdt.h

54 lines
1.1 KiB
C

#ifndef __GDT_H__
#define __GDT_H__
#include "types.h"
typedef enum E_GDT_RING {
GDT_RING0 = 0,
GDT_RING1,
GDT_RING2,
GDT_RING3
} T_GDT_RING;
typedef enum E_GDT_EXECUTABLE {
GDT_NOT_EXECUTABLE = 0,
GDT_EXECUTABLE = 1
} T_GDT_EXECUTABLE;
typedef enum E_GDT_RW {
GDT_NOT_RW = 0,
GDT_RW = 1
} T_GDT_RW;
struct S_GDT_SEGMENT {
u16 LimitLow;
u16 BaseLow;
u8 BaseMiddle;
u8 SegmentType : 4;
u8 DescriptorType : 1;
u8 DPL : 2;
u8 Present : 1;
u8 LimitMiddle : 4;
u8 SystemAvailable : 1;
u8 LongMode : 1;
u8 OperationSize : 1;
u8 Granularity : 1;
u8 BaseHigh;
} __attribute__((packed));
typedef struct S_GDT_SEGMENT T_GDT_SEGMENT;
struct S_GDT_PTR {
u16 Size;
u64 Address;
} __attribute__((packed));
typedef struct S_GDT_PTR T_GDT_PTR;
void gdt_entry_create(u8 Index, u32 Base, u32 Limit, T_GDT_RING DPL, \
T_GDT_EXECUTABLE Executable, T_GDT_RW ReadWrite, u8 Long);
void gdt_create_flat(void);
//From gdt.asm
void gdt_flush(void);
#endif