UnnamedOS
gdt.h
Go to the documentation of this file.
1 
7 #ifndef MEM_GDT_H
8 #define MEM_GDT_H
9 
10 #include <stdint.h>
11 
12 #define GDT_ENTRIES 6
13 #define GDT_RING0_CODE_SEG 1
14 #define GDT_RING0_DATA_SEG 2
15 #define GDT_RING3_CODE_SEG 3
16 #define GDT_RING3_DATA_SEG 4
17 #define GDT_TASK_STATE_SEG 5
18 
19 
20 typedef struct {
21  uint16_t limit0_15 : 16;
22  uint32_t base0_23 : 24;
23  uint8_t ac : 1;
24  uint8_t rw : 1;
25  uint8_t dc : 1;
26  uint8_t ex : 1;
27  uint8_t dt : 1;
28  uint8_t dpl : 2;
30  uint8_t pr : 1;
31  uint8_t limit16_19 : 4;
32  uint8_t reserved : 2;
33  uint8_t sz : 1;
34  uint8_t gr : 1;
35  uint8_t base24_31 : 8;
36 } __attribute__((packed)) gdt_entry_t;
37 
38 void gdt_init_entry(size_t entry, uint32_t base, uint32_t limit);
39 void gdt_init();
40 uint16_t gdt_get_selector(size_t entry);
41 
42 #endif
43 
void gdt_init()
Initializes the GDT.
Definition: gdt.c:72
An entry in the GDT.
Definition: gdt.h:20
uint16_t gdt_get_selector(size_t entry)
Returns a selector ready to be loaded in a segment register.
Definition: gdt.c:103
void gdt_init_entry(size_t entry, uint32_t base, uint32_t limit)
Sets basic parameters of a GDT entry.
Definition: gdt.c:49