summaryrefslogtreecommitdiffstats
path: root/drivers/pci/msi.c
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2007-03-22 21:51:39 +1100
committerGreg Kroah-Hartman <gregkh@suse.de>2007-05-02 19:02:36 -0700
commitb1e2303dba021ee417c65a89e467a2b145ff9217 (patch)
tree2d13c436766be71a31c3209be46c9cade28028df /drivers/pci/msi.c
parent3e916c0503a34ba32202a69df1cfeb82f2c5749d (diff)
MSI: Expand pci_msi_supported()
pci_enable_msi() and pci_enable_msix() both search for the MSI/MSI-X capability, we can fold this into pci_msi_supported() by passing the type in. Update the code to match the comment for pci_msi_supported(). That is it returns 0 on success, and anything else indicates an error. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci/msi.c')
-rw-r--r--drivers/pci/msi.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 762bff18187..d5b9b94a2ac 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -459,12 +459,13 @@ static int msix_capability_init(struct pci_dev *dev,
/**
* pci_msi_supported - check whether MSI may be enabled on device
* @dev: pointer to the pci_dev data structure of MSI device function
+ * @type: are we checking for MSI or MSI-X ?
*
* Look at global flags, the device itself, and its parent busses
* to return 0 if MSI are supported for the device.
**/
static
-int pci_msi_supported(struct pci_dev * dev)
+int pci_msi_supported(struct pci_dev * dev, int type)
{
struct pci_bus *bus;
@@ -482,6 +483,9 @@ int pci_msi_supported(struct pci_dev * dev)
if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
return -EINVAL;
+ if (!pci_find_capability(dev, type))
+ return -EINVAL;
+
return 0;
}
@@ -497,13 +501,9 @@ int pci_msi_supported(struct pci_dev * dev)
**/
int pci_enable_msi(struct pci_dev* dev)
{
- int pos, status;
+ int status;
- if (pci_msi_supported(dev) < 0)
- return -EINVAL;
-
- pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
- if (!pos)
+ if (pci_msi_supported(dev, PCI_CAP_ID_MSI))
return -EINVAL;
WARN_ON(!!dev->msi_enabled);
@@ -606,13 +606,10 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
int i, j;
u16 control;
- if (!entries || pci_msi_supported(dev) < 0)
+ if (!entries || pci_msi_supported(dev, PCI_CAP_ID_MSIX))
return -EINVAL;
pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
- if (!pos)
- return -EINVAL;
-
pci_read_config_word(dev, msi_control_reg(pos), &control);
nr_entries = multi_msix_capable(control);
if (nvec > nr_entries)