1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Dummy DMA ops that always fail. 4 */ 5 #include <linux/dma-map-ops.h> 6 7 static int dma_dummy_mmap(struct device *dev, struct vm_area_struct *vma, 8 void *cpu_addr, dma_addr_t dma_addr, size_t size, 9 unsigned long attrs) 10 { 11 return -ENXIO; 12 } 13 14 static dma_addr_t dma_dummy_map_phys(struct device *dev, phys_addr_t phys, 15 size_t size, enum dma_data_direction dir, unsigned long attrs) 16 { 17 return DMA_MAPPING_ERROR; 18 } 19 static void dma_dummy_unmap_phys(struct device *dev, dma_addr_t dma_handle, 20 size_t size, enum dma_data_direction dir, unsigned long attrs) 21 { 22 /* 23 * Dummy ops doesn't support map_phys, so unmap_page should never be 24 * called. 25 */ 26 WARN_ON_ONCE(true); 27 } 28 29 static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl, 30 int nelems, enum dma_data_direction dir, 31 unsigned long attrs) 32 { 33 return -EINVAL; 34 } 35 36 static void dma_dummy_unmap_sg(struct device *dev, struct scatterlist *sgl, 37 int nelems, enum dma_data_direction dir, 38 unsigned long attrs) 39 { 40 /* 41 * Dummy ops doesn't support map_sg, so unmap_sg should never be called. 42 */ 43 WARN_ON_ONCE(true); 44 } 45 46 static int dma_dummy_supported(struct device *hwdev, u64 mask) 47 { 48 return 0; 49 } 50 51 const struct dma_map_ops dma_dummy_ops = { 52 .mmap = dma_dummy_mmap, 53 .map_phys = dma_dummy_map_phys, 54 .unmap_phys = dma_dummy_unmap_phys, 55 .map_sg = dma_dummy_map_sg, 56 .unmap_sg = dma_dummy_unmap_sg, 57 .dma_supported = dma_dummy_supported, 58 }; 59