Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.2-rc7 172 lines 4.2 kB view raw
1/* DMA mapping. Nothing tricky here, just virt_to_phys */ 2 3#ifndef _ASM_CRIS_DMA_MAPPING_H 4#define _ASM_CRIS_DMA_MAPPING_H 5 6#include <linux/mm.h> 7#include <linux/kernel.h> 8#include <linux/scatterlist.h> 9 10#include <asm/cache.h> 11#include <asm/io.h> 12 13#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 14#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 15 16#ifdef CONFIG_PCI 17#include <asm-generic/dma-coherent.h> 18 19void *dma_alloc_coherent(struct device *dev, size_t size, 20 dma_addr_t *dma_handle, gfp_t flag); 21 22void dma_free_coherent(struct device *dev, size_t size, 23 void *vaddr, dma_addr_t dma_handle); 24#else 25static inline void * 26dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, 27 gfp_t flag) 28{ 29 BUG(); 30 return NULL; 31} 32 33static inline void 34dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, 35 dma_addr_t dma_handle) 36{ 37 BUG(); 38} 39#endif 40static inline dma_addr_t 41dma_map_single(struct device *dev, void *ptr, size_t size, 42 enum dma_data_direction direction) 43{ 44 BUG_ON(direction == DMA_NONE); 45 return virt_to_phys(ptr); 46} 47 48static inline void 49dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, 50 enum dma_data_direction direction) 51{ 52 BUG_ON(direction == DMA_NONE); 53} 54 55static inline int 56dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, 57 enum dma_data_direction direction) 58{ 59 printk("Map sg\n"); 60 return nents; 61} 62 63static inline dma_addr_t 64dma_map_page(struct device *dev, struct page *page, unsigned long offset, 65 size_t size, enum dma_data_direction direction) 66{ 67 BUG_ON(direction == DMA_NONE); 68 return page_to_phys(page) + offset; 69} 70 71static inline void 72dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, 73 enum dma_data_direction direction) 74{ 75 BUG_ON(direction == DMA_NONE); 76} 77 78 79static inline void 80dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, 81 enum dma_data_direction direction) 82{ 83 BUG_ON(direction == DMA_NONE); 84} 85 86static inline void 87dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, 88 enum dma_data_direction direction) 89{ 90} 91 92static inline void 93dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, 94 enum dma_data_direction direction) 95{ 96} 97 98static inline void 99dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle, 100 unsigned long offset, size_t size, 101 enum dma_data_direction direction) 102{ 103} 104 105static inline void 106dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, 107 unsigned long offset, size_t size, 108 enum dma_data_direction direction) 109{ 110} 111 112static inline void 113dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, 114 enum dma_data_direction direction) 115{ 116} 117 118static inline void 119dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, 120 enum dma_data_direction direction) 121{ 122} 123 124static inline int 125dma_mapping_error(struct device *dev, dma_addr_t dma_addr) 126{ 127 return 0; 128} 129 130static inline int 131dma_supported(struct device *dev, u64 mask) 132{ 133 /* 134 * we fall back to GFP_DMA when the mask isn't all 1s, 135 * so we can't guarantee allocations that must be 136 * within a tighter range than GFP_DMA.. 137 */ 138 if(mask < 0x00ffffff) 139 return 0; 140 141 return 1; 142} 143 144static inline int 145dma_set_mask(struct device *dev, u64 mask) 146{ 147 if(!dev->dma_mask || !dma_supported(dev, mask)) 148 return -EIO; 149 150 *dev->dma_mask = mask; 151 152 return 0; 153} 154 155static inline void 156dma_cache_sync(struct device *dev, void *vaddr, size_t size, 157 enum dma_data_direction direction) 158{ 159} 160 161/* drivers/base/dma-mapping.c */ 162extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, 163 void *cpu_addr, dma_addr_t dma_addr, size_t size); 164extern int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, 165 void *cpu_addr, dma_addr_t dma_addr, 166 size_t size); 167 168#define dma_mmap_coherent(d, v, c, h, s) dma_common_mmap(d, v, c, h, s) 169#define dma_get_sgtable(d, t, v, h, s) dma_common_get_sgtable(d, t, v, h, s) 170 171 172#endif