diff options
author | Matthew Wilcox <willy@linux.intel.com> | 2009-03-17 08:54:10 -0400 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-03-20 13:48:14 -0400 |
commit | 1c8d7b0a562da06d3ebe83f01b1ed553205d1ae4 (patch) | |
tree | 79c84432f5aed5a08b3bef262a10d933daae6a9b /include/linux | |
parent | f2440d9acbe866b917b16cc0f927366341ce9215 (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.h | 1 | ||||
-rw-r--r-- | include/linux/pci.h | 6 |
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); | |||
21 | struct msi_desc { | 21 | struct 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 |
792 | static inline int pci_enable_msi(struct pci_dev *dev) | 792 | static 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 |
827 | extern int pci_enable_msi(struct pci_dev *dev); | 827 | extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec); |
828 | extern void pci_msi_shutdown(struct pci_dev *dev); | 828 | extern void pci_msi_shutdown(struct pci_dev *dev); |
829 | extern void pci_disable_msi(struct pci_dev *dev); | 829 | extern void pci_disable_msi(struct pci_dev *dev); |
830 | extern int pci_msix_table_size(struct pci_dev *dev); | 830 | extern int pci_msix_table_size(struct pci_dev *dev); |
@@ -846,6 +846,8 @@ static inline int pcie_aspm_enabled(void) | |||
846 | extern int pcie_aspm_enabled(void); | 846 | extern 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 */ |
851 | int ht_create_irq(struct pci_dev *dev, int idx); | 853 | int ht_create_irq(struct pci_dev *dev, int idx); |