diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2007-03-22 21:51:39 +1100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-05-02 19:02:36 -0700 |
commit | b1e2303dba021ee417c65a89e467a2b145ff9217 (patch) | |
tree | 2d13c436766be71a31c3209be46c9cade28028df /drivers/pci/msi.c | |
parent | 3e916c0503a34ba32202a69df1cfeb82f2c5749d (diff) | |
download | linux-stable-b1e2303dba021ee417c65a89e467a2b145ff9217.tar.gz linux-stable-b1e2303dba021ee417c65a89e467a2b145ff9217.tar.bz2 linux-stable-b1e2303dba021ee417c65a89e467a2b145ff9217.zip |
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.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 762bff18187d..d5b9b94a2ac5 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) |