diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 13:36:57 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 13:36:57 -0400 |
| commit | ca1ee219c070eab755712d50638bbcd1f8630fc1 (patch) | |
| tree | c0c252a9095830aadc5dc9ffdd16d9167dd605c9 /include/linux | |
| parent | 3cc50ac0dbda5100684e570247782330155d35e0 (diff) | |
| parent | afeeb7cebbd223ffee303fd8de4ba97458b13581 (diff) | |
Merge git://git.infradead.org/iommu-2.6
* git://git.infradead.org/iommu-2.6:
intel-iommu: Fix address wrap on 32-bit kernel.
intel-iommu: Enable DMAR on 32-bit kernel.
intel-iommu: fix PCI device detach from virtual machine
intel-iommu: VT-d page table to support snooping control bit
iommu: Add domain_has_cap iommu_ops
intel-iommu: Snooping control support
Fixed trivial conflicts in arch/x86/Kconfig and drivers/pci/intel-iommu.c
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/dma_remapping.h | 1 | ||||
| -rw-r--r-- | include/linux/intel-iommu.h | 2 | ||||
| -rw-r--r-- | include/linux/iommu.h | 13 |
3 files changed, 15 insertions, 1 deletions
diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h index af1dab41674b..1a455f1f86d7 100644 --- a/include/linux/dma_remapping.h +++ b/include/linux/dma_remapping.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #define DMA_PTE_READ (1) | 12 | #define DMA_PTE_READ (1) |
| 13 | #define DMA_PTE_WRITE (2) | 13 | #define DMA_PTE_WRITE (2) |
| 14 | #define DMA_PTE_SNP (1 << 11) | ||
| 14 | 15 | ||
| 15 | struct intel_iommu; | 16 | struct intel_iommu; |
| 16 | struct dmar_domain; | 17 | struct dmar_domain; |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 1d6c71d96ede..77214ead1a36 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
| @@ -123,7 +123,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
| 123 | #define ecap_eim_support(e) ((e >> 4) & 0x1) | 123 | #define ecap_eim_support(e) ((e >> 4) & 0x1) |
| 124 | #define ecap_ir_support(e) ((e >> 3) & 0x1) | 124 | #define ecap_ir_support(e) ((e >> 3) & 0x1) |
| 125 | #define ecap_max_handle_mask(e) ((e >> 20) & 0xf) | 125 | #define ecap_max_handle_mask(e) ((e >> 20) & 0xf) |
| 126 | 126 | #define ecap_sc_support(e) ((e >> 7) & 0x1) /* Snooping Control */ | |
| 127 | 127 | ||
| 128 | /* IOTLB_REG */ | 128 | /* IOTLB_REG */ |
| 129 | #define DMA_TLB_FLUSH_GRANU_OFFSET 60 | 129 | #define DMA_TLB_FLUSH_GRANU_OFFSET 60 |
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 8a7bfb1b6ca0..3af4ffd591b9 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #define IOMMU_READ (1) | 22 | #define IOMMU_READ (1) |
| 23 | #define IOMMU_WRITE (2) | 23 | #define IOMMU_WRITE (2) |
| 24 | #define IOMMU_CACHE (4) /* DMA cache coherency */ | ||
| 24 | 25 | ||
| 25 | struct device; | 26 | struct device; |
| 26 | 27 | ||
| @@ -28,6 +29,8 @@ struct iommu_domain { | |||
| 28 | void *priv; | 29 | void *priv; |
| 29 | }; | 30 | }; |
| 30 | 31 | ||
| 32 | #define IOMMU_CAP_CACHE_COHERENCY 0x1 | ||
| 33 | |||
| 31 | struct iommu_ops { | 34 | struct iommu_ops { |
| 32 | int (*domain_init)(struct iommu_domain *domain); | 35 | int (*domain_init)(struct iommu_domain *domain); |
| 33 | void (*domain_destroy)(struct iommu_domain *domain); | 36 | void (*domain_destroy)(struct iommu_domain *domain); |
| @@ -39,6 +42,8 @@ struct iommu_ops { | |||
| 39 | size_t size); | 42 | size_t size); |
| 40 | phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, | 43 | phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, |
| 41 | unsigned long iova); | 44 | unsigned long iova); |
| 45 | int (*domain_has_cap)(struct iommu_domain *domain, | ||
| 46 | unsigned long cap); | ||
| 42 | }; | 47 | }; |
| 43 | 48 | ||
| 44 | #ifdef CONFIG_IOMMU_API | 49 | #ifdef CONFIG_IOMMU_API |
| @@ -57,6 +62,8 @@ extern void iommu_unmap_range(struct iommu_domain *domain, unsigned long iova, | |||
| 57 | size_t size); | 62 | size_t size); |
| 58 | extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, | 63 | extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, |
| 59 | unsigned long iova); | 64 | unsigned long iova); |
| 65 | extern int iommu_domain_has_cap(struct iommu_domain *domain, | ||
| 66 | unsigned long cap); | ||
| 60 | 67 | ||
| 61 | #else /* CONFIG_IOMMU_API */ | 68 | #else /* CONFIG_IOMMU_API */ |
| 62 | 69 | ||
| @@ -107,6 +114,12 @@ static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, | |||
| 107 | return 0; | 114 | return 0; |
| 108 | } | 115 | } |
| 109 | 116 | ||
| 117 | static inline int domain_has_cap(struct iommu_domain *domain, | ||
| 118 | unsigned long cap) | ||
| 119 | { | ||
| 120 | return 0; | ||
| 121 | } | ||
| 122 | |||
| 110 | #endif /* CONFIG_IOMMU_API */ | 123 | #endif /* CONFIG_IOMMU_API */ |
| 111 | 124 | ||
| 112 | #endif /* __LINUX_IOMMU_H */ | 125 | #endif /* __LINUX_IOMMU_H */ |
