aboutsummaryrefslogtreecommitdiffstats
path: root/src/hw/virtio-mmio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hw/virtio-mmio.c')
-rw-r--r--src/hw/virtio-mmio.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/hw/virtio-mmio.c b/src/hw/virtio-mmio.c
index dabef7b7..44344a49 100644
--- a/src/hw/virtio-mmio.c
+++ b/src/hw/virtio-mmio.c
@@ -3,12 +3,32 @@
#include "output.h" // dprintf
#include "stacks.h" // run_thread
#include "string.h" // memset
+#include "util.h" // acpi_dsdt_*
#include "virtio-pci.h"
#include "virtio-blk.h"
#include "virtio-scsi.h"
#include "virtio-ring.h"
#include "virtio-mmio.h"
+void virtio_mmio_setup_acpi(void)
+{
+ static const char *virtio_hid = "LNRO0005";
+ struct acpi_device *dev;
+ u64 mem, irq, unused;
+
+ for (dev = acpi_dsdt_find_string(NULL, virtio_hid);
+ dev != NULL;
+ dev = acpi_dsdt_find_string(dev, virtio_hid)) {
+ if (acpi_dsdt_find_mem(dev, &mem, &unused) < 0)
+ continue;
+ if (acpi_dsdt_find_irq(dev, &irq) < 0)
+ continue;
+ dprintf(1, "ACPI: virtio-mmio device %s at 0x%llx, irq %lld\n",
+ acpi_dsdt_name(dev), mem, irq);
+ virtio_mmio_setup_one(mem);
+ }
+}
+
void virtio_mmio_setup_one(u64 addr)
{
static const char *names[] = {