1 int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, 2 int nents, enum dma_data_direction dir, 3 unsigned long attrs) 4 5 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, 6 int nents, enum dma_data_direction dir, 7 unsigned long attrs) 8 9 //...
#define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0) #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0) #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0) #define dma_map_page(d, p, o, s, r)...
dma_addr_tdma_map_single_attrs(structdevice *dev,void*cpu_addr,size_tsize,enumdma_data_direction dir,unsignedlongattrs) voiddma_unmap_single_attrs(structdevice *dev,dma_addr_tdma_addr,size_tsize,enumdma_data_direction dir,unsignedlongattrs) intdma_map_sg_attrs(structdevice *dev,structscatterli...
我们知道DMA映射有两种方式,一种是一致性映射 dma_alloc_coherent,一种是流式映射 dma_map_single (dma_map_sg可以映射多个dma buffer)。 一致性映射 dma_alloc_coherent dma_alloc_coherent会调用dma_alloc_attrs: static inline void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_...
dma_alloc_coherent->dma_alloc_attrs 根据是否direct(有smmu),分别调用dma_direct_alloc 或者ops->alloc (dma_map_ops) 见上。 iommu_dma_alloc //根据参数 非连续物理内存: iommu_dma_alloc_remap __iommu_dma_alloc_pages //此处分配非连续的物理页 ...
1intdma_map_sg_attrs(structdevice *dev,structscatterlist *sg,2intnents,enumdma_data_direction dir,3unsignedlongattrs)45voiddma_unmap_sg_attrs(structdevice *dev,structscatterlist *sg,6intnents,enumdma_data_direction dir,7unsignedlongattrs)89//返回map后的dma地址和长度10sg_dma_address(structscatt...
dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, ...
dma_set_attr(DMA_ATTR_FOO, &attrs); ... n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr); ... 在映射/取消映射的函数中,可以检查DMA_ATTR_FOO是否存在: void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size...
void dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, ...
intdma_map_sg_attrs(structdevice *dev,structscatterlist *sg,intnents,enumdma_data_direction dir,unsignedlongattrs)voiddma_unmap_sg_attrs(structdevice *dev,structscatterlist *sg,intnents,enumdma_data_direction dir,unsignedlongattrs)// 返回map后的dma地址和长度sg_dma_address(structscatterlist *sg)...