diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-04-14 22:47:15 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-04-14 22:47:15 +0800 |
| commit | ac9741e12222e72bad3414bc6f588e70a3d130cc (patch) | |
| tree | 6aace9f63a2ea54c7c3fd1e49e98ff81b638296f /src/kernel/trap/handler.cc | |
| parent | 1e862099a13266da57ff7c6de11c1a11c42a8112 (diff) | |
| download | lume-ac9741e12222e72bad3414bc6f588e70a3d130cc.tar.gz lume-ac9741e12222e72bad3414bc6f588e70a3d130cc.tar.xz | |
feat: implement FDT-based memory discovery and add comprehensive debug logging to exec syscalls
Diffstat (limited to 'src/kernel/trap/handler.cc')
| -rw-r--r-- | src/kernel/trap/handler.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/kernel/trap/handler.cc b/src/kernel/trap/handler.cc index 11af409..b7bd5f0 100644 --- a/src/kernel/trap/handler.cc +++ b/src/kernel/trap/handler.cc @@ -11,6 +11,7 @@ #include "kernel/timer.h" #include "drivers/plic.h" #include "drivers/virtio.h" +#include "kernel/fdt.h" #include "lib/string.h" @@ -66,17 +67,23 @@ namespace Trap // Supervisor External Interrupt (IRQ 9) int irq = PLIC::claim(); - if (irq == 10) + if (irq == (int)g_devices.uart.irq) { Drivers::uart_intr(); - // Debug - // Drivers::uart_puts("[Interrupt] UART Input detected!\n"); } - else if (irq >= 1 && irq <= 8) + else { - VirtIO::intr(); - // Debug - // Drivers::uart_puts("[Interrupt] VirtIO disk finished!\n"); + // Check if it's a VirtIO IRQ + bool handled = false; + for (int i = 0; i < g_devices.virtio_count; i++) + { + if (irq == (int)g_devices.virtio[i].irq) + { + VirtIO::intr(); + handled = true; + break; + } + } } if (irq > 0) |
