diff options
| author | Becky Bruce <beckyb@kernel.crashing.org> | 2009-09-21 08:26:34 +0000 | 
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-09-24 15:31:43 +1000 | 
| commit | 1cebd7a0f62804ca24f7b7b35e8105000b9e879a (patch) | |
| tree | 57f04a5882d595cab859e2820d998bcde4660074 /arch/powerpc | |
| parent | b9eceb2307f8dda124669a9dc213aad8c1569b5a (diff) | |
| download | olio-linux-3.10-1cebd7a0f62804ca24f7b7b35e8105000b9e879a.tar.xz olio-linux-3.10-1cebd7a0f62804ca24f7b7b35e8105000b9e879a.zip  | |
powerpc: Rename get_dma_direct_offset get_dma_offset
The former is no longer really accurate with the swiotlb case now
a possibility.  I also move it into dma-mapping.h - it no longer
needs to be in dma.c, and there are about to be some more accessors
that should all end up in the same place.  A comment is added to
indicate that this function is not used in configs where there is no
simple dma offset, such as the iommu case.
Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/include/asm/dma-mapping.h | 21 | ||||
| -rw-r--r-- | arch/powerpc/kernel/dma.c | 15 | 
2 files changed, 22 insertions, 14 deletions
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index cb2ca41dd52..34b919fe8cd 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h @@ -26,7 +26,6 @@ extern void *dma_direct_alloc_coherent(struct device *dev, size_t size,  extern void dma_direct_free_coherent(struct device *dev, size_t size,  				     void *vaddr, dma_addr_t dma_handle); -extern unsigned long get_dma_direct_offset(struct device *dev);  #ifdef CONFIG_NOT_COHERENT_CACHE  /* @@ -90,6 +89,22 @@ static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops)  	dev->archdata.dma_ops = ops;  } +/* + * get_dma_offset() + * + * Get the dma offset on configurations where the dma address can be determined + * from the physical address by looking at a simple offset.  Direct dma and + * swiotlb use this function, but it is typically not used by implementations + * with an iommu. + */ +static inline unsigned long get_dma_offset(struct device *dev) +{ +	if (dev) +		return (unsigned long)dev->archdata.dma_data; + +	return PCI_DRAM_OFFSET; +} +  /* this will be removed soon */  #define flush_write_buffers() @@ -181,12 +196,12 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)  static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr)  { -	return paddr + get_dma_direct_offset(dev); +	return paddr + get_dma_offset(dev);  }  static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr)  { -	return daddr - get_dma_direct_offset(dev); +	return daddr - get_dma_offset(dev);  }  #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 21b784d7e7d..6215062caf8 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c @@ -21,13 +21,6 @@   * default the offset is PCI_DRAM_OFFSET.   */ -unsigned long get_dma_direct_offset(struct device *dev) -{ -	if (dev) -		return (unsigned long)dev->archdata.dma_data; - -	return PCI_DRAM_OFFSET; -}  void *dma_direct_alloc_coherent(struct device *dev, size_t size,  				dma_addr_t *dma_handle, gfp_t flag) @@ -37,7 +30,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,  	ret = __dma_alloc_coherent(dev, size, dma_handle, flag);  	if (ret == NULL)  		return NULL; -	*dma_handle += get_dma_direct_offset(dev); +	*dma_handle += get_dma_offset(dev);  	return ret;  #else  	struct page *page; @@ -51,7 +44,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,  		return NULL;  	ret = page_address(page);  	memset(ret, 0, size); -	*dma_handle = virt_to_abs(ret) + get_dma_direct_offset(dev); +	*dma_handle = virt_to_abs(ret) + get_dma_offset(dev);  	return ret;  #endif @@ -75,7 +68,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,  	int i;  	for_each_sg(sgl, sg, nents, i) { -		sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); +		sg->dma_address = sg_phys(sg) + get_dma_offset(dev);  		sg->dma_length = sg->length;  		__dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);  	} @@ -110,7 +103,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev,  {  	BUG_ON(dir == DMA_NONE);  	__dma_sync_page(page, offset, size, dir); -	return page_to_phys(page) + offset + get_dma_direct_offset(dev); +	return page_to_phys(page) + offset + get_dma_offset(dev);  }  static inline void dma_direct_unmap_page(struct device *dev,  |