blob: 693c747139124be222e2107dc974b9164613b81d [file] [log] [blame]
swissChili9b3584b2021-02-18 13:57:27 -08001#include "pic.h"
2#include "io.h"
3
4void (* interrupt_handlers[256])(struct registers);
5
6void pic_send_eoi(uchar interrupt)
7{
8 if (interrupt >= 40)
9 outb(PIC2_COMMAND, PIC_EOI);
10 outb(PIC1_COMMAND, PIC_EOI);
11}
12
13void irq_handler(struct registers regs)
14{
15 pic_send_eoi(regs.interrupt_number);
16
17 if (interrupt_handlers[regs.interrupt_number])
18 interrupt_handlers[regs.interrupt_number](regs);
19}
20
21void add_interrupt_handler(uchar interrupt, void (* handler)(struct registers))
22{
23 interrupt_handlers[interrupt] = handler;
24}