blob: d1b68bcef74c7ee74d74763a9dcf5be2bf377548 [file] [log] [blame]
swissChilid8137922021-02-17 15:34:07 -08001#pragma once
2
3#include "kint.h"
4
5struct gdt_entry
6{
7 ushort limit_low;
8 ushort base_low;
9 uchar base_middle;
10
11 union
12 {
13 struct
14 {
15 uint a_p : 1;
16 uint a_dpl : 2;
17 uint a_dt : 1;
18 uint a_type : 4;
swissChili0b35bf22021-02-18 12:49:40 -080019 } __attribute__((packed));
swissChilid8137922021-02-17 15:34:07 -080020
21 uchar access;
22 };
23
24 union
25 {
26 struct
27 {
28 uint g_g : 1;
29 uint g_d : 1;
30 uint g_zero : 2; /* includes A */
31 uint g_len : 4;
swissChili0b35bf22021-02-18 12:49:40 -080032 } __attribute__((packed));
swissChilid8137922021-02-17 15:34:07 -080033
34 uchar granularity;
35 };
36
37 uchar base_high;
38} __attribute__((packed));
39
40
41struct gdt_pointer
42{
43 /* Upper 16 bits of selector limits */
44 ushort limit;
45 /* first struct gdt_entry */
46 uint base;
47} __attribute__((packed));
48
49struct idt_entry
50{
51 ushort base_low;
52 ushort selector;
53 uchar zero;
54
55 union
56 {
57 struct
58 {
59 uchar f_p : 1;
60 uchar f_dpl : 2;
61 uchar f_const : 5;
swissChili0b35bf22021-02-18 12:49:40 -080062 } __attribute__((packed));
swissChilid8137922021-02-17 15:34:07 -080063
64 uchar flags;
65 };
66
67 ushort base_high;
68} __attribute__((packed));
69
70#define IDT_F_CONST 0b00110
71
72struct idt_pointer
73{
74 ushort limit;
75 uint base;
76} __attribute__((packed));
77
78extern void isr0();
79extern void isr1();
80extern void isr2();
81extern void isr3();
82extern void isr4();
83extern void isr5();
84extern void isr6();
85extern void isr7();
86extern void isr8();
87extern void isr9();
88extern void isr10();
89extern void isr11();
90extern void isr12();
91extern void isr13();
92extern void isr14();
93extern void isr15();
94extern void isr16();
95extern void isr17();
96extern void isr18();
97extern void isr19();
98extern void isr20();
99extern void isr21();
100extern void isr22();
101extern void isr23();
102extern void isr24();
103extern void isr25();
104extern void isr26();
105extern void isr27();
106extern void isr28();
107extern void isr29();
108extern void isr30();
109extern void isr31();
110
swissChili9b3584b2021-02-18 13:57:27 -0800111extern void irq0();
112extern void irq1();
113extern void irq2();
114extern void irq3();
115extern void irq4();
116extern void irq5();
117extern void irq6();
118extern void irq7();
119extern void irq8();
120extern void irq9();
121extern void irq10();
122extern void irq11();
123extern void irq12();
124extern void irq13();
125extern void irq14();
126extern void irq15();
127
swissChilid8137922021-02-17 15:34:07 -0800128
129void init_descriptor_tables();
130void init_idt();
131void init_gdt();