static void build_pci_device_aml(Aml *scope, LoongArchVirtMachineState *lvms)
{
- struct GPEXConfig cfg = {
- .mmio64.base = VIRT_PCI_MEM_BASE,
- .mmio64.size = VIRT_PCI_MEM_SIZE,
- .pio.base = VIRT_PCI_IO_BASE,
- .pio.size = VIRT_PCI_IO_SIZE,
- .ecam.base = VIRT_PCI_CFG_BASE,
- .ecam.size = VIRT_PCI_CFG_SIZE,
- .irq = VIRT_GSI_BASE + VIRT_DEVICE_IRQS,
- .bus = lvms->pci_bus,
- };
-
- acpi_dsdt_add_gpex(scope, &cfg);
+ acpi_dsdt_add_gpex(scope, &lvms->gpex);
}
static void build_flash_aml(Aml *scope, LoongArchVirtMachineState *lvms)
d = SYS_BUS_DEVICE(gpex_dev);
sysbus_realize_and_unref(d, &error_fatal);
pci_bus = PCI_HOST_BRIDGE(gpex_dev)->bus;
- lvms->pci_bus = pci_bus;
+ lvms->gpex.mmio64.base = VIRT_PCI_MEM_BASE;
+ lvms->gpex.mmio64.size = VIRT_PCI_MEM_SIZE;
+ lvms->gpex.pio.base = VIRT_PCI_IO_BASE;
+ lvms->gpex.pio.size = VIRT_PCI_IO_SIZE;
+ lvms->gpex.ecam.base = VIRT_PCI_CFG_BASE;
+ lvms->gpex.ecam.size = VIRT_PCI_CFG_SIZE;
+ lvms->gpex.irq = VIRT_GSI_BASE + VIRT_DEVICE_IRQS;
+ lvms->gpex.bus = pci_bus;
/* Map only part size_ecam bytes of ECAM space */
ecam_alias = g_new0(MemoryRegion, 1);
#include "qemu/queue.h"
#include "hw/block/flash.h"
#include "hw/loongarch/boot.h"
+#include "hw/pci-host/gpex.h"
/* IOCSR region */
#define VERSION_REG 0x0
DeviceState *acpi_ged;
int fdt_size;
DeviceState *platform_bus_dev;
- PCIBus *pci_bus;
PFlashCFI01 *flash[2];
MemoryRegion system_iocsr;
MemoryRegion iocsr_mem;
uint64_t misc_status;
DeviceState *dintc;
hwaddr ram_end;
+ struct GPEXConfig gpex;
};
#define TYPE_LOONGARCH_VIRT_MACHINE MACHINE_TYPE_NAME("virt")