blob: 03f575e5ee54ad8ed613350ba569885f71e9b47a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#ifndef _GDT_H_
#define _GDT_H_
// Structure of a GDT descriptor. There are 2 types of descriptors: segments and TSS.
// Section 3.4.5 of Intel 64 & IA32 architectures software developer's manual describes
// segment descriptors while section 6.2.2 describes TSS descriptors.
typedef struct gdt_entry_st {
uint16_t lim15_0;
uint16_t base15_0;
uint8_t base23_16;
uint8_t type : 4;
uint8_t s : 1;
uint8_t dpl : 2;
uint8_t present : 1;
uint8_t lim19_16 : 4;
uint8_t avl : 1;
uint8_t l : 1;
uint8_t db : 1;
uint8_t granularity : 1;
uint8_t base31_24;
} __attribute__((packed)) gdt_entry_t;
// Structure describing a pointer to the GDT descriptor table.
// This format is required by the lgdt instruction.
typedef struct gdt_ptr_st {
uint16_t limit; // Limit of the table (ie. its size)
uint32_t base; // Address of the first entry
} __attribute__((packed)) gdt_ptr_t;
extern void gdt_init();
extern void gdt_flush(gdt_ptr_t *gdt_ptr);
#endif
|