> > PCIBus *ppce500_pci_init(qemu_irq pci_irqs[4], target_phys_addr_t > > registers) { > > - PPCE500PCIState *controller; > > + DeviceState *dev; > > + PCIBus *b; > > + PCIHostState *h; > > + PPCE500PCIState *s; > > > > PCIDevice *d; > > > > - int index; > > > > static int ppce500_pci_id; > > > > + SysBusDevice *sb; > > + > > + dev = qdev_create(NULL, "e500-pcihost"); > > + sb = sysbus_from_qdev(dev); > > + h = FROM_SYSBUS(PCIHostState, sb); > > + s = DO_UPCAST(PPCE500PCIState, pci_state, h); > > + > > + b = pci_register_bus(&s->pci_state.busdev.qdev, NULL, > > No. This function should not exist. All this should be done in > e500_pcihost_initfn. Please do the qdev conversion properly.
Or more precicely it should not depend on the internals of ppce500_pci.c. In principle the only public entry point in that file should be device_init(...). If used by multiple boards a simple helper function may be appropriate (e.g. smc91c111_init). Note that this helper function has no ties to the rest of that file, and could be trivially moved into a different file or replaced with a macro/inline funciton. ppce500_pci_init definitely should not be creating the PCI bus. Paul