/****************************************************************** * 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 gdt_entry { 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 gdt_ptr { 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 i86_gdt_flush(); extern void i86_gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran); extern struct gdt_entry* i86_gdt_get_gate(int num); extern void i86_gdt_install(); #endif