1 /* 1 /* 2 * This file is subject to the terms and condi 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file COPYING in the main 3 * License. See the file COPYING in the main directory of this archive 4 * for more details. 4 * for more details. 5 */ 5 */ 6 6 7 #include <linux/dma-map-ops.h> 7 #include <linux/dma-map-ops.h> 8 #include <linux/kernel.h> 8 #include <linux/kernel.h> 9 #include <asm/cacheflush.h> 9 #include <asm/cacheflush.h> 10 10 11 #ifndef CONFIG_COLDFIRE 11 #ifndef CONFIG_COLDFIRE 12 void arch_dma_prep_coherent(struct page *page, 12 void arch_dma_prep_coherent(struct page *page, size_t size) 13 { 13 { 14 cache_push(page_to_phys(page), size); 14 cache_push(page_to_phys(page), size); 15 } 15 } 16 16 17 pgprot_t pgprot_dmacoherent(pgprot_t prot) 17 pgprot_t pgprot_dmacoherent(pgprot_t prot) 18 { 18 { 19 if (CPU_IS_040_OR_060) { 19 if (CPU_IS_040_OR_060) { 20 pgprot_val(prot) &= ~_PAGE_CAC 20 pgprot_val(prot) &= ~_PAGE_CACHE040; 21 pgprot_val(prot) |= _PAGE_GLOB 21 pgprot_val(prot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; 22 } else { 22 } else { 23 pgprot_val(prot) |= _PAGE_NOCA 23 pgprot_val(prot) |= _PAGE_NOCACHE030; 24 } 24 } 25 return prot; 25 return prot; 26 } 26 } 27 #endif /* CONFIG_MMU && !CONFIG_COLDFIRE */ 27 #endif /* CONFIG_MMU && !CONFIG_COLDFIRE */ 28 28 29 void arch_sync_dma_for_device(phys_addr_t hand 29 void arch_sync_dma_for_device(phys_addr_t handle, size_t size, 30 enum dma_data_direction dir) 30 enum dma_data_direction dir) 31 { 31 { 32 switch (dir) { 32 switch (dir) { 33 case DMA_BIDIRECTIONAL: 33 case DMA_BIDIRECTIONAL: 34 case DMA_TO_DEVICE: 34 case DMA_TO_DEVICE: 35 cache_push(handle, size); 35 cache_push(handle, size); 36 break; 36 break; 37 case DMA_FROM_DEVICE: 37 case DMA_FROM_DEVICE: 38 cache_clear(handle, size); 38 cache_clear(handle, size); 39 break; 39 break; 40 default: 40 default: 41 pr_err_ratelimited("dma_sync_s 41 pr_err_ratelimited("dma_sync_single_for_device: unsupported dir %u\n", 42 dir); 42 dir); 43 break; 43 break; 44 } 44 } 45 } 45 } 46 46
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.