14105717bc98ba01663ff28f8a16d8716ba9d07feSam Ravnborg/* Core PCI functionality used only by PCI hotplug */ 24105717bc98ba01663ff28f8a16d8716ba9d07feSam Ravnborg 34105717bc98ba01663ff28f8a16d8716ba9d07feSam Ravnborg#include <linux/pci.h> 4363c75db1d7bbda0aa90e680565f2673bab92ee4Paul Gortmaker#include <linux/export.h> 54105717bc98ba01663ff28f8a16d8716ba9d07feSam Ravnborg#include "pci.h" 64105717bc98ba01663ff28f8a16d8716ba9d07feSam Ravnborg 710874f5a00266343a06e95da680e8a5a383d9a80Bjorn Helgaasint pci_hp_add_bridge(struct pci_dev *dev) 8a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu{ 9a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu struct pci_bus *parent = dev->bus; 10a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu int pass, busnr, start = parent->busn_res.start; 11a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu int end = parent->busn_res.end; 12a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu 13a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu for (busnr = start; busnr <= end; busnr++) { 14a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu if (!pci_find_bus(pci_domain_nr(parent), busnr)) 15a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu break; 16a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu } 17a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu if (busnr-- > end) { 18a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu printk(KERN_ERR "No bus number available for hot-added bridge %s\n", 19a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu pci_name(dev)); 20a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu return -1; 21a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu } 22a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu for (pass = 0; pass < 2; pass++) 23a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu busnr = pci_scan_bridge(parent, dev, busnr, pass); 24a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu if (!dev->subordinate) 25a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu return -1; 26a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu 27a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu return 0; 28a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai Lu} 29a8e4b9c101ae58cc64cda0201229d3318701a7f0Yinghai LuEXPORT_SYMBOL_GPL(pci_hp_add_bridge); 30