summaryrefslogtreecommitdiff
path: root/src/kernel/trap
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/trap')
-rw-r--r--src/kernel/trap/handler.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/kernel/trap/handler.cc b/src/kernel/trap/handler.cc
index f7f8725..d7f78de 100644
--- a/src/kernel/trap/handler.cc
+++ b/src/kernel/trap/handler.cc
@@ -5,6 +5,7 @@
#include "kernel/syscall.h"
#include "kernel/mm.h"
#include "kernel/timer.h"
+#include "drivers/plic.h"
#include "lib/string.h"
@@ -58,6 +59,22 @@ namespace Trap
if (is_interrupt && code == 9)
{
// Supervisor External Interrupt (IRQ 9)
+ int irq = PILC::claim();
+
+ if (irq == 10)
+ {
+ // uart_intr();
+ }
+ else if (irq >= 1 && irq <= 8)
+ {
+ // virtio_disk_intr();
+ }
+
+ if (irq > 0)
+ {
+ PILC::complete(irq);
+ }
+
return 1;
}
else if (is_interrupt && code == 5)