summaryrefslogtreecommitdiff
path: root/src/drivers/virtio_dist.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-04-14 22:47:15 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-04-14 22:47:15 +0800
commitac9741e12222e72bad3414bc6f588e70a3d130cc (patch)
tree6aace9f63a2ea54c7c3fd1e49e98ff81b638296f /src/drivers/virtio_dist.cc
parent1e862099a13266da57ff7c6de11c1a11c42a8112 (diff)
downloadlume-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/drivers/virtio_dist.cc')
-rw-r--r--src/drivers/virtio_dist.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/drivers/virtio_dist.cc b/src/drivers/virtio_dist.cc
index b2acd8e..8292874 100644
--- a/src/drivers/virtio_dist.cc
+++ b/src/drivers/virtio_dist.cc
@@ -3,6 +3,7 @@
* Copyright (C) 2026 Richard QIn
*/
#include "drivers/virtio.h"
+#include "kernel/fdt.h"
#include "kernel/riscv.h"
#include "kernel/pmm.h"
#include "kernel/spinlock.h"
@@ -67,11 +68,14 @@ namespace VirtIO
{
disk.lock.init("virtio_disk");
- // 1. Probing for VirtIO-MMIO device
+ // 1. Probe VirtIO devices discovered by FDT
bool found = false;
- // Probe common VirtIO addresses in QEMU virt machine
- for (uint64 addr = 0x10001000; addr < 0x10009000; addr += 0x1000)
+ for (int i = 0; i < g_devices.virtio_count; i++)
{
+ uint64 addr = g_devices.virtio[i].base_addr;
+ if (addr == 0)
+ continue;
+
volatile uint32 *magic = (volatile uint32 *)(addr + VIRTIO_MMIO_MAGIC_VALUE);
volatile uint32 *dev_id = (volatile uint32 *)(addr + VIRTIO_MMIO_DEVICE_ID);