xref: /qemu/hw/virtio/virtio-acpi.c (revision 7c0dfcf9)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * virtio ACPI Support
4  *
5  */
6 
7 #include "qemu/osdep.h"
8 #include "hw/virtio/virtio-acpi.h"
9 #include "hw/acpi/aml-build.h"
10 
11 void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size,
12                           uint32_t mmio_irq, long int start_index, int num)
13 {
14     hwaddr virtio_base = base;
15     uint32_t irq = mmio_irq;
16     long int i;
17 
18     for (i = start_index; i < start_index + num; i++) {
19         Aml *dev = aml_device("VR%02u", (unsigned)i);
20         aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005")));
21         aml_append(dev, aml_name_decl("_UID", aml_int(i)));
22         aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
23 
24         Aml *crs = aml_resource_template();
25         aml_append(crs, aml_memory32_fixed(virtio_base, size, AML_READ_WRITE));
26         aml_append(crs,
27                    aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
28                                  AML_EXCLUSIVE, &irq, 1));
29         aml_append(dev, aml_name_decl("_CRS", crs));
30         aml_append(scope, dev);
31         virtio_base += size;
32         irq++;
33     }
34 }
35