diff --git a/src/kernel/cpu/interrupts.c b/src/kernel/cpu/interrupts.c index d159a70..467876a 100644 --- a/src/kernel/cpu/interrupts.c +++ b/src/kernel/cpu/interrupts.c @@ -2,11 +2,32 @@ #include #include #include +#include + +#define IDT_INTERRUPT 0xE +#define IDT_DPL0 0x0 +#define IDT_PRESENT 0x80 + +#define NUM_INTERRUPTS 256 + +struct idt +{ + uint16_t base_l; + uint16_t cs; + uint8_t ist; + uint8_t flags; + uint16_t base_m; + uint32_t base_h; + uint32_t ignored; +} __attribute__((packed)) idt[NUM_INTERRUPTS]; + +struct +{ + uint16_t len; + struct idt *addr; +} __attribute__((packed)) idtr; -struct int_gate_descriptor idt[NUM_INTERRUPTS]; -struct idtr idtr; extern uintptr_t isr_table[]; - int_handler_t int_handlers[NUM_INTERRUPTS]; void idt_set_gate(uint32_t num, uintptr_t vector, uint16_t cs, uint8_t ist, uint8_t flags) diff --git a/src/kernel/cpu/interrupts.tt b/src/kernel/cpu/interrupts.tt index 8944702..17f5fbd 100644 --- a/src/kernel/cpu/interrupts.tt +++ b/src/kernel/cpu/interrupts.tt @@ -1,8 +1,5 @@ // vim: ft=c #include -#include -#undef debug -#define debug(...) #include "interrupts.c" uintptr_t isr_table[] ={}; diff --git a/src/kernel/include/interrupts.h b/src/kernel/include/interrupts.h index 01ab576..f227a04 100644 --- a/src/kernel/include/interrupts.h +++ b/src/kernel/include/interrupts.h @@ -1,29 +1,5 @@ #pragma once #include -#include - -#define IDT_INTERRUPT 0xE -#define IDT_DPL0 0x0 -#define IDT_PRESENT 0x80 - -#define NUM_INTERRUPTS 256 - -struct int_gate_descriptor -{ - uint16_t base_l; - uint16_t cs; - uint8_t ist; - uint8_t flags; - uint16_t base_m; - uint32_t base_h; - uint32_t ignored; -} __attribute__((packed)); - -struct idtr -{ - uint16_t len; - struct int_gate_descriptor *addr; -} __attribute__((packed)); typedef struct {