diff options
| -rw-r--r-- | include/linux/msi.h | 26 | ||||
| -rw-r--r-- | kernel/irq/Kconfig | 3 | 
2 files changed, 29 insertions, 0 deletions
diff --git a/include/linux/msi.h b/include/linux/msi.h index 7c28762851a3..3eb42ede0114 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h  | |||
| @@ -86,6 +86,9 @@ struct msi_desc { | |||
| 86 | struct device *dev; | 86 | struct device *dev; | 
| 87 | struct msi_msg msg; | 87 | struct msi_msg msg; | 
| 88 | struct irq_affinity_desc *affinity; | 88 | struct irq_affinity_desc *affinity; | 
| 89 | #ifdef CONFIG_IRQ_MSI_IOMMU | ||
| 90 | const void *iommu_cookie; | ||
| 91 | #endif | ||
| 89 | 92 | ||
| 90 | union { | 93 | union { | 
| 91 | /* PCI MSI/X specific data */ | 94 | /* PCI MSI/X specific data */ | 
| @@ -129,6 +132,29 @@ struct msi_desc { | |||
| 129 | #define for_each_msi_entry_safe(desc, tmp, dev) \ | 132 | #define for_each_msi_entry_safe(desc, tmp, dev) \ | 
| 130 | list_for_each_entry_safe((desc), (tmp), dev_to_msi_list((dev)), list) | 133 | list_for_each_entry_safe((desc), (tmp), dev_to_msi_list((dev)), list) | 
| 131 | 134 | ||
| 135 | #ifdef CONFIG_IRQ_MSI_IOMMU | ||
| 136 | static inline const void *msi_desc_get_iommu_cookie(struct msi_desc *desc) | ||
| 137 | { | ||
| 138 | return desc->iommu_cookie; | ||
| 139 | } | ||
| 140 | |||
| 141 | static inline void msi_desc_set_iommu_cookie(struct msi_desc *desc, | ||
| 142 | const void *iommu_cookie) | ||
| 143 | { | ||
| 144 | desc->iommu_cookie = iommu_cookie; | ||
| 145 | } | ||
| 146 | #else | ||
| 147 | static inline const void *msi_desc_get_iommu_cookie(struct msi_desc *desc) | ||
| 148 | { | ||
| 149 | return NULL; | ||
| 150 | } | ||
| 151 | |||
| 152 | static inline void msi_desc_set_iommu_cookie(struct msi_desc *desc, | ||
| 153 | const void *iommu_cookie) | ||
| 154 | { | ||
| 155 | } | ||
| 156 | #endif | ||
| 157 | |||
| 132 | #ifdef CONFIG_PCI_MSI | 158 | #ifdef CONFIG_PCI_MSI | 
| 133 | #define first_pci_msi_entry(pdev) first_msi_entry(&(pdev)->dev) | 159 | #define first_pci_msi_entry(pdev) first_msi_entry(&(pdev)->dev) | 
| 134 | #define for_each_pci_msi_entry(desc, pdev) \ | 160 | #define for_each_pci_msi_entry(desc, pdev) \ | 
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig index 5f3e2baefca9..8fee06625c37 100644 --- a/kernel/irq/Kconfig +++ b/kernel/irq/Kconfig  | |||
| @@ -91,6 +91,9 @@ config GENERIC_MSI_IRQ_DOMAIN | |||
| 91 | select IRQ_DOMAIN_HIERARCHY | 91 | select IRQ_DOMAIN_HIERARCHY | 
| 92 | select GENERIC_MSI_IRQ | 92 | select GENERIC_MSI_IRQ | 
| 93 | 93 | ||
| 94 | config IRQ_MSI_IOMMU | ||
| 95 | bool | ||
| 96 | |||
| 94 | config HANDLE_DOMAIN_IRQ | 97 | config HANDLE_DOMAIN_IRQ | 
| 95 | bool | 98 | bool | 
| 96 | 99 | ||
