summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/cpu/irq.c')
-rw-r--r--kernel/src/cpu/irq.c290
1 files changed, 41 insertions, 249 deletions
diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c
index 4670da5..79498ba 100644
--- a/kernel/src/cpu/irq.c
+++ b/kernel/src/cpu/irq.c
@@ -9,6 +9,9 @@
#include <libk/serial_stdio.h>
#include <libk/stdio.h>
#include <panic.h>
+#include <apic.h>
+
+#define PIT 0
const char* const exception_name[] = {
"Divide-by-zero Error",
@@ -45,253 +48,42 @@ const char* const exception_name[] = {
"Reserved",
};
-void isr0_handler(void)
-{
- panic("%s\n", exception_name[0]);
-}
-
-void isr1_handler(void)
-{
- panic("%s\n", exception_name[1]);
-}
-
-void isr2_handler(void)
-{
- panic("%s\n", exception_name[2]);
-}
-
-void isr3_handler(void)
-{
- panic("%s\n", exception_name[3]);
-}
-
-void isr4_handler(void)
-{
- panic("%s\n", exception_name[4]);
-}
-
-void isr5_handler(void)
-{
- panic("%s\n", exception_name[5]);
-}
-
-void isr6_handler(void)
-{
- panic("%s\n", exception_name[6]);
-}
-
-void isr7_handler(void)
-{
- panic("%s\n", exception_name[7]);
-}
-
-void isr8_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[8], error);
-}
-
-void isr9_handler(void)
-{
- panic("%s\n", exception_name[9]);
-}
-
-void isr10_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[10], error);
-}
-
-void isr11_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[11], error);
-}
-
-void isr12_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[12], error);
-}
-
-void isr13_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[13], error);
-}
-
-void isr14_handler(uint64_t error)
-{
- printf("%s, error: %d\n", exception_name[14], error);
- page_fault(error);
-}
-
-void isr15_handler(void)
-{
- panic("%s\n", exception_name[15]);
-}
-
-void isr16_handler(void)
-{
- panic("%s\n", exception_name[16]);
-}
-
-void isr17_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[17], error);
-}
-
-void isr18_handler(void)
-{
- panic("%s\n", exception_name[18]);
-}
-
-void isr19_handler(void)
-{
- panic("%s\n", exception_name[19]);
-}
-
-void isr20_handler(void)
-{
- panic("%s\n", exception_name[20]);
-}
-
-void isr21_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[21], error);
-}
-
-void isr22_handler(void)
-{
- panic("%s\n", exception_name[22]);
-}
-
-void isr23_handler(void)
-{
- panic("%s\n", exception_name[23]);
-}
-
-void isr24_handler(void)
-{
- panic("%s\n", exception_name[24]);
-}
-
-void isr25_handler(void)
-{
- panic("%s\n", exception_name[25]);
-}
-
-void isr26_handler(void)
-{
- panic("%s\n", exception_name[26]);
-}
-
-void isr27_handler(void)
-{
- panic("%s\n", exception_name[27]);
-}
-
-void isr28_handler(void)
-{
- panic("%s\n", exception_name[28]);
-}
-
-void isr29_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[29], error);
-}
-
-void isr30_handler(uint64_t error)
-{
- panic("%s, error: %d\n", exception_name[30], error);
-}
-
-void isr31_handler(void)
-{
- panic("%s\n", exception_name[31]);
-}
-
-void irq0_handler(void)
-{
- timer_handler();
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq1_handler(void)
-{
- keyboard_handler();
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq2_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq3_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq4_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq5_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq6_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq7_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
-}
-
-void irq8_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq9_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq10_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq11_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq12_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq13_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq14_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
-}
-
-void irq15_handler(void)
-{
- outb(PIC1_COMMAND, PIC_EOI);
- outb(PIC2_COMMAND, PIC_EOI);
+void isr_def_handler(uint64_t number, uint64_t error)
+{
+ switch(number) {
+ case 14:
+ printf("%s, error: 0x%x\n", exception_name[14], error);
+ page_fault(error);
+ break;
+ default:
+ panic("%s, error: 0x%x\n", exception_name[number], error);
+ }
+}
+
+void eoi(uint64_t number)
+{
+ if (PIT) {
+ if (number < 8) {
+ outb(PIC1_COMMAND, PIC_EOI);
+ } else if (number < 16) {
+ outb(PIC1_COMMAND, PIC_EOI);
+ outb(PIC2_COMMAND, PIC_EOI);
+ }
+ } else {
+ apic_eoi();
+ }
+}
+
+void irq_def_handler(uint64_t number)
+{
+ switch(number)
+ {
+ case 0:
+ timer_handler();
+ break;
+ case 1:
+ keyboard_handler();
+ break;
+ }
+ eoi(number);
}