/****************************************************************** * gdt.h - GLOBAL DESCRIPTOR TABLE * * Contains structures and function declarations for GDT * ******************************************************************/ #ifndef __GDT_H #define __GDT_H /* Defines a GDT entry. We say packed, because it prevents the * compiler from doing things that it thinks is best: Prevent * compiler "optimization" by packing */ struct GdtEntry { unsigned short limit_low; unsigned short base_low; unsigned char base_middle; unsigned char access; unsigned char granularity; unsigned char base_high; } __attribute__((packed)); /* Special pointer which includes the limit: The max bytes * taken up by the GDT, minus 1. Again, this NEEDS to be packed */ struct GdtPointer { unsigned short limit; unsigned int base; } __attribute__((packed)); /* This will be a function in start.asm. We use this to properly * reload the new segment registers */ extern void GdtInstall(); extern void GdtFlush(); extern void GdtSetGate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran); extern struct GdtEntry* GdtGetGate(int num); #endif