diff options
author | Andrzej Pietrasiewicz <andrzej.p@samsung.com> | 2012-03-27 08:28:18 -0400 |
---|---|---|
committer | Marek Szyprowski <m.szyprowski@samsung.com> | 2012-03-28 10:36:31 -0400 |
commit | baa676fcf8d555269bd0a5a2496782beee55824d (patch) | |
tree | b92ef75b5a1bf6ff38222fb5aaeb0c64b2c88dc9 /arch/ia64 | |
parent | 613c4578d4079a14dbee76ef7e0c80f635522fe3 (diff) |
X86 & IA64: adapt for dma_map_ops changes
Adapt core x86 and IA64 architecture code for dma_map_ops changes: replace
alloc/free_coherent with generic alloc/free methods.
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
[removed swiotlb related changes and replaced it with wrappers,
merged with IA64 patch to avoid inter-patch dependences in intel-iommu code]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/hp/common/sba_iommu.c | 11 | ||||
-rw-r--r-- | arch/ia64/include/asm/dma-mapping.h | 18 | ||||
-rw-r--r-- | arch/ia64/kernel/pci-swiotlb.c | 14 | ||||
-rw-r--r-- | arch/ia64/sn/pci/pci_dma.c | 9 |
4 files changed, 34 insertions, 18 deletions
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index f5f4ef149aac..e5eb9c4b2198 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c | |||
@@ -1130,7 +1130,8 @@ void sba_unmap_single_attrs(struct device *dev, dma_addr_t iova, size_t size, | |||
1130 | * See Documentation/DMA-API-HOWTO.txt | 1130 | * See Documentation/DMA-API-HOWTO.txt |
1131 | */ | 1131 | */ |
1132 | static void * | 1132 | static void * |
1133 | sba_alloc_coherent (struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags) | 1133 | sba_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, |
1134 | gfp_t flags, struct dma_attrs *attrs) | ||
1134 | { | 1135 | { |
1135 | struct ioc *ioc; | 1136 | struct ioc *ioc; |
1136 | void *addr; | 1137 | void *addr; |
@@ -1192,8 +1193,8 @@ sba_alloc_coherent (struct device *dev, size_t size, dma_addr_t *dma_handle, gfp | |||
1192 | * | 1193 | * |
1193 | * See Documentation/DMA-API-HOWTO.txt | 1194 | * See Documentation/DMA-API-HOWTO.txt |
1194 | */ | 1195 | */ |
1195 | static void sba_free_coherent (struct device *dev, size_t size, void *vaddr, | 1196 | static void sba_free_coherent(struct device *dev, size_t size, void *vaddr, |
1196 | dma_addr_t dma_handle) | 1197 | dma_addr_t dma_handle, struct dma_attrs *attrs) |
1197 | { | 1198 | { |
1198 | sba_unmap_single_attrs(dev, dma_handle, size, 0, NULL); | 1199 | sba_unmap_single_attrs(dev, dma_handle, size, 0, NULL); |
1199 | free_pages((unsigned long) vaddr, get_order(size)); | 1200 | free_pages((unsigned long) vaddr, get_order(size)); |
@@ -2213,8 +2214,8 @@ sba_page_override(char *str) | |||
2213 | __setup("sbapagesize=",sba_page_override); | 2214 | __setup("sbapagesize=",sba_page_override); |
2214 | 2215 | ||
2215 | struct dma_map_ops sba_dma_ops = { | 2216 | struct dma_map_ops sba_dma_ops = { |
2216 | .alloc_coherent = sba_alloc_coherent, | 2217 | .alloc = sba_alloc_coherent, |
2217 | .free_coherent = sba_free_coherent, | 2218 | .free = sba_free_coherent, |
2218 | .map_page = sba_map_page, | 2219 | .map_page = sba_map_page, |
2219 | .unmap_page = sba_unmap_page, | 2220 | .unmap_page = sba_unmap_page, |
2220 | .map_sg = sba_map_sg_attrs, | 2221 | .map_sg = sba_map_sg_attrs, |
diff --git a/arch/ia64/include/asm/dma-mapping.h b/arch/ia64/include/asm/dma-mapping.h index 4336d080b241..4f5e8148440d 100644 --- a/arch/ia64/include/asm/dma-mapping.h +++ b/arch/ia64/include/asm/dma-mapping.h | |||
@@ -23,23 +23,29 @@ extern void machvec_dma_sync_single(struct device *, dma_addr_t, size_t, | |||
23 | extern void machvec_dma_sync_sg(struct device *, struct scatterlist *, int, | 23 | extern void machvec_dma_sync_sg(struct device *, struct scatterlist *, int, |
24 | enum dma_data_direction); | 24 | enum dma_data_direction); |
25 | 25 | ||
26 | static inline void *dma_alloc_coherent(struct device *dev, size_t size, | 26 | #define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL) |
27 | dma_addr_t *daddr, gfp_t gfp) | 27 | |
28 | static inline void *dma_alloc_attrs(struct device *dev, size_t size, | ||
29 | dma_addr_t *daddr, gfp_t gfp, | ||
30 | struct dma_attrs *attrs) | ||
28 | { | 31 | { |
29 | struct dma_map_ops *ops = platform_dma_get_ops(dev); | 32 | struct dma_map_ops *ops = platform_dma_get_ops(dev); |
30 | void *caddr; | 33 | void *caddr; |
31 | 34 | ||
32 | caddr = ops->alloc_coherent(dev, size, daddr, gfp); | 35 | caddr = ops->alloc(dev, size, daddr, gfp, attrs); |
33 | debug_dma_alloc_coherent(dev, size, *daddr, caddr); | 36 | debug_dma_alloc_coherent(dev, size, *daddr, caddr); |
34 | return caddr; | 37 | return caddr; |
35 | } | 38 | } |
36 | 39 | ||
37 | static inline void dma_free_coherent(struct device *dev, size_t size, | 40 | #define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) |
38 | void *caddr, dma_addr_t daddr) | 41 | |
42 | static inline void dma_free_attrs(struct device *dev, size_t size, | ||
43 | void *caddr, dma_addr_t daddr, | ||
44 | struct dma_attrs *attrs) | ||
39 | { | 45 | { |
40 | struct dma_map_ops *ops = platform_dma_get_ops(dev); | 46 | struct dma_map_ops *ops = platform_dma_get_ops(dev); |
41 | debug_dma_free_coherent(dev, size, caddr, daddr); | 47 | debug_dma_free_coherent(dev, size, caddr, daddr); |
42 | ops->free_coherent(dev, size, caddr, daddr); | 48 | ops->free(dev, size, caddr, daddr, attrs); |
43 | } | 49 | } |
44 | 50 | ||
45 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 51 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
diff --git a/arch/ia64/kernel/pci-swiotlb.c b/arch/ia64/kernel/pci-swiotlb.c index d9485d952ed0..939260aeac98 100644 --- a/arch/ia64/kernel/pci-swiotlb.c +++ b/arch/ia64/kernel/pci-swiotlb.c | |||
@@ -15,16 +15,24 @@ int swiotlb __read_mostly; | |||
15 | EXPORT_SYMBOL(swiotlb); | 15 | EXPORT_SYMBOL(swiotlb); |
16 | 16 | ||
17 | static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, | 17 | static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, |
18 | dma_addr_t *dma_handle, gfp_t gfp) | 18 | dma_addr_t *dma_handle, gfp_t gfp, |
19 | struct dma_attrs *attrs) | ||
19 | { | 20 | { |
20 | if (dev->coherent_dma_mask != DMA_BIT_MASK(64)) | 21 | if (dev->coherent_dma_mask != DMA_BIT_MASK(64)) |
21 | gfp |= GFP_DMA; | 22 | gfp |= GFP_DMA; |
22 | return swiotlb_alloc_coherent(dev, size, dma_handle, gfp); | 23 | return swiotlb_alloc_coherent(dev, size, dma_handle, gfp); |
23 | } | 24 | } |
24 | 25 | ||
26 | static void ia64_swiotlb_free_coherent(struct device *dev, size_t size, | ||
27 | void *vaddr, dma_addr_t dma_addr, | ||
28 | struct dma_attrs *attrs) | ||
29 | { | ||
30 | swiotlb_free_coherent(dev, size, vaddr, dma_addr); | ||
31 | } | ||
32 | |||
25 | struct dma_map_ops swiotlb_dma_ops = { | 33 | struct dma_map_ops swiotlb_dma_ops = { |
26 | .alloc_coherent = ia64_swiotlb_alloc_coherent, | 34 | .alloc = ia64_swiotlb_alloc_coherent, |
27 | .free_coherent = swiotlb_free_coherent, | 35 | .free = ia64_swiotlb_free_coherent, |
28 | .map_page = swiotlb_map_page, | 36 | .map_page = swiotlb_map_page, |
29 | .unmap_page = swiotlb_unmap_page, | 37 | .unmap_page = swiotlb_unmap_page, |
30 | .map_sg = swiotlb_map_sg_attrs, | 38 | .map_sg = swiotlb_map_sg_attrs, |
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index a9d310de57da..3290d6e00c31 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c | |||
@@ -76,7 +76,8 @@ EXPORT_SYMBOL(sn_dma_set_mask); | |||
76 | * more information. | 76 | * more information. |
77 | */ | 77 | */ |
78 | static void *sn_dma_alloc_coherent(struct device *dev, size_t size, | 78 | static void *sn_dma_alloc_coherent(struct device *dev, size_t size, |
79 | dma_addr_t * dma_handle, gfp_t flags) | 79 | dma_addr_t * dma_handle, gfp_t flags, |
80 | struct dma_attrs *attrs) | ||
80 | { | 81 | { |
81 | void *cpuaddr; | 82 | void *cpuaddr; |
82 | unsigned long phys_addr; | 83 | unsigned long phys_addr; |
@@ -137,7 +138,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size, | |||
137 | * any associated IOMMU mappings. | 138 | * any associated IOMMU mappings. |
138 | */ | 139 | */ |
139 | static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, | 140 | static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, |
140 | dma_addr_t dma_handle) | 141 | dma_addr_t dma_handle, struct dma_attrs *attrs) |
141 | { | 142 | { |
142 | struct pci_dev *pdev = to_pci_dev(dev); | 143 | struct pci_dev *pdev = to_pci_dev(dev); |
143 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); | 144 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); |
@@ -466,8 +467,8 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size) | |||
466 | } | 467 | } |
467 | 468 | ||
468 | static struct dma_map_ops sn_dma_ops = { | 469 | static struct dma_map_ops sn_dma_ops = { |
469 | .alloc_coherent = sn_dma_alloc_coherent, | 470 | .alloc = sn_dma_alloc_coherent, |
470 | .free_coherent = sn_dma_free_coherent, | 471 | .free = sn_dma_free_coherent, |
471 | .map_page = sn_dma_map_page, | 472 | .map_page = sn_dma_map_page, |
472 | .unmap_page = sn_dma_unmap_page, | 473 | .unmap_page = sn_dma_unmap_page, |
473 | .map_sg = sn_dma_map_sg, | 474 | .map_sg = sn_dma_map_sg, |