1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* Copyright (C) 2013--2024 Intel Corporation */ 3 4 #ifndef IPU6_DMA_H 5 #define IPU6_DMA_H 6 7 #include <linux/iova.h> 8 #include <linux/scatterlist.h> 9 #include <linux/types.h> 10 11 #include "ipu6-bus.h" 12 13 struct ipu6_mmu_info; 14 15 struct ipu6_dma_mapping { 16 struct ipu6_mmu_info *mmu_info; 17 struct iova_domain iovad; 18 }; 19 20 void ipu6_dma_sync_single(struct ipu6_bus_device *sys, dma_addr_t dma_handle, 21 size_t size); 22 void ipu6_dma_sync_sg(struct ipu6_bus_device *sys, struct scatterlist *sglist, 23 int nents); 24 void ipu6_dma_sync_sgtable(struct ipu6_bus_device *sys, struct sg_table *sgt); 25 void *ipu6_dma_alloc(struct ipu6_bus_device *sys, size_t size, 26 dma_addr_t *dma_handle, gfp_t gfp, 27 unsigned long attrs); 28 void ipu6_dma_free(struct ipu6_bus_device *sys, size_t size, void *vaddr, 29 dma_addr_t dma_handle, unsigned long attrs); 30 int ipu6_dma_mmap(struct ipu6_bus_device *sys, struct vm_area_struct *vma, 31 void *addr, dma_addr_t iova, size_t size, 32 unsigned long attrs); 33 int ipu6_dma_map_sg(struct ipu6_bus_device *sys, struct scatterlist *sglist, 34 int nents, enum dma_data_direction dir, 35 unsigned long attrs); 36 void ipu6_dma_unmap_sg(struct ipu6_bus_device *sys, struct scatterlist *sglist, 37 int nents, enum dma_data_direction dir, 38 unsigned long attrs); 39 int ipu6_dma_map_sgtable(struct ipu6_bus_device *sys, struct sg_table *sgt, 40 enum dma_data_direction dir, unsigned long attrs); 41 void ipu6_dma_unmap_sgtable(struct ipu6_bus_device *sys, struct sg_table *sgt, 42 enum dma_data_direction dir, unsigned long attrs); 43 #endif /* IPU6_DMA_H */ 44