Move pci device address assignment to a separate function. Index: trunk/hw/pci.c =================================================================== --- trunk.orig/hw/pci.c +++ trunk/hw/pci.c @@ -121,6 +121,16 @@ int pci_bus_num(PCIBus *s) return s->bus_num; } +int pci_bus_assign_dev_addr(PCIBus *bus) +{ + int devfn; + + for(devfn = bus->devfn_min ; devfn < 256; devfn += 8) + if (!bus->devices[devfn]) + return devfn; + return -1; +} + void pci_device_save(PCIDevice *s, QEMUFile *f) { int i; @@ -246,14 +256,6 @@ PCIDevice *pci_register_device(PCIBus *b if (pci_irq_index >= PCI_DEVICES_MAX) return NULL; - if (devfn < 0) { - for(devfn = bus->devfn_min ; devfn < 256; devfn += 8) { - if (!bus->devices[devfn]) - goto found; - } - return NULL; - found: ; - } pci_dev = qemu_mallocz(instance_size); pci_dev->bus = bus; pci_dev->devfn = devfn; Index: trunk/hw/pci.h =================================================================== --- trunk.orig/hw/pci.h +++ trunk/hw/pci.h @@ -184,6 +184,7 @@ PCIDevice *pci_nic_init(PCIBus *bus, NIC void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len); uint32_t pci_data_read(void *opaque, uint32_t addr, int len); int pci_bus_num(PCIBus *s); +int pci_bus_assign_dev_addr(PCIBus *bus); void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d)); PCIBus *pci_find_bus(int bus_num); PCIDevice *pci_find_device(int bus_num, int slot, int function);