当DMA传输完成的时候,程序应该调用dma_unmap_page()函数umap dma buffer。例如:在DMA完成传输后会通过中断通知CPU,而在interrupt handler中可以调用dma_unmap_page()函数。 2、map/umap多个形成scatterlist的dma buffer 在scatterlist的情况下,你要映射的对象是分散的若干段DMA buffer,示例代码如下: int i, count = ...
void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle) { unsigned long flags; struct dma_page *page; size_t offset; void *retval; might_sleep_if(gfpflags_allow_blocking(mem_flags)); spin_lock_irqsave(&pool->lock, flags); list_for_each_entry(page, &p...
dma_map_page 和 dma_unmap_page dma_addr_tdma_map_page(structdevice *dev,structpage *page,unsignedlongoffset,size_tsize,enumdma_data_direction direction) voiddma_unmap_page(structdevice *dev,dma_addr_tdma_address,size_tsize,enumdma_data_direction direction) 用于页面的映射和取消映射的API。所有...
当DMA传输完成的时候,程序应该调用dma_unmap_page()函数umap dma buffer。例如:在DMA完成传输后会通过中断通知CPU,而在interrupt handler中可以调用dma_unmap_page()函数。 2、map/umap多个形成scatterlist的dma buffer 在scatterlist的情况下,你要映射的对象是分散的若干段DMA buffer,示例代码如下: int i, count = ...
像这样对单个映射使用 CPU 指针有一个缺点:您无法以这种方式引用 HIGHMEM 内存。 因此,存在类似于 dma{map,unmap}single() 的映射/取消映射接口对。 这些接口处理页/偏移量对而不是 CPU 指针。 具体来说 代码语言:javascript 复制 struct device*dev=&my_dev->dev;dma_addr_t dma_handle;struct page*page=...
.unmap_page = __swiotlb_unmap_page, .map_sg = __swiotlb_map_sg_attrs, //dma_map_sg .unmap_sg = __swiotlb_unmap_sg_attrs, .sync_single_for_cpu = __swiotlb_sync_single_for_cpu, .sync_single_for_device = __swiotlb_sync_single_for_device, ...
create( )函数为设备初始化DMA一致性内存的内存池。它必须要在可睡眠上下文调用。 name为内存池的名字(就像struct kmem_cache name一样)。dev及size就如dma_alloc_coherent()参数一样。align为设备硬件需要的对齐大小(单位为字节,必须为2的幂次方)。如果设备没有边界限制,可以设置该参数为0。如果设置为4096,则表示...
dma_addr_t (*map_page)(structdevice *dev,structpage *page, unsignedlongoffset,size_tsize, enumdma_data_direction dir, structdma_attrs *attrs); void(*unmap_page)(structdevice *dev, dma_addr_t dma_handle, size_tsize,enumdma_data_direction dir, ...
.unmap_page= mips_dma_unmap_page, .map_sg= mips_dma_map_sg, .unmap_sg= mips_dma_unmap_sg, .sync_single_for_cpu= mips_dma_sync_single_for_cpu, .sync_single_for_device= mips_dma_sync_single_for_device, .sync_sg_for_cpu= mips_dma_sync_sg_for_cpu, ...
传输完毕后FPGA发送一个Tx数据读完成中断,即EVENT_TXN_DONE消息类型。这里比较好处理,调用dma_unmap_...