From f9ce893e143a7c2356a0f2204afac1f37d3e54d2 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Wed, 25 Jan 2023 21:49:14 +0100 Subject: kernel/irq: use a lookup table for irqs --- src/kernel/arch/amd64/driver/ps2.c | 8 ++++++-- src/kernel/arch/amd64/driver/rtl8139.c | 2 ++ src/kernel/arch/amd64/driver/serial.c | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) (limited to 'src/kernel/arch/amd64/driver') diff --git a/src/kernel/arch/amd64/driver/ps2.c b/src/kernel/arch/amd64/driver/ps2.c index 971d7d1..4aa17ff 100644 --- a/src/kernel/arch/amd64/driver/ps2.c +++ b/src/kernel/arch/amd64/driver/ps2.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include @@ -50,8 +50,12 @@ void ps2_init(void) { wait_out(); port_out8(PS2, 0xF4); /* packet streaming */ wait_in(); - if (port_in8(PS2) != 0xFA) /* check ACK */ + if (port_in8(PS2) != 0xFA) { /* check ACK */ panic_unimplemented(); + } + + irq_fn[IRQ_PS2KB] = ps2_irq; + irq_fn[IRQ_PS2MOUSE] = ps2_irq; vfs_root_register("/ps2", accept); } diff --git a/src/kernel/arch/amd64/driver/rtl8139.c b/src/kernel/arch/amd64/driver/rtl8139.c index d0e4d90..bf8a67a 100644 --- a/src/kernel/arch/amd64/driver/rtl8139.c +++ b/src/kernel/arch/amd64/driver/rtl8139.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -47,6 +48,7 @@ static void rx_irq_enable(bool v) { void rtl8139_init(uint32_t bdf) { if (iobase) panic_unimplemented(); /* multiple devices */ iobase = pcicfg_iobase(bdf); + irq_fn[IRQ_RTL8139] = rtl8139_irq; /* also includes the status, because i have only implemented w32 */ uint32_t cmd = pcicfg_r32(bdf, PCICFG_CMD); diff --git a/src/kernel/arch/amd64/driver/serial.c b/src/kernel/arch/amd64/driver/serial.c index 5004c31..e8774b6 100644 --- a/src/kernel/arch/amd64/driver/serial.c +++ b/src/kernel/arch/amd64/driver/serial.c @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include #include @@ -25,6 +25,8 @@ static void serial_selftest(void) { } void serial_preinit(void) { + irq_fn[IRQ_COM1] = serial_irq; + // see https://www.sci.muni.cz/docs/pc/serport.txt // set baud rate divisor port_out8(COM1 + 3, 0b10000000); // enable DLAB -- cgit v1.2.3