|
@@ -363,6 +363,20 @@ void pcibios_fixup_bus(struct pci_bus *bus)
|
|
|
}
|
|
|
EXPORT_SYMBOL(pcibios_fixup_bus);
|
|
|
|
|
|
+void pcibios_add_bus(struct pci_bus *bus)
|
|
|
+{
|
|
|
+ struct pci_sys_data *sys = bus->sysdata;
|
|
|
+ if (sys->add_bus)
|
|
|
+ sys->add_bus(bus);
|
|
|
+}
|
|
|
+
|
|
|
+void pcibios_remove_bus(struct pci_bus *bus)
|
|
|
+{
|
|
|
+ struct pci_sys_data *sys = bus->sysdata;
|
|
|
+ if (sys->remove_bus)
|
|
|
+ sys->remove_bus(bus);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Swizzle the device pin each time we cross a bridge. If a platform does
|
|
|
* not provide a swizzle function, we perform the standard PCI swizzling.
|
|
@@ -464,6 +478,8 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
|
|
|
sys->swizzle = hw->swizzle;
|
|
|
sys->map_irq = hw->map_irq;
|
|
|
sys->align_resource = hw->align_resource;
|
|
|
+ sys->add_bus = hw->add_bus;
|
|
|
+ sys->remove_bus = hw->remove_bus;
|
|
|
INIT_LIST_HEAD(&sys->resources);
|
|
|
|
|
|
if (hw->private_data)
|