diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2025-12-31 19:00:20 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2025-12-31 19:00:20 +0800 |
| commit | 0a6815b7143a8ffd0e09777b5fbd12098d8884c2 (patch) | |
| tree | 1dc95d54891eb787b63bcaaaa842d88605de8d1c /src/kernel | |
| parent | 94005550703f85de9d1355dfa713d3250409d2c2 (diff) | |
| download | lume-0a6815b7143a8ffd0e09777b5fbd12098d8884c2.tar.gz lume-0a6815b7143a8ffd0e09777b5fbd12098d8884c2.tar.xz | |
dev: PILC implementation
Diffstat (limited to 'src/kernel')
| -rw-r--r-- | src/kernel/trap/handler.cc | 17 |
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) |
