[SeaBIOS] [Qemu-devel] [PATCH RFC V2 11/17] hw/pci: implement iteration over multiple host bridges
Marcel Apfelbaum
marcel at redhat.com
Mon Feb 16 10:54:11 CET 2015
From: Marcel Apfelbaum <marcel.a at redhat.com>
Signed-off-by: Marcel Apfelbaum <marcel at redhat.com>
---
hw/pci/pci.c | 8 ++++----
include/hw/pci/pci_host.h | 4 ++++
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index bf31168..d0d0035 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -68,7 +68,7 @@ static void pci_del_option_rom(PCIDevice *pdev);
static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
static uint16_t pci_default_sub_device_id = PCI_SUBDEVICE_ID_QEMU;
-static QLIST_HEAD(, PCIHostState) pci_host_bridges;
+struct PCIHostQ pci_host_bridges = QLIST_HEAD_INITIALIZER(pci_host_bridges);
static int pci_bar(PCIDevice *d, int reg)
{
@@ -189,7 +189,7 @@ PCIBus *pci_find_primary_bus(void)
PCIBus *primary_bus = NULL;
PCIHostState *host;
- QLIST_FOREACH(host, &pci_host_bridges, next) {
+ HOST_BRIDGE_FOREACH(host) {
if (primary_bus) {
/* We have multiple root buses, refuse to select a primary */
return NULL;
@@ -1249,7 +1249,7 @@ PciInfoList *qmp_query_pci(Error **errp)
PciInfoList *info, *head = NULL, *cur_item = NULL;
PCIHostState *host_bridge;
- QLIST_FOREACH(host_bridge, &pci_host_bridges, next) {
+ HOST_BRIDGE_FOREACH(host_bridge) {
info = g_malloc0(sizeof(*info));
info->value = qmp_query_pci_bus(host_bridge->bus,
pci_bus_num(host_bridge->bus));
@@ -1778,7 +1778,7 @@ int pci_qdev_find_device(const char *id, PCIDevice **pdev)
PCIHostState *host_bridge;
int rc = -ENODEV;
- QLIST_FOREACH(host_bridge, &pci_host_bridges, next) {
+ HOST_BRIDGE_FOREACH(host_bridge) {
int tmp = pci_qdev_find_recursive(host_bridge->bus, id, pdev);
if (!tmp) {
rc = 0;
diff --git a/include/hw/pci/pci_host.h b/include/hw/pci/pci_host.h
index 3c72e26..ba5272f 100644
--- a/include/hw/pci/pci_host.h
+++ b/include/hw/pci/pci_host.h
@@ -63,6 +63,10 @@ typedef struct PCIHostBridgeClass {
const char *(*root_bus_path)(PCIHostState *, PCIBus *);
} PCIHostBridgeClass;
+QLIST_HEAD(PCIHostQ, PCIHostState);
+extern struct PCIHostQ pci_host_bridges;
+#define HOST_BRIDGE_FOREACH(host) QLIST_FOREACH(host, &pci_host_bridges, next)
+
/* common internal helpers for PCI/PCIe hosts, cut off overflows */
void pci_host_config_write_common(PCIDevice *pci_dev, uint32_t addr,
uint32_t limit, uint32_t val, uint32_t len);
--
2.1.0
More information about the SeaBIOS
mailing list