1 void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, 2 size_t size, 3 enum dma_data_direction dir) 4 5 void dma_sync_single_for_device(struct device *dev, 6 dma_addr_t addr, size_t size, 7 enum dma_data_direction dir) 8 9 void 10 dma_sync_sg_for_cpu(stru...
dma_sync_single_for_cpu(dev, dma_handle, size, direction); 或者: dma_sync_sg_for_cpu(dev, sglist, nents, direction); 作为适当的。 然后,如果您希望设备再次访问 DMA 区域,请完成对 CPU 的数据访问,然后在实际将缓冲区提供给硬件调用之前: dma_sync_single_for_device(dev, dma_handle, size, d...
dma_unmap_sg(dev, sglist, nents, direction) 在流式DMA映射取消映射之前,CPU不应该访问DMA buffer,如果需要访问,则必须在DMA传输后相应地调用如下函数。 dma_sync_single_for_cpu(dev, dma_handle, size, direction); dma_sync_sg_for_cpu(dev, sglist, nents, direction); CPU访问结束后,将buffer还给...
dma->tx_transfer_addr = dma->tx_addr + xmit->tail;/*将cache的数据刷到内存*/dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr, dma->tx_size, DMA_TO_DEVICE);/** 申请发送描述符,然后提交给pl330控制器驱动,然后,启动DMA传输*/dma->tx_desc = dmaengine_prep_slave_si...
(1). 为了避免高速缓存一致性问题,驱动程序在开始从RAM到设备的DMA数据传输之前,如果有必要,应该调用dma_sync_single_for_device()函数刷新与DMA缓冲区对应的高速缓存行。 (2). 从设备到RAM的一次DMA数据传送完成之前设备驱动程序是不可以访问内存缓冲区的,但如果有必要的话,驱动程序在读缓冲区之前,应该调用dma_...
201 static struct sysdev_driver s3c2440_dma_driver = { 202 .add = s3c2440_dma_add, 203 }; s3c2440_dma_add做了一系列的初始化工作,相应的代码如下: 194 static int __init s3c2440_dma_add(struct sys_device *sysdev) 195 { 196 s3c2410_dma_init(); ...
void dma_sync_single_for_cpu(struct device *dev,dma_addr_t dma_handle_t bus_addr,size_t size, enum dma_data_direction direction);//将DMA拥有权还给设备 void dma_sync_single_for_device(struct device *dev,dma_addr_t dma_handle_t bus_addr,size_t size, enum dma_data_direction direction...
void*vaddr, dma_addr_t dma_handle, structdma_attrs *attrs); int(*mmap)(structdevice *,structvm_area_struct *, void*, dma_addr_t,size_t,structdma_attrs *attrs); int(*get_sgtable)(structdevice *dev,structsg_table *sgt,void*, ...
int request_dma(unsigned int chan, const char *device_id); /** * dma_alloc_coherent - allocate consistent memory for DMA * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @size: required memory size
如果有必要,应该调⽤dma_sync_single_for_device()函数刷新与DMA缓冲区对应的⾼速缓存⾏。(2). 从设备到RAM的⼀次DMA数据传送完成之前设备驱动程序是不可以访问内存缓冲区 的,但如果有必要的话,驱动程序在读缓冲区之前,应该调⽤dma_sync_single_for_cpu()函数使相应的硬件⾼速缓存⾏⽆效。(3)...