[AVR32] Implement dma_{alloc,free}_writecombine()

Implement dma_alloc_writecombine() and its dma_free_writecombine()
counterpart. These will do basically the same thing as
dma_alloc_coherent() except that the virtual mapping will allow
write buffering, causing better performance for certain use cases
like frame buffers.

The same API is already available on ARM.

Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
This commit is contained in:
Haavard Skinnemoen 2007-03-20 14:41:13 +01:00
Родитель e89b064a4f
Коммит a492dbb9e3
1 изменённых файлов: 8 добавлений и 4 удалений

Просмотреть файл

@ -112,16 +112,21 @@ void dma_free_coherent(struct device *dev, size_t size,
} }
EXPORT_SYMBOL(dma_free_coherent); EXPORT_SYMBOL(dma_free_coherent);
#if 0
void *dma_alloc_writecombine(struct device *dev, size_t size, void *dma_alloc_writecombine(struct device *dev, size_t size,
dma_addr_t *handle, gfp_t gfp) dma_addr_t *handle, gfp_t gfp)
{ {
struct page *page; struct page *page;
dma_addr_t phys;
page = __dma_alloc(dev, size, handle, gfp); page = __dma_alloc(dev, size, handle, gfp);
if (!page)
return NULL;
phys = page_to_phys(page);
*handle = phys;
/* Now, map the page into P3 with write-combining turned on */ /* Now, map the page into P3 with write-combining turned on */
return __ioremap(page_to_phys(page), size, _PAGE_BUFFER); return __ioremap(phys, size, _PAGE_BUFFER);
} }
EXPORT_SYMBOL(dma_alloc_writecombine); EXPORT_SYMBOL(dma_alloc_writecombine);
@ -132,8 +137,7 @@ void dma_free_writecombine(struct device *dev, size_t size,
iounmap(cpu_addr); iounmap(cpu_addr);
page = bus_to_page(handle); page = phys_to_page(handle);
__dma_free(dev, size, page, handle); __dma_free(dev, size, page, handle);
} }
EXPORT_SYMBOL(dma_free_writecombine); EXPORT_SYMBOL(dma_free_writecombine);
#endif