aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2013-06-04 13:18:14 -0400
committerBjorn Helgaas <bhelgaas@google.com>2013-06-04 19:24:31 -0400
commit6ae32c539c0412ca789fb6041be45eeabf78431c (patch)
treeb36080d53311d18da30cd2ab502cb7c27200eedc
parent9a994e8ec7e7d6b1a66c74a683596b0f38f4e345 (diff)
PCI: Add pcibios_release_device()
Platforms may want to provide architecture-specific functionality when a PCI device is released. Add a pcibios_release_device() call that architectures can override to do so. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/pci/pci.c10
-rw-r--r--drivers/pci/probe.c1
-rw-r--r--include/linux/pci.h1
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index e5f4e55d407d..709791b70ca0 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1335,6 +1335,16 @@ int __weak pcibios_add_device (struct pci_dev *dev)
1335} 1335}
1336 1336
1337/** 1337/**
1338 * pcibios_release_device - provide arch specific hooks when releasing device dev
1339 * @dev: the PCI device being released
1340 *
1341 * Permits the platform to provide architecture specific functionality when
1342 * devices are released. This is the default implementation. Architecture
1343 * implementations can override this.
1344 */
1345void __weak pcibios_release_device(struct pci_dev *dev) {}
1346
1347/**
1338 * pcibios_disable_device - disable arch specific PCI resources for device dev 1348 * pcibios_disable_device - disable arch specific PCI resources for device dev
1339 * @dev: the PCI device to disable 1349 * @dev: the PCI device to disable
1340 * 1350 *
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 70f10fa3c1b2..58cc0a8a0979 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1132,6 +1132,7 @@ static void pci_release_dev(struct device *dev)
1132 pci_dev = to_pci_dev(dev); 1132 pci_dev = to_pci_dev(dev);
1133 pci_release_capabilities(pci_dev); 1133 pci_release_capabilities(pci_dev);
1134 pci_release_of_node(pci_dev); 1134 pci_release_of_node(pci_dev);
1135 pcibios_release_device(pci_dev);
1135 kfree(pci_dev); 1136 kfree(pci_dev);
1136} 1137}
1137 1138
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 3a24e4ff3248..8f170e9073a5 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1643,6 +1643,7 @@ void pcibios_set_master(struct pci_dev *dev);
1643int pcibios_set_pcie_reset_state(struct pci_dev *dev, 1643int pcibios_set_pcie_reset_state(struct pci_dev *dev,
1644 enum pcie_reset_state state); 1644 enum pcie_reset_state state);
1645int pcibios_add_device(struct pci_dev *dev); 1645int pcibios_add_device(struct pci_dev *dev);
1646void pcibios_release_device(struct pci_dev *dev);
1646 1647
1647#ifdef CONFIG_PCI_MMCONFIG 1648#ifdef CONFIG_PCI_MMCONFIG
1648void __init pci_mmcfg_early_init(void); 1649void __init pci_mmcfg_early_init(void);