summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Garrett <mjg@redhat.com>2012-12-05 14:33:27 -0700
committerBjorn Helgaas <bhelgaas@google.com>2012-12-05 14:38:26 -0700
commiteca0d4676d8e29c209ddce0c0c1755472ffc70a6 (patch)
tree0455ac26c96f0a383665fe353d28dbeaa3e1f14b
parentdd5fc854de5fd37adfcef8a366cd21a55aa01d3d (diff)
downloadlwn-eca0d4676d8e29c209ddce0c0c1755472ffc70a6.tar.gz
lwn-eca0d4676d8e29c209ddce0c0c1755472ffc70a6.zip
PCI: Add pcibios_add_device
Platforms may want to provide architecture-specific functionality during PCI enumeration. Add a pcibios_add_device() call that architectures can override to do so. Signed-off-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Tested-by: Seth Forshee <seth.forshee@canonical.com>
-rw-r--r--drivers/pci/bus.c5
-rw-r--r--drivers/pci/pci.c13
-rw-r--r--include/linux/pci.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 6241fd05bd41..4f22fa16a3ba 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -170,6 +170,11 @@ int pci_bus_add_device(struct pci_dev *dev)
int retval;
pci_fixup_device(pci_fixup_final, dev);
+
+ retval = pcibios_add_device(dev);
+ if (retval)
+ return retval;
+
retval = device_add(&dev->dev);
if (retval)
return retval;
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 54858838f098..fa0ddd51a216 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1333,6 +1333,19 @@ void pcim_pin_device(struct pci_dev *pdev)
dr->pinned = 1;
}
+/*
+ * pcibios_add_device - provide arch specific hooks when adding device dev
+ * @dev: the PCI device being added
+ *
+ * Permits the platform to provide architecture specific functionality when
+ * devices are added. This is the default implementation. Architecture
+ * implementations can override this.
+ */
+int __weak pcibios_add_device (struct pci_dev *dev)
+{
+ return 0;
+}
+
/**
* pcibios_disable_device - disable arch specific PCI resources for device dev
* @dev: the PCI device to disable
diff --git a/include/linux/pci.h b/include/linux/pci.h
index ee2179546c63..195c2593bd31 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1592,6 +1592,7 @@ void pcibios_disable_device(struct pci_dev *dev);
void pcibios_set_master(struct pci_dev *dev);
int pcibios_set_pcie_reset_state(struct pci_dev *dev,
enum pcie_reset_state state);
+int pcibios_add_device(struct pci_dev *dev);
#ifdef CONFIG_PCI_MMCONFIG
extern void __init pci_mmcfg_early_init(void);