From: Hauke Mehrtens Date: Sat, 22 Feb 2014 22:37:32 +0000 (+0100) Subject: backports: add pci_enable_msix_range() X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=dac29570c67b1e3ce11f5596d95ad5b527b308c6;p=openwrt%2Fstaging%2Fblogic.git backports: add pci_enable_msix_range() This is needed by drivers/net/ethernet/intel/igb/igb_main.c Signed-off-by: Hauke Mehrtens --- diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h index 2190831d2f9a..9eeb09be232f 100644 --- a/backport/backport-include/linux/pci.h +++ b/backport/backport-include/linux/pci.h @@ -245,4 +245,16 @@ static inline int pci_enable_msi_range(struct pci_dev *dev, int minvec, #endif #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) +#define pci_enable_msix_range LINUX_BACKPORT(pci_enable_msix_range) +#ifdef CONFIG_PCI_MSI +int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, + int minvec, int maxvec); +#else +static inline int pci_enable_msix_range(struct pci_dev *dev, + struct msix_entry *entries, int minvec, int maxvec) +{ return -ENOSYS; } +#endif +#endif + #endif /* _BACKPORT_LINUX_PCI_H */ diff --git a/backport/compat/backport-3.14.c b/backport/compat/backport-3.14.c index 9e37c58663d8..bce50dc55d52 100644 --- a/backport/compat/backport-3.14.c +++ b/backport/compat/backport-3.14.c @@ -49,3 +49,44 @@ int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec) EXPORT_SYMBOL(pci_enable_msi_range); #endif #endif + +#ifdef CONFIG_PCI_MSI +/** + * pci_enable_msix_range - configure device's MSI-X capability structure + * @dev: pointer to the pci_dev data structure of MSI-X device function + * @entries: pointer to an array of MSI-X entries + * @minvec: minimum number of MSI-X irqs requested + * @maxvec: maximum number of MSI-X irqs requested + * + * Setup the MSI-X capability structure of device function with a maximum + * possible number of interrupts in the range between @minvec and @maxvec + * upon its software driver call to request for MSI-X mode enabled on its + * hardware device function. It returns a negative errno if an error occurs. + * If it succeeds, it returns the actual number of interrupts allocated and + * indicates the successful configuration of MSI-X capability structure + * with new allocated MSI-X interrupts. + **/ +int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, + int minvec, int maxvec) +{ + int nvec = maxvec; + int rc; + + if (maxvec < minvec) + return -ERANGE; + + do { + rc = pci_enable_msix(dev, entries, nvec); + if (rc < 0) { + return rc; + } else if (rc > 0) { + if (rc < minvec) + return -ENOSPC; + nvec = rc; + } + } while (rc); + + return nvec; +} +EXPORT_SYMBOL(pci_enable_msix_range); +#endif