]> Pileus Git - ~andy/linux/blobdiff - drivers/pci/hotplug-pci.c
drm/i915: fix gen4 digital port hotplug definitions
[~andy/linux] / drivers / pci / hotplug-pci.c
index d3509cdeb554913dddb68fc5b956c63bd77a1abf..6258dc260d9f54ac4423998e8b338d4333768ef7 100644 (file)
@@ -4,18 +4,26 @@
 #include <linux/export.h>
 #include "pci.h"
 
-
-unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
+int __ref pci_hp_add_bridge(struct pci_dev *dev)
 {
-       unsigned int max;
-
-       max = pci_scan_child_bus(bus);
+       struct pci_bus *parent = dev->bus;
+       int pass, busnr, start = parent->busn_res.start;
+       int end = parent->busn_res.end;
 
-       /*
-        * Make the discovered devices available.
-        */
-       pci_bus_add_devices(bus);
+       for (busnr = start; busnr <= end; busnr++) {
+               if (!pci_find_bus(pci_domain_nr(parent), busnr))
+                       break;
+       }
+       if (busnr-- > end) {
+               printk(KERN_ERR "No bus number available for hot-added bridge %s\n",
+                               pci_name(dev));
+               return -1;
+       }
+       for (pass = 0; pass < 2; pass++)
+               busnr = pci_scan_bridge(parent, dev, busnr, pass);
+       if (!dev->subordinate)
+               return -1;
 
-       return max;
+       return 0;
 }
-EXPORT_SYMBOL(pci_do_scan_bus);
+EXPORT_SYMBOL_GPL(pci_hp_add_bridge);