| .. | .. |
|---|
| 18 | 18 | #include <linux/cache.h> |
|---|
| 19 | 19 | #include <asm/cacheflush.h> |
|---|
| 20 | 20 | |
|---|
| 21 | | -void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr, |
|---|
| 22 | | - size_t size, enum dma_data_direction dir) |
|---|
| 21 | +void arch_sync_dma_for_device(phys_addr_t paddr, size_t size, |
|---|
| 22 | + enum dma_data_direction dir) |
|---|
| 23 | 23 | { |
|---|
| 24 | 24 | void *vaddr = phys_to_virt(paddr); |
|---|
| 25 | 25 | |
|---|
| .. | .. |
|---|
| 42 | 42 | } |
|---|
| 43 | 43 | } |
|---|
| 44 | 44 | |
|---|
| 45 | | -void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr, |
|---|
| 46 | | - size_t size, enum dma_data_direction dir) |
|---|
| 45 | +void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size, |
|---|
| 46 | + enum dma_data_direction dir) |
|---|
| 47 | 47 | { |
|---|
| 48 | 48 | void *vaddr = phys_to_virt(paddr); |
|---|
| 49 | 49 | |
|---|
| .. | .. |
|---|
| 60 | 60 | } |
|---|
| 61 | 61 | } |
|---|
| 62 | 62 | |
|---|
| 63 | | -void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, |
|---|
| 64 | | - gfp_t gfp, unsigned long attrs) |
|---|
| 63 | +void arch_dma_prep_coherent(struct page *page, size_t size) |
|---|
| 65 | 64 | { |
|---|
| 66 | | - void *ret; |
|---|
| 65 | + unsigned long start = (unsigned long)page_address(page); |
|---|
| 67 | 66 | |
|---|
| 68 | | - /* optimized page clearing */ |
|---|
| 69 | | - gfp |= __GFP_ZERO; |
|---|
| 70 | | - |
|---|
| 71 | | - if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff)) |
|---|
| 72 | | - gfp |= GFP_DMA; |
|---|
| 73 | | - |
|---|
| 74 | | - ret = (void *) __get_free_pages(gfp, get_order(size)); |
|---|
| 75 | | - if (ret != NULL) { |
|---|
| 76 | | - *dma_handle = virt_to_phys(ret); |
|---|
| 77 | | - flush_dcache_range((unsigned long) ret, |
|---|
| 78 | | - (unsigned long) ret + size); |
|---|
| 79 | | - ret = UNCAC_ADDR(ret); |
|---|
| 80 | | - } |
|---|
| 81 | | - |
|---|
| 82 | | - return ret; |
|---|
| 67 | + flush_dcache_range(start, start + size); |
|---|
| 83 | 68 | } |
|---|
| 84 | 69 | |
|---|
| 85 | | -void arch_dma_free(struct device *dev, size_t size, void *vaddr, |
|---|
| 86 | | - dma_addr_t dma_handle, unsigned long attrs) |
|---|
| 70 | +void *arch_dma_set_uncached(void *ptr, size_t size) |
|---|
| 87 | 71 | { |
|---|
| 88 | | - unsigned long addr = (unsigned long) CAC_ADDR((unsigned long) vaddr); |
|---|
| 72 | + unsigned long addr = (unsigned long)ptr; |
|---|
| 89 | 73 | |
|---|
| 90 | | - free_pages(addr, get_order(size)); |
|---|
| 74 | + addr |= CONFIG_NIOS2_IO_REGION_BASE; |
|---|
| 75 | + |
|---|
| 76 | + return (void *)ptr; |
|---|
| 91 | 77 | } |
|---|