0001
0002
0003 #include <linux/pci.h>
0004 #include <linux/msi.h>
0005
0006 #define msix_table_size(flags) ((flags & PCI_MSIX_FLAGS_QSIZE) + 1)
0007
0008 extern int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
0009 extern void pci_msi_teardown_msi_irqs(struct pci_dev *dev);
0010
0011 #ifdef CONFIG_PCI_MSI_ARCH_FALLBACKS
0012 extern int pci_msi_legacy_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
0013 extern void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev);
0014 #else
0015 static inline int pci_msi_legacy_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
0016 {
0017 WARN_ON_ONCE(1);
0018 return -ENODEV;
0019 }
0020
0021 static inline void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev)
0022 {
0023 WARN_ON_ONCE(1);
0024 }
0025 #endif
0026
0027
0028
0029
0030
0031
0032
0033 static inline __attribute_const__ u32 msi_multi_mask(struct msi_desc *desc)
0034 {
0035
0036 if (desc->pci.msi_attrib.multi_cap >= 5)
0037 return 0xffffffff;
0038 return (1 << (1 << desc->pci.msi_attrib.multi_cap)) - 1;
0039 }