PCI/MSI: Move pci_alloc_irq_vectors() to api.c
To disentangle the maze in msi.c, all exported device-driver MSI APIs are now to be grouped in one file, api.c. Make pci_alloc_irq_vectors() a real function instead of wrapper and add proper kernel doc to it. Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20221111122014.870888193@linutronix.de
This commit is contained in:
parent
be7496c1ef
commit
5c0997dc33
@ -90,3 +90,36 @@ int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
|
||||
return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_enable_msix_range);
|
||||
|
||||
/**
|
||||
* pci_alloc_irq_vectors() - Allocate multiple device interrupt vectors
|
||||
* @dev: the PCI device to operate on
|
||||
* @min_vecs: minimum required number of vectors (must be >= 1)
|
||||
* @max_vecs: maximum desired number of vectors
|
||||
* @flags: One or more of:
|
||||
* %PCI_IRQ_MSIX Allow trying MSI-X vector allocations
|
||||
* %PCI_IRQ_MSI Allow trying MSI vector allocations
|
||||
* %PCI_IRQ_LEGACY Allow trying legacy INTx interrupts, if
|
||||
* and only if @min_vecs == 1
|
||||
* %PCI_IRQ_AFFINITY Auto-manage IRQs affinity by spreading
|
||||
* the vectors around available CPUs
|
||||
*
|
||||
* Allocate up to @max_vecs interrupt vectors on device. MSI-X irq
|
||||
* vector allocation has a higher precedence over plain MSI, which has a
|
||||
* higher precedence over legacy INTx emulation.
|
||||
*
|
||||
* Upon a successful allocation, the caller should use pci_irq_vector()
|
||||
* to get the Linux IRQ number to be passed to request_threaded_irq().
|
||||
* The driver must call pci_free_irq_vectors() on cleanup.
|
||||
*
|
||||
* Return: number of allocated vectors (which might be smaller than
|
||||
* @max_vecs), -ENOSPC if less than @min_vecs interrupt vectors are
|
||||
* available, other errnos otherwise.
|
||||
*/
|
||||
int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||
unsigned int max_vecs, unsigned int flags)
|
||||
{
|
||||
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
|
||||
flags, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_alloc_irq_vectors);
|
||||
|
@ -1553,6 +1553,8 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev,
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||
unsigned int max_vecs, unsigned int flags);
|
||||
int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||
unsigned int max_vecs, unsigned int flags,
|
||||
struct irq_affinity *affd);
|
||||
@ -1586,6 +1588,13 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||
return 1;
|
||||
return -ENOSPC;
|
||||
}
|
||||
static inline int
|
||||
pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||
unsigned int max_vecs, unsigned int flags)
|
||||
{
|
||||
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
|
||||
flags, NULL);
|
||||
}
|
||||
|
||||
static inline void pci_free_irq_vectors(struct pci_dev *dev)
|
||||
{
|
||||
@ -1898,15 +1907,13 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
|
||||
{
|
||||
return -ENOSPC;
|
||||
}
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
static inline int
|
||||
pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
||||
unsigned int max_vecs, unsigned int flags)
|
||||
{
|
||||
return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
|
||||
NULL);
|
||||
return -ENOSPC;
|
||||
}
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
/* Include architecture-dependent settings and functions */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user