30 lines
644 B
C
30 lines
644 B
C
|
|
/* 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)
|