6019c9307d
all kernel headers have been moved from include/mango to include/kernel and include definitions that are only relevant to kernel-space. any definitions that are relevant to both kernel- and user-space (i.e. type definitions, syscall IDs) have been moved to include/mango within libmango.
54 lines
1.0 KiB
C
54 lines
1.0 KiB
C
#ifndef ARCH_GDT_H_
|
|
#define ARCH_GDT_H_
|
|
|
|
#include <arch/tss.h>
|
|
#include <kernel/compiler.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define NR_GDT_ENTRIES 5
|
|
|
|
#define GDT_A_PRESENT (1 << 7)
|
|
#define GDT_A_USER (3 << 5)
|
|
#define GDT_A_CODE (3 << 3)
|
|
#define GDT_A_DATA (8 << 1)
|
|
#define GDT_A_RPLK (1 << 5)
|
|
#define GDT_A_CODEREAD (1 << 1)
|
|
#define GDT_A_DATAWRITE (1 << 1)
|
|
#define GDT_A_GROWUP (1 << 5)
|
|
#define GDT_F_64BIT (0x2F)
|
|
#define GDT_F_32BIT (0x4F)
|
|
#define GDT_F_16BIT (0xF)
|
|
|
|
struct gdt_entry {
|
|
uint16_t ge_limit_low;
|
|
uint16_t ge_base_low;
|
|
uint8_t ge_base_mid;
|
|
uint8_t ge_access;
|
|
uint8_t ge_gran;
|
|
uint8_t ge_base_hi;
|
|
} __packed;
|
|
|
|
struct gdt {
|
|
struct gdt_entry g_entries[NR_GDT_ENTRIES];
|
|
struct tss_gdt_entry g_tss;
|
|
} __packed;
|
|
|
|
struct gdt_ptr {
|
|
uint16_t g_limit;
|
|
uint64_t g_ptr;
|
|
} __packed;
|
|
|
|
extern int gdt_init(struct gdt *gdt, struct gdt_ptr *gdtp);
|
|
extern void gdt_write_tss(struct gdt *gdt, struct tss *tss);
|
|
extern int gdt_load(struct gdt_ptr *gdtp);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|