]> git.dujemihanovic.xyz Git - nameless-os.git/blobdiff - kernel/arch/x86/irq/interrupt.c
kernel: Huge refactoring of tty driver
[nameless-os.git] / kernel / arch / x86 / irq / interrupt.c
index b2abef97a08c956bce052cfe5c1635a4a1d72b3b..b3c31735af156cba8e01422cb03969f933bea41e 100644 (file)
@@ -1,24 +1,25 @@
 #include <irq/idt.h>
 #include <irq/interrupt.h>
-#include <tty.h>
+#include <kprint.h>
 #include <stddef.h>
 #include <irq/i8259a.h>
 
 /* This table will hold pointers to our interrupt handlers. */
-static int (*int_handler_table[256])(void);
+static int (*int_handler_table[256])(struct interrupt_frame *);
 
-void int_handler(int interrupt)
+void int_handler(struct interrupt_frame *frame)
 {
+       int interrupt = frame->interrupt;
        if (int_handler_table[interrupt] == NULL) {
-               kprint("WARNING: Unhandled interrupt ", 0);
-               kprintb(interrupt);
-               kprint(" occurred!\n", 0);
+               kprint("WARNING: Unhandled interrupt ", VGA_YELLOW, VGA_BLACK);
+               kprintb(interrupt, 1);
+               kprint(" occurred!\n", VGA_YELLOW, VGA_BLACK);
        } else {
-               int ret = (*int_handler_table[interrupt])();
+               int ret = (*int_handler_table[interrupt])(frame);
                if (ret) {
-                       kprint("WARNING: Error while handling interrupt ", 0);
-                       kprintb(interrupt);
-                       kprint("!\n", 0);
+                       kprint("WARNING: Error while handling interrupt ", VGA_YELLOW, VGA_BLACK);
+                       kprintb(interrupt, 1);
+                       kprint("!\n", VGA_YELLOW, VGA_BLACK);
                }
        }
        if (interrupt >= 0x20) {
@@ -26,7 +27,7 @@ void int_handler(int interrupt)
        }
 }
 
-int register_interrupt(int irq, int (*handler)(void))
+int register_interrupt(int irq, int (*handler)(struct interrupt_frame *))
 {
        int_handler_table[irq] = handler;
        if (irq >= 32 && irq < 48) {