axle OS
x86_32 UNIX-like hobby OS
src
kernel
util
paging
descriptor_tables.h
1
#include <std/common.h>
2
3
//allows kernel stack in TSS to be changed
4
void
set_kernel_stack(uint32_t stack);
5
6
//structure contains value of one GDT entry
7
//use attribute 'packed' to tell GCC not to change
8
//any of the alignment in the structure
9
struct
gdt_entry_struct
{
10
uint16_t limit_low;
//lower 16 bits of limit
11
uint16_t base_low;
//lower 16 bits of base
12
uint8_t base_middle;
//next 8 bits of the base
13
uint8_t access;
//access flags, determining ring for this segment to be used in
14
uint8_t granularity;
15
uint8_t base_high;
//last 8 bits of base
16
}
__attribute__
((packed));
17
typedef
struct
gdt_entry_struct
gdt_entry_t;
18
19
struct
gdt_ptr_struct
{
20
uint16_t limit;
//upper 16 bits of all selector limits
21
uint32_t base;
//address of the first gdt_entry_t struct
22
}
__attribute__
((packed));
23
typedef
struct
gdt_ptr_struct
gdt_ptr_t;
24
25
//publicly accessible initialization function
26
void
gdt_install();
27
void
idt_install();
28
29
//struct describing interrupt gate
30
struct
idt_entry_struct
{
31
uint16_t base_lo;
//lower 16 bits of the address to jump to when this interrupt fires
32
uint16_t sel;
//kernel segment selector
33
uint8_t always0;
//must always be zero
34
uint8_t flags;
//more flags
35
uint16_t base_hi;
//upper 16 bits of address to jump to
36
}
__attribute__
((packed));
37
typedef
struct
idt_entry_struct
idt_entry_t;
38
39
//struct describing pointer to an array of interrupt handlers
40
//in a format suitable to be passed to 'lidt'
41
struct
idt_ptr_struct
{
42
uint16_t limit;
43
uint32_t base;
//address of the first element in our idt_entry_t array
44
}
__attribute__
((packed));
45
typedef
struct
idt_ptr_struct
idt_ptr_t;
46
47
//struct describing task state segment
48
struct
tss_entry_struct
{
49
uint32_t prev_tss;
//previous TSS; would be used if we used hardware task switching
50
uint32_t esp0;
//stack pointer to load when changing to kernel mode
51
uint32_t ss0;
//stack segment to load when changing to kernel mode
52
uint32_t esp1;
//unused...
53
uint32_t ss1;
54
uint32_t esp2;
55
uint32_t ss2;
56
uint32_t cr3;
57
uint32_t eip;
58
uint32_t eflags;
59
uint32_t eax;
60
uint32_t ecx;
61
uint32_t edx;
62
uint32_t ebx;
63
uint32_t esp;
64
uint32_t ebp;
65
uint32_t esi;
66
uint32_t edi;
67
uint32_t es;
//value to load into ES when changing to kernel mode
68
uint32_t cs;
//as above...
69
uint32_t ss;
70
uint32_t ds;
71
uint32_t fs;
72
uint32_t gs;
73
uint32_t ldt;
//unused...
74
uint16_t trap;
75
uint16_t iomap_base;
76
}
__attribute__
((packed));
77
typedef
struct
tss_entry_struct
tss_entry_t;
78
79
//extern directives allow us to access the addresses of our ASM ISR handlers
80
extern
void
isr0();
81
extern
void
isr1();
82
extern
void
isr2();
83
extern
void
isr3();
84
extern
void
isr4();
85
extern
void
isr5();
86
extern
void
isr6();
87
extern
void
isr7();
88
extern
void
isr8();
89
extern
void
isr9();
90
extern
void
isr10();
91
extern
void
isr11();
92
extern
void
isr12();
93
extern
void
isr13();
94
extern
void
isr14();
95
extern
void
isr15();
96
extern
void
isr16();
97
extern
void
isr17();
98
extern
void
isr18();
99
extern
void
isr19();
100
extern
void
isr20();
101
extern
void
isr21();
102
extern
void
isr22();
103
extern
void
isr23();
104
extern
void
isr24();
105
extern
void
isr25();
106
extern
void
isr26();
107
extern
void
isr27();
108
extern
void
isr28();
109
extern
void
isr29();
110
extern
void
isr30();
111
extern
void
isr31();
112
113
extern
void
irq0();
114
extern
void
irq1();
115
extern
void
irq2();
116
extern
void
irq3();
117
extern
void
irq4();
118
extern
void
irq5();
119
extern
void
irq6();
120
extern
void
irq7();
121
extern
void
irq8();
122
extern
void
irq9();
123
extern
void
irq10();
124
extern
void
irq11();
125
extern
void
irq12();
126
extern
void
irq13();
127
extern
void
irq14();
128
extern
void
irq15();
129
extern
void
irq16();
130
extern
void
irq17();
131
132
extern
void
isr128();
133
134
void
idt_set_gate(uint8_t num, uint32_t base, uint16_t sel, uint8_t flags);
__attribute__
Definition:
elf.h:10
idt_ptr_struct
Definition:
descriptor_tables.h:41
gdt_ptr_struct
Definition:
descriptor_tables.h:19
tss_entry_struct
Definition:
descriptor_tables.h:48
gdt_entry_struct
Definition:
descriptor_tables.h:9
idt_entry_struct
Definition:
descriptor_tables.h:30
Generated by
1.8.14