| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 1 | /* DMA mapping. Nothing tricky here, just virt_to_phys */ | 
 | 2 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 | #ifndef _ASM_CRIS_DMA_MAPPING_H | 
 | 4 | #define _ASM_CRIS_DMA_MAPPING_H | 
 | 5 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 6 | #include <linux/mm.h> | 
 | 7 | #include <linux/kernel.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 9 | #include <asm/cache.h> | 
 | 10 | #include <asm/io.h> | 
 | 11 | #include <asm/scatterlist.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 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) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 15 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 16 | #ifdef CONFIG_PCI | 
| Dmitry Baryshkov | 8fa8b9f | 2008-07-20 15:00:32 +0400 | [diff] [blame] | 17 | #include <asm-generic/dma-coherent.h> | 
 | 18 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 19 | void *dma_alloc_coherent(struct device *dev, size_t size, | 
| Al Viro | 43b7eae | 2005-10-21 03:21:13 -0400 | [diff] [blame] | 20 | 			   dma_addr_t *dma_handle, gfp_t flag); | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 21 |  | 
 | 22 | void dma_free_coherent(struct device *dev, size_t size, | 
 | 23 | 			 void *vaddr, dma_addr_t dma_handle); | 
 | 24 | #else | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | static inline void * | 
 | 26 | dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | 
| Al Viro | 43b7eae | 2005-10-21 03:21:13 -0400 | [diff] [blame] | 27 |                    gfp_t flag) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 28 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 29 |         BUG(); | 
 | 30 |         return NULL; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 31 | } | 
 | 32 |  | 
 | 33 | static inline void | 
 | 34 | dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 35 |                     dma_addr_t dma_handle) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 37 |         BUG(); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 38 | } | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 39 | #endif | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | static inline dma_addr_t | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 41 | dma_map_single(struct device *dev, void *ptr, size_t size, | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | 	       enum dma_data_direction direction) | 
 | 43 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 44 | 	BUG_ON(direction == DMA_NONE); | 
 | 45 | 	return virt_to_phys(ptr); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 46 | } | 
 | 47 |  | 
 | 48 | static inline void | 
 | 49 | dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | 
 | 50 | 		 enum dma_data_direction direction) | 
 | 51 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 52 | 	BUG_ON(direction == DMA_NONE); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | } | 
 | 54 |  | 
 | 55 | static inline int | 
 | 56 | dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 
 | 57 | 	   enum dma_data_direction direction) | 
 | 58 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 59 | 	printk("Map sg\n"); | 
 | 60 | 	return nents; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 61 | } | 
 | 62 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 63 | static inline dma_addr_t | 
 | 64 | dma_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 |  | 
 | 71 | static inline void | 
 | 72 | dma_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 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 79 | static inline void | 
 | 80 | dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | 
 | 81 | 	     enum dma_data_direction direction) | 
 | 82 | { | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 83 | 	BUG_ON(direction == DMA_NONE); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 84 | } | 
 | 85 |  | 
 | 86 | static inline void | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 87 | dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, | 
 | 88 | 			enum dma_data_direction direction) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 89 | { | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 90 | } | 
 | 91 |  | 
 | 92 | static inline void | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 93 | dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, | 
 | 94 | 			enum dma_data_direction direction) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 95 | { | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 96 | } | 
 | 97 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 98 | static inline void | 
 | 99 | dma_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 | } | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 104 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 105 | static inline void | 
 | 106 | dma_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 |  | 
 | 112 | static inline void | 
 | 113 | dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, | 
 | 114 | 		    enum dma_data_direction direction) | 
 | 115 | { | 
 | 116 | } | 
 | 117 |  | 
 | 118 | static inline void | 
 | 119 | dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, | 
 | 120 | 		    enum dma_data_direction direction) | 
 | 121 | { | 
 | 122 | } | 
 | 123 |  | 
 | 124 | static inline int | 
| FUJITA Tomonori | 8d8bb39 | 2008-07-25 19:44:49 -0700 | [diff] [blame] | 125 | dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 126 | { | 
 | 127 | 	return 0; | 
 | 128 | } | 
 | 129 |  | 
 | 130 | static inline int | 
 | 131 | dma_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 |  | 
 | 144 | static inline int | 
 | 145 | dma_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 | } | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 154 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 155 | static inline void | 
| Ralf Baechle | d3fa72e | 2006-12-06 20:38:56 -0800 | [diff] [blame] | 156 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 157 | 	       enum dma_data_direction direction) | 
 | 158 | { | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 159 | } | 
 | 160 |  | 
| Mikael Starvik | 59c6113 | 2005-07-27 11:44:40 -0700 | [diff] [blame] | 161 |  | 
 | 162 | #endif |