#define dma_unmap_page(d, a, s, r) dma_unmap_page_attrs(d, a, s, r, 0) 其中对于不支持scatter gather机制的DMA,需要使用dma_map_single或dma_map_page接口。它们的差别在于,dma_map_single会将一块物理上连续的内存,映射为DMA地址,而dma_map_page会将一个内存page映射为DMA地址 由于支持scatter ...
* 物理地址dma_address通过dma_direct_map_page映射得来。 *在mmc_blk_data_prep中已经对每个sg设置了sg->page_link指向了BIO的page结构指针sg_set_page(*sg, page, len, offset); * 此处通过sg_page(sg)获得page结构指针做映射,见dma_direct_map_page */ intdma_direct_map_sg(structdevice *dev,struct...
(dma_is_direct(ops)) addr = dma_direct_map_page(dev, page, offset, size, dir, attrs); else addr = ops->map_page(dev, page, offset, size, dir, attrs); debug_dma_map_page(dev, page, offset, size, dir, addr); return addr; } static inline void dma_unmap_page_attrs(struct ...
paddr = dma_map_single(&bp->pdev->dev, skb->data,bp->rx_buffer_size,DMA_FROM_DEVICE); ... } dma_map_single/dma_unmap_single的定义 dma_map_single()和dma_unmap_single()都在include\linux\dma-mapping.h里定义。如果没有特殊情况,会调用dma_direct_map_page()、dma_direct_unmap_page()。
Streaming DMA(流式DMA) Streaming DMA在访问内存地址时经过cache,是non-coherence设备,通常采用streaming mapping的API进行内存申请,在单次DMA传输时进行map,在传输完成后进行unmap; 2.2 DMA工作方式分类 从DMA工作方式可以分为2类: Block DMA 硬件DMA设计为一次访问操作需要连续内存地址空间; ...
dma_map_single()和dma_unmap_single()都在include\linux\dma-mapping.h里定义。如果没有特殊情况,会调用dma_direct_map_page()、dma_direct_unmap_page()。 arm64的特殊情况包括iommu和Xen虚拟机。 iommu和Xen虚拟机都需要提供dma_map_ops,于是使用其中的map、unmap函数。iommu的dma_map_ops是drivers\iommu\D...
dma_mask:在dma_map_single->dma_map_page,dma_capable用。 先看默认设置。后续可以通过pci_set_dma_mask/pci_set_consistent_dma_mask分别设置 设置: int pci_setup_device(struct pci_dev *dev) { u32 class; u16 cmd; u8 hdr_type; int pos = 0; ...
static int as353x_nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf) { ... #ifdef NAF_USE_DMA_READ info->len = mtd->writesize; /* map CPU buffer(virtual address) to DMA buffer(DMA address) */ ...
Memory Map指的是什么?根据AXI DMA的介绍,AXI DMA提供一个介于AXI4 Memory Mapped 与AXI4 Stream IP之间的高带宽DMA: 原话位于IP参考的page5: The AXI DirectMemory Access (AXI DMA) IP core provides high-bandwidth direct memory accessbetween the AXI4 memory mapped and AXI4-Stream IP interfaces. ...
addr = dma_direct_map_page(dev, page, offset, size, dir, attrs); else addr = ops->map_page(dev, page, offset, size, dir, attrs); debug_dma_map_page(dev, page, offset, size, dir, addr); return addr; } static inline void dma_unmap_page_attrs(struct device *dev, dma_addr_t ...