From c53c696286821ad13ab9ec61ed011cfe90e193c0 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sat, 28 Jan 2023 04:11:57 +0100 Subject: PIC -> APIC, removing boilerplate irq_handlers --- kernel/include/apic.h | 6 +++++ kernel/include/irq.h | 35 +++++++++-------------------- kernel/include/irq_handler.h | 52 +++----------------------------------------- kernel/include/madt.h | 2 +- kernel/include/pic.h | 8 +++---- kernel/include/rsdp.h | 1 + 6 files changed, 25 insertions(+), 79 deletions(-) create mode 100644 kernel/include/apic.h (limited to 'kernel/include') diff --git a/kernel/include/apic.h b/kernel/include/apic.h new file mode 100644 index 0000000..f795a49 --- /dev/null +++ b/kernel/include/apic.h @@ -0,0 +1,6 @@ +#ifndef APIC_H +#define APIC_H + +void apic_eoi(void); + +#endif diff --git a/kernel/include/irq.h b/kernel/include/irq.h index 2f22aff..8c956b0 100644 --- a/kernel/include/irq.h +++ b/kernel/include/irq.h @@ -3,7 +3,6 @@ #include -// exceptions void isr0(void); void isr1(void); void isr2(void); @@ -12,20 +11,20 @@ void isr4(void); void isr5(void); void isr6(void); void isr7(void); -void isr8(uint64_t error); +void isr8(void); void isr9(void); -void isr10(uint64_t error); -void isr11(uint64_t error); -void isr12(uint64_t error); -void isr13(uint64_t error); -void isr14(uint64_t error); +void isr10(void); +void isr11(void); +void isr12(void); +void isr13(void); +void isr14(void); void isr15(void); void isr16(void); -void isr17(uint64_t error); +void isr17(void); void isr18(void); void isr19(void); void isr20(void); -void isr21(uint64_t error); +void isr21(void); void isr22(void); void isr23(void); void isr24(void); @@ -33,26 +32,12 @@ void isr25(void); void isr26(void); void isr27(void); void isr28(void); -void isr29(uint64_t error); -void isr30(uint64_t error); +void isr29(void); +void isr30(void); void isr31(void); -// interrupts void irq0(void); void irq1(void); void irq2(void); -void irq3(void); -void irq4(void); -void irq5(void); -void irq6(void); -void irq7(void); -void irq8(void); -void irq9(void); -void irq10(void); -void irq11(void); -void irq12(void); -void irq13(void); -void irq14(void); -void irq15(void); #endif diff --git a/kernel/include/irq_handler.h b/kernel/include/irq_handler.h index f7c4f00..571d1ab 100644 --- a/kernel/include/irq_handler.h +++ b/kernel/include/irq_handler.h @@ -3,54 +3,8 @@ #include -void isr0_handler(void); -void isr1_handler(void); -void isr2_handler(void); -void isr3_handler(void); -void isr4_handler(void); -void isr5_handler(void); -void isr6_handler(void); -void isr7_handler(void); -void isr8_handler(uint64_t error); -void isr9_handler(void); -void isr10_handler(uint64_t error); -void isr11_handler(uint64_t error); -void isr12_handler(uint64_t error); -void isr13_handler(uint64_t error); -void isr14_handler(uint64_t error); -void isr15_handler(void); -void isr16_handler(void); -void isr17_handler(uint64_t error); -void isr18_handler(void); -void isr19_handler(void); -void isr20_handler(void); -void isr21_handler(uint64_t error); -void isr22_handler(void); -void isr23_handler(void); -void isr24_handler(void); -void isr25_handler(void); -void isr26_handler(void); -void isr27_handler(void); -void isr28_handler(void); -void isr29_handler(uint64_t error); -void isr30_handler(uint64_t error); -void isr31_handler(void); - -void irq0_handler(void); -void irq1_handler(void); -void irq2_handler(void); -void irq3_handler(void); -void irq4_handler(void); -void irq5_handler(void); -void irq6_handler(void); -void irq7_handler(void); -void irq8_handler(void); -void irq9_handler(void); -void irq10_handler(void); -void irq11_handler(void); -void irq12_handler(void); -void irq13_handler(void); -void irq14_handler(void); -void irq15_handler(void); +void isr_def_handler(uint64_t number, uint64_t error); +void eoi(uint64_t number); +void irq_def_handler(uint64_t number); #endif diff --git a/kernel/include/madt.h b/kernel/include/madt.h index de3eb95..344a6e5 100644 --- a/kernel/include/madt.h +++ b/kernel/include/madt.h @@ -5,7 +5,7 @@ struct MADT { struct ACPI_header h; - uint32_t lacpi_addr; + uint32_t lapic_addr; uint32_t flags; } __attribute__((packed)); diff --git a/kernel/include/pic.h b/kernel/include/pic.h index f1f4e44..7e81293 100644 --- a/kernel/include/pic.h +++ b/kernel/include/pic.h @@ -3,10 +3,10 @@ #define PIC1 0x20 /* IO base address for master PIC */ #define PIC2 0xA0 /* IO base address for slave PIC */ -#define PIC1_COMMAND PIC1 -#define PIC1_DATA (PIC1+1) -#define PIC2_COMMAND PIC2 -#define PIC2_DATA (PIC2+1) +#define PIC1_COMMAND 0x20 +#define PIC1_DATA 0x21 +#define PIC2_COMMAND 0xA0 +#define PIC2_DATA 0xA1 #define PIC_EOI 0x20 /* End-of-interrupt command code */ diff --git a/kernel/include/rsdp.h b/kernel/include/rsdp.h index c931ee0..ef76311 100644 --- a/kernel/include/rsdp.h +++ b/kernel/include/rsdp.h @@ -25,6 +25,7 @@ struct ACPI_header { uint64_t* find_rsdp(void); +void list_sys_tables(void); uint64_t* find_sys_table_addr(const char* signature); #endif -- cgit v1.2.3