PCI: Add pcibios_add_device
authorMatthew Garrett <mjg@redhat.com>
Wed, 5 Dec 2012 21:33:27 +0000 (14:33 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 5 Dec 2012 21:38:26 +0000 (14:38 -0700)
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>
drivers/pci/bus.c
drivers/pci/pci.c
include/linux/pci.h

index 6241fd05bd4108cde7ff14366eb169a00cb80138..4f22fa16a3ba5ded5c42b77d2e0b894e32a7df46 100644 (file)
@@ -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;
index 54858838f09867f142886edcac6b4dab9c049531..fa0ddd51a2160e378b18d5f1a61822da5e0bfa40 100644 (file)
@@ -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
index ee2179546c63b98c2fb8441e03a1f9481ef592b2..195c2593bd316824b75d352473d134d438f761d2 100644 (file)
@@ -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);