axle OS
x86_32 UNIX-like hobby OS
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
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 
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
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'
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
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);
Definition: elf.h:10
Definition: descriptor_tables.h:41
Definition: descriptor_tables.h:19
Definition: descriptor_tables.h:48
Definition: descriptor_tables.h:9
Definition: descriptor_tables.h:30