bringelle/src/utils/gdt.h

45 lines
897 B
C
Raw Normal View History

2021-04-05 14:46:31 +02:00
#ifndef GDT_H
#define GDT_H
#include "types.h"
// Access byte
#define GDT_AC 1 // Access bit
#define GDT_RW 1 << 1 // Read/Write bit
#define GDT_DC 1 << 2 // Direction bit/Conforming bit
#define GDT_EXEC 1 << 3 // Executable bit
#define GDT_S 1 << 4 // Descriptor type
#define GDT_PRVL_0 0 // Privilege (from 0 to 3)
#define GDT_PRVL_1 1 << 5
#define GDT_PRVL_2 2 << 5
#define GDT_PRVL_3 3 << 5
#define GDT_PR 1 << 7 // Present Bit
// Flags
#define GDT_SZ 1 << 2 // Size bit
#define GDT_GR 1 << 3 // Granularity bit
typedef struct GDT_ENTRY {
u32 base;
u32 limit;
u8 flags;
u8 access;
} GDT_ENTRY;
struct GDT_REGISTER {
u16 limit;
u32 base;
} __attribute__((packed));
/**
* Copy GDT in memory
*/
void gdt_memcpy();
/**
* Write a GDT entry at address addr
*/
void gdt_write_entry(GDT_ENTRY entry, u32 addr);
#endif