| |
| /* Segment indexes. Must match the gdt definition in segment.c. */ |
| enum { |
| NULL_SEG, |
| FLAT_CODE, |
| FLAT_DATA, |
| RELOC_CODE, |
| RELOC_DATA, |
| NUM_SEG, |
| }; |
| |
| /* Values for segment selector register */ |
| #define FLAT_CS (FLAT_CODE << 3) |
| #define FLAT_DS (FLAT_DATA << 3) |
| #define RELOC_CS (RELOC_CODE << 3) |
| #define RELOC_DS (RELOC_DATA << 3) |
| |
| /* i386 segment descriptor */ |
| struct segment_desc { |
| unsigned short limit_0; |
| unsigned short base_0; |
| unsigned char base_16; |
| unsigned char types; |
| unsigned char flags; |
| unsigned char base_24; |
| }; |
| |
| extern struct segment_desc gdt[NUM_SEG]; |
| |
| #define GDT_LIMIT ((NUM_SEG << 3) - 1) |