blob: b35f6708dbe1cb34403a8f9e8cfb1b0d99c8956f [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
swissChili825d46b2021-02-21 10:14:16 -080011 union {
swissChilid8137922021-02-17 15:34:07 -080012 struct
13 {
swissChili825d46b2021-02-21 10:14:16 -080014 uint a_p : 1;
15 uint a_dpl : 2;
16 uint a_dt : 1;
swissChilid8137922021-02-17 15:34:07 -080017 uint a_type : 4;
swissChili0b35bf22021-02-18 12:49:40 -080018 } __attribute__((packed));
swissChilid8137922021-02-17 15:34:07 -080019
20 uchar access;
21 };
22
swissChili825d46b2021-02-21 10:14:16 -080023 union {
swissChilid8137922021-02-17 15:34:07 -080024 struct
25 {
swissChili825d46b2021-02-21 10:14:16 -080026 uint g_g : 1;
27 uint g_d : 1;
swissChilid8137922021-02-17 15:34:07 -080028 uint g_zero : 2; /* includes A */
swissChili825d46b2021-02-21 10:14:16 -080029 uint g_len : 4;
swissChili0b35bf22021-02-18 12:49:40 -080030 } __attribute__((packed));
swissChili825d46b2021-02-21 10:14:16 -080031
swissChilid8137922021-02-17 15:34:07 -080032 uchar granularity;
33 };
34
35 uchar base_high;
36} __attribute__((packed));
37
swissChilid8137922021-02-17 15:34:07 -080038struct gdt_pointer
39{
40 /* Upper 16 bits of selector limits */
41 ushort limit;
42 /* first struct gdt_entry */
43 uint base;
44} __attribute__((packed));
45
46struct idt_entry
47{
48 ushort base_low;
49 ushort selector;
50 uchar zero;
51
swissChili825d46b2021-02-21 10:14:16 -080052 union {
swissChilid8137922021-02-17 15:34:07 -080053 struct
54 {
swissChili825d46b2021-02-21 10:14:16 -080055 uchar f_p : 1;
56 uchar f_dpl : 2;
swissChilid8137922021-02-17 15:34:07 -080057 uchar f_const : 5;
swissChili0b35bf22021-02-18 12:49:40 -080058 } __attribute__((packed));
swissChili825d46b2021-02-21 10:14:16 -080059
swissChilid8137922021-02-17 15:34:07 -080060 uchar flags;
61 };
swissChili825d46b2021-02-21 10:14:16 -080062
swissChilid8137922021-02-17 15:34:07 -080063 ushort base_high;
64} __attribute__((packed));
65
66#define IDT_F_CONST 0b00110
67
68struct idt_pointer
69{
70 ushort limit;
71 uint base;
72} __attribute__((packed));
73
74extern void isr0();
75extern void isr1();
76extern void isr2();
77extern void isr3();
78extern void isr4();
79extern void isr5();
80extern void isr6();
81extern void isr7();
82extern void isr8();
83extern void isr9();
84extern void isr10();
85extern void isr11();
86extern void isr12();
87extern void isr13();
88extern void isr14();
89extern void isr15();
90extern void isr16();
91extern void isr17();
92extern void isr18();
93extern void isr19();
94extern void isr20();
95extern void isr21();
96extern void isr22();
97extern void isr23();
98extern void isr24();
99extern void isr25();
100extern void isr26();
101extern void isr27();
102extern void isr28();
103extern void isr29();
104extern void isr30();
105extern void isr31();
106
swissChili9b3584b2021-02-18 13:57:27 -0800107extern void irq0();
108extern void irq1();
109extern void irq2();
110extern void irq3();
111extern void irq4();
112extern void irq5();
113extern void irq6();
114extern void irq7();
115extern void irq8();
116extern void irq9();
117extern void irq10();
118extern void irq11();
119extern void irq12();
120extern void irq13();
121extern void irq14();
122extern void irq15();
123
swissChilid8137922021-02-17 15:34:07 -0800124void init_descriptor_tables();
125void init_idt();
126void init_gdt();