From bcb79aaff44f126064c4698ea74ffe2b68baeb0e Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Fri, 16 Feb 2024 12:59:43 -0600 Subject: arch: i386: move IRQ functions to PIC driver Move all the functions that control IRQ lines to the PIC driver. This allows the IDT controller to handle only raw interrupts no matter where they come from. Signed-off-by: Danny Holman --- arch/i386/kernel/pic.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'arch/i386/kernel') diff --git a/arch/i386/kernel/pic.c b/arch/i386/kernel/pic.c index 9494b92..7a51763 100644 --- a/arch/i386/kernel/pic.c +++ b/arch/i386/kernel/pic.c @@ -1,6 +1,6 @@ #include -void (*irq_handlers[16])(struct isr_frame *frame); +static void (*irq_handlers[16])(struct isr_frame *frame); void pic_eoi(uint8_t irq) { if (irq >= 8) @@ -38,6 +38,16 @@ uint16_t pic_get_isr(void) { return __pic_get_irq_reg(PIC_READ_ISR); } +void register_irq_handler(uint8_t irq, void (*handler)(struct isr_frame *frame)) { + irq_handlers[irq] = handler; +} + +void irq_dispatch(struct isr_frame *frame) { + (*irq_handlers[frame->vector-32])(frame); + pic_eoi(frame->vector-32); + return; +} + void irq_set_mask(uint8_t irq) { uint16_t port; uint8_t data; -- cgit v1.2.3