blob: 4c84fe9878cf6a148703d0f3119c12100859311a (
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
37
38
39
40
|
#ifndef GDT_H
#define GDT_H
#include <types.h>
struct gdt_seg_entry {
uint16_t limit;
uint16_t offset1;
uint8_t offset2;
uint8_t access;
uint8_t limitflags;
uint8_t offset3;
} __attribute__((packed));
typedef struct gdt_seg_entry gdt_seg_entry;
struct gdt_tss_entry {
uint16_t limit;
uint16_t offset1;
uint8_t offset2;
uint8_t access;
uint8_t limitflags;
uint8_t offset3;
uint32_t offset4;
uint32_t reserved;
} __attribute__((packed));
typedef struct gdt_tss_entry gdt_tss_entry;
struct gdt_p {
uint16_t size;
uint64_t offset;
} __attribute__((packed));
typedef struct gdt_p gdt_p;
void add_gdt_entry(uint32_t num, uint32_t offset, uint32_t limit, uint8_t access, uint8_t flags);
void add_gdt_tss(uint32_t num, uint64_t offset, uint32_t limit, uint8_t access, uint8_t flags);
void reload_gdt(void);
void load_gdt(gdt_p* pointer);
void init_gdt(void);
#endif
|