diff options
Diffstat (limited to 'drivers/pci/hotplug-pci.c')
| -rw-r--r-- | drivers/pci/hotplug-pci.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/pci/hotplug-pci.c b/drivers/pci/hotplug-pci.c index d3509cdeb55..44088c4fe68 100644 --- a/drivers/pci/hotplug-pci.c +++ b/drivers/pci/hotplug-pci.c @@ -4,6 +4,29 @@  #include <linux/export.h>  #include "pci.h" +int __ref pci_hp_add_bridge(struct pci_dev *dev) +{ +	struct pci_bus *parent = dev->bus; +	int pass, busnr, start = parent->busn_res.start; +	int end = parent->busn_res.end; + +	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 0; +} +EXPORT_SYMBOL_GPL(pci_hp_add_bridge);  unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)  {  |