aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorMatthew Wilcox <willy@linux.intel.com>2009-03-17 08:54:10 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-03-20 13:48:14 -0400
commit1c8d7b0a562da06d3ebe83f01b1ed553205d1ae4 (patch)
tree79c84432f5aed5a08b3bef262a10d933daae6a9b /include/linux
parentf2440d9acbe866b917b16cc0f927366341ce9215 (diff)
PCI MSI: Add support for multiple MSI
Add the new API pci_enable_msi_block() to allow drivers to request multiple MSI and reimplement pci_enable_msi in terms of pci_enable_msi_block. Ensure that the architecture back ends don't have to know about multiple MSI. Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/msi.h1
-rw-r--r--include/linux/pci.h6
2 files changed, 5 insertions, 2 deletions
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 37c1bbe546e5..6991ab5b24d1 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -21,6 +21,7 @@ extern void write_msi_msg(unsigned int irq, struct msi_msg *msg);
21struct msi_desc { 21struct msi_desc {
22 struct { 22 struct {
23 __u8 is_msix : 1; 23 __u8 is_msix : 1;
24 __u8 multiple: 3; /* log2 number of messages */
24 __u8 maskbit : 1; /* mask-pending bit supported ? */ 25 __u8 maskbit : 1; /* mask-pending bit supported ? */
25 __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */ 26 __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
26 __u8 pos; /* Location of the msi capability */ 27 __u8 pos; /* Location of the msi capability */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 7baf2a5db12a..1f6c5ddaae36 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -789,7 +789,7 @@ struct msix_entry {
789 789
790 790
791#ifndef CONFIG_PCI_MSI 791#ifndef CONFIG_PCI_MSI
792static inline int pci_enable_msi(struct pci_dev *dev) 792static inline int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec)
793{ 793{
794 return -1; 794 return -1;
795} 795}
@@ -824,7 +824,7 @@ static inline int pci_msi_enabled(void)
824 return 0; 824 return 0;
825} 825}
826#else 826#else
827extern int pci_enable_msi(struct pci_dev *dev); 827extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec);
828extern void pci_msi_shutdown(struct pci_dev *dev); 828extern void pci_msi_shutdown(struct pci_dev *dev);
829extern void pci_disable_msi(struct pci_dev *dev); 829extern void pci_disable_msi(struct pci_dev *dev);
830extern int pci_msix_table_size(struct pci_dev *dev); 830extern int pci_msix_table_size(struct pci_dev *dev);
@@ -846,6 +846,8 @@ static inline int pcie_aspm_enabled(void)
846extern int pcie_aspm_enabled(void); 846extern int pcie_aspm_enabled(void);
847#endif 847#endif
848 848
849#define pci_enable_msi(pdev) pci_enable_msi_block(pdev, 1)
850
849#ifdef CONFIG_HT_IRQ 851#ifdef CONFIG_HT_IRQ
850/* The functions a driver should call */ 852/* The functions a driver should call */
851int ht_create_irq(struct pci_dev *dev, int idx); 853int ht_create_irq(struct pci_dev *dev, int idx);