|
@@ -753,27 +753,19 @@ pci_scan_device(struct pci_bus *bus, int devfn)
|
|
|
kfree(dev);
|
|
|
return NULL;
|
|
|
}
|
|
|
- device_initialize(&dev->dev);
|
|
|
- dev->dev.release = pci_release_dev;
|
|
|
- pci_dev_get(dev);
|
|
|
-
|
|
|
- dev->dev.dma_mask = &dev->dma_mask;
|
|
|
- dev->dev.coherent_dma_mask = 0xffffffffull;
|
|
|
|
|
|
return dev;
|
|
|
}
|
|
|
|
|
|
-struct pci_dev * __devinit
|
|
|
-pci_scan_single_device(struct pci_bus *bus, int devfn)
|
|
|
+void __devinit pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
|
|
|
{
|
|
|
- struct pci_dev *dev;
|
|
|
+ device_initialize(&dev->dev);
|
|
|
+ dev->dev.release = pci_release_dev;
|
|
|
+ pci_dev_get(dev);
|
|
|
|
|
|
- dev = pci_scan_device(bus, devfn);
|
|
|
- pci_scan_msi_device(dev);
|
|
|
+ dev->dev.dma_mask = &dev->dma_mask;
|
|
|
+ dev->dev.coherent_dma_mask = 0xffffffffull;
|
|
|
|
|
|
- if (!dev)
|
|
|
- return NULL;
|
|
|
-
|
|
|
/* Fix up broken headers */
|
|
|
pci_fixup_device(pci_fixup_header, dev);
|
|
|
|
|
@@ -785,6 +777,19 @@ pci_scan_single_device(struct pci_bus *bus, int devfn)
|
|
|
spin_lock(&pci_bus_lock);
|
|
|
list_add_tail(&dev->bus_list, &bus->devices);
|
|
|
spin_unlock(&pci_bus_lock);
|
|
|
+}
|
|
|
+
|
|
|
+struct pci_dev * __devinit
|
|
|
+pci_scan_single_device(struct pci_bus *bus, int devfn)
|
|
|
+{
|
|
|
+ struct pci_dev *dev;
|
|
|
+
|
|
|
+ dev = pci_scan_device(bus, devfn);
|
|
|
+ if (!dev)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ pci_device_add(dev, bus);
|
|
|
+ pci_scan_msi_device(dev);
|
|
|
|
|
|
return dev;
|
|
|
}
|
|
@@ -881,7 +886,8 @@ unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
|
|
|
return max;
|
|
|
}
|
|
|
|
|
|
-struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent, int bus, struct pci_ops *ops, void *sysdata)
|
|
|
+struct pci_bus * __devinit pci_create_bus(struct device *parent,
|
|
|
+ int bus, struct pci_ops *ops, void *sysdata)
|
|
|
{
|
|
|
int error;
|
|
|
struct pci_bus *b;
|
|
@@ -938,8 +944,6 @@ struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent, int bus,
|
|
|
b->resource[0] = &ioport_resource;
|
|
|
b->resource[1] = &iomem_resource;
|
|
|
|
|
|
- b->subordinate = pci_scan_child_bus(b);
|
|
|
-
|
|
|
return b;
|
|
|
|
|
|
sys_create_link_err:
|
|
@@ -957,6 +961,18 @@ err_out:
|
|
|
kfree(b);
|
|
|
return NULL;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(pci_create_bus);
|
|
|
+
|
|
|
+struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
|
|
|
+ int bus, struct pci_ops *ops, void *sysdata)
|
|
|
+{
|
|
|
+ struct pci_bus *b;
|
|
|
+
|
|
|
+ b = pci_create_bus(parent, bus, ops, sysdata);
|
|
|
+ if (b)
|
|
|
+ b->subordinate = pci_scan_child_bus(b);
|
|
|
+ return b;
|
|
|
+}
|
|
|
EXPORT_SYMBOL(pci_scan_bus_parented);
|
|
|
|
|
|
#ifdef CONFIG_HOTPLUG
|