From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39187) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gEf5e-0008Nv-LO for qemu-devel@nongnu.org; Mon, 22 Oct 2018 14:38:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gEf5d-0004DM-Kw for qemu-devel@nongnu.org; Mon, 22 Oct 2018 14:38:10 -0400 Received: from mga01.intel.com ([192.55.52.88]:7827) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gEf5d-0003wU-4r for qemu-devel@nongnu.org; Mon, 22 Oct 2018 14:38:09 -0400 From: Samuel Ortiz Date: Mon, 22 Oct 2018 20:36:37 +0200 Message-Id: <20181022183656.4902-8-sameo@linux.intel.com> In-Reply-To: <20181022183656.4902-1-sameo@linux.intel.com> References: <20181022183656.4902-1-sameo@linux.intel.com> Subject: [Qemu-devel] [PATCH 07/26] hw: i386: Refactor PCI host getter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Yang Zhong , "Michael S. Tsirkin" , Igor Mammedov , Paolo Bonzini , Richard Henderson , Eduardo Habkost , Marcel Apfelbaum From: Yang Zhong Make it more flexible by having it parsing a PCI host paths array instead of open coding those paths deep down into the code logic itself. This will be needed for PCI machine types that are neither emulatiing the ich9 nor the i440fx chipsets. Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Paolo Bonzini Cc: Richard Henderson Cc: Eduardo Habkost Cc: Marcel Apfelbaum Signed-off-by: Yang Zhong --- hw/i386/acpi-build.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index d3cb1b439d..6652880c9b 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -114,6 +114,12 @@ typedef struct AcpiBuildPciBusHotplugState { bool pcihp_bridge_en; } AcpiBuildPciBusHotplugState; +static const char *pci_hosts[] = { + "/machine/i440fx", + "/machine/q35", + NULL, +}; + static void init_common_fadt_data(Object *o, AcpiFadtData *data) { uint32_t io = object_property_get_uint(o, ACPI_PM_PROP_PM_IO_BASE, NULL); @@ -238,27 +244,30 @@ static void acpi_get_misc_info(AcpiMiscInfo *info) * Because of the PXB hosts we cannot simply query TYPE_PCI_HOST_BRIDGE. * On i386 arch we only have two pci hosts, so we can look only for them. */ -static Object *acpi_get_i386_pci_host(void) +static Object *acpi_get_pci_host(void) { PCIHostState *host; + int i = 0; - host = OBJECT_CHECK(PCIHostState, - object_resolve_path("/machine/i440fx", NULL), - TYPE_PCI_HOST_BRIDGE); - if (!host) { + while (pci_hosts[i]) { host = OBJECT_CHECK(PCIHostState, - object_resolve_path("/machine/q35", NULL), + object_resolve_path(pci_hosts[i], NULL), TYPE_PCI_HOST_BRIDGE); + if (host) { + return OBJECT(host); + } + + i++; } - return OBJECT(host); + return NULL; } static void acpi_get_pci_holes(Range *hole, Range *hole64) { Object *pci_host; - pci_host = acpi_get_i386_pci_host(); + pci_host = acpi_get_pci_host(); g_assert(pci_host); range_set_bounds1(hole, @@ -1636,7 +1645,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, Object *pci_host; PCIBus *bus = NULL; - pci_host = acpi_get_i386_pci_host(); + pci_host = acpi_get_pci_host(); if (pci_host) { bus = PCI_HOST_BRIDGE(pci_host)->bus; } @@ -2009,7 +2018,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg) Object *pci_host; QObject *o; - pci_host = acpi_get_i386_pci_host(); + pci_host = acpi_get_pci_host(); g_assert(pci_host); o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL); -- 2.17.2