diff options
Diffstat (limited to 'arch/powerpc/kernel/dma.c')
| -rw-r--r-- | arch/powerpc/kernel/dma.c | 36 | 
1 files changed, 19 insertions, 17 deletions
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 289be751cd7..355b9d84b0f 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c @@ -67,6 +67,24 @@ void dma_direct_free_coherent(struct device *dev, size_t size,  #endif  } +int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma, +			     void *cpu_addr, dma_addr_t handle, size_t size, +			     struct dma_attrs *attrs) +{ +	unsigned long pfn; + +#ifdef CONFIG_NOT_COHERENT_CACHE +	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); +	pfn = __dma_get_coherent_pfn((unsigned long)cpu_addr); +#else +	pfn = page_to_pfn(virt_to_page(cpu_addr)); +#endif +	return remap_pfn_range(vma, vma->vm_start, +			       pfn + vma->vm_pgoff, +			       vma->vm_end - vma->vm_start, +			       vma->vm_page_prot); +} +  static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,  			     int nents, enum dma_data_direction direction,  			     struct dma_attrs *attrs) @@ -156,6 +174,7 @@ static inline void dma_direct_sync_single(struct device *dev,  struct dma_map_ops dma_direct_ops = {  	.alloc				= dma_direct_alloc_coherent,  	.free				= dma_direct_free_coherent, +	.mmap				= dma_direct_mmap_coherent,  	.map_sg				= dma_direct_map_sg,  	.unmap_sg			= dma_direct_unmap_sg,  	.dma_supported			= dma_direct_dma_supported, @@ -219,20 +238,3 @@ static int __init dma_init(void)  }  fs_initcall(dma_init); -int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, -		      void *cpu_addr, dma_addr_t handle, size_t size) -{ -	unsigned long pfn; - -#ifdef CONFIG_NOT_COHERENT_CACHE -	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); -	pfn = __dma_get_coherent_pfn((unsigned long)cpu_addr); -#else -	pfn = page_to_pfn(virt_to_page(cpu_addr)); -#endif -	return remap_pfn_range(vma, vma->vm_start, -			       pfn + vma->vm_pgoff, -			       vma->vm_end - vma->vm_start, -			       vma->vm_page_prot); -} -EXPORT_SYMBOL_GPL(dma_mmap_coherent);  |