PCI/MSI: Add weak pcibios_msi_controller()
authorYijing Wang <wangyijing@huawei.com>
Tue, 11 Nov 2014 22:22:45 +0000 (15:22 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 12 Nov 2014 14:56:15 +0000 (07:56 -0700)
Add pcibios_msi_controller() to get the msi_controller associated with a
PCI device.  This is to allow arches to store the msi_controller in the
arch-specific PCI sysdata.

[bhelgaas: changelog, take pci_dev instead of pci_bus]
Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Yijing Wang <wangyijing@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/msi.c

index 0260f39..6c1c1b9 100644 (file)
@@ -30,9 +30,24 @@ int pci_msi_ignore_mask;
 
 /* Arch hooks */
 
+struct msi_controller * __weak pcibios_msi_controller(struct pci_dev *dev)
+{
+       return NULL;
+}
+
+static struct msi_controller *pci_msi_controller(struct pci_dev *dev)
+{
+       struct msi_controller *msi_ctrl = dev->bus->msi;
+
+       if (msi_ctrl)
+               return msi_ctrl;
+
+       return pcibios_msi_controller(dev);
+}
+
 int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
 {
-       struct msi_controller *chip = dev->bus->msi;
+       struct msi_controller *chip = pci_msi_controller(dev);
        int err;
 
        if (!chip || !chip->setup_irq)