diff options
author | Alex Chiang <achiang@hp.com> | 2009-03-20 16:56:25 -0400 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-03-20 17:57:44 -0400 |
commit | 3ed4fd96b3188406ac5357d9290bcffa08c65cf6 (patch) | |
tree | 1e48401b56c35554e84c8d627c6c04e83a999a9e /drivers/pci/probe.c | |
parent | 9dd90cafa7a712d283e2e0c625b022e19f746762 (diff) |
PCI: Introduce pci_rescan_bus()
This API is used by the PCI core to rescan a bus and rediscover
newly added devices.
Over time, it is expected that the various PCI hotplug drivers
will migrate to this interface and away from the old
pci_do_scan_bus() interface.
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/probe.c')
-rw-r--r-- | drivers/pci/probe.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index f69256c63b2b..60a8e5fec6c5 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -1212,6 +1212,38 @@ struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent, | |||
1212 | EXPORT_SYMBOL(pci_scan_bus_parented); | 1212 | EXPORT_SYMBOL(pci_scan_bus_parented); |
1213 | 1213 | ||
1214 | #ifdef CONFIG_HOTPLUG | 1214 | #ifdef CONFIG_HOTPLUG |
1215 | /** | ||
1216 | * pci_rescan_bus - scan a PCI bus for devices. | ||
1217 | * @bus: PCI bus to scan | ||
1218 | * | ||
1219 | * Scan a PCI bus and child buses for new devices, adds them, | ||
1220 | * and enables them. | ||
1221 | * | ||
1222 | * Returns the max number of subordinate bus discovered. | ||
1223 | */ | ||
1224 | unsigned int __devinit pci_rescan_bus(struct pci_bus *bus) | ||
1225 | { | ||
1226 | unsigned int max; | ||
1227 | struct pci_dev *dev; | ||
1228 | |||
1229 | max = pci_scan_child_bus(bus); | ||
1230 | |||
1231 | up_read(&pci_bus_sem); | ||
1232 | list_for_each_entry(dev, &bus->devices, bus_list) | ||
1233 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || | ||
1234 | dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) | ||
1235 | if (dev->subordinate) | ||
1236 | pci_bus_size_bridges(dev->subordinate); | ||
1237 | down_read(&pci_bus_sem); | ||
1238 | |||
1239 | pci_bus_assign_resources(bus); | ||
1240 | pci_enable_bridges(bus); | ||
1241 | pci_bus_add_devices(bus); | ||
1242 | |||
1243 | return max; | ||
1244 | } | ||
1245 | EXPORT_SYMBOL_GPL(pci_rescan_bus); | ||
1246 | |||
1215 | EXPORT_SYMBOL(pci_add_new_bus); | 1247 | EXPORT_SYMBOL(pci_add_new_bus); |
1216 | EXPORT_SYMBOL(pci_scan_slot); | 1248 | EXPORT_SYMBOL(pci_scan_slot); |
1217 | EXPORT_SYMBOL(pci_scan_bridge); | 1249 | EXPORT_SYMBOL(pci_scan_bridge); |