其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围,因为不是所有的硬件设备都能够支持64bit的地址宽度。
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。 /include/linux/dma-mapping.h /* * Set both...
int dma_set_mask_and_coherent(struct device *dev, u64 mask); 这将为流式 API 和连贯 API 一起设置掩码。如果您有一些特殊要求,则可以使用以下两个单独的调用来代替: 流映射的设置是通过调用 dma_set_mask() 来执行的: int dma_set_mask(struct device *dev, u64 mask); 通过调用 dma_set_coherent...
dma_set_mask_and_coherent(&pdev->dev,DMA_BIT_MASK(64))) { pci_using_dac =1; }else{ err =dma_set_mask_and_coherent(&pdev->dev,DMA_BIT_MASK(32));if(err) {pr_err("No usable DMA config, aborting\n");goto err_dma; } } 其中的函数dma_set_mask_and_coherent()用于对dma_mask...
* Note that we don't check the return value from dma_set_coherent_mask * as the DMA API guarantees that the coherent DMA mask can be set to * the same or smaller than the streaming DMA mask. */ staticinlineintdma_set_mask_and_coherent(structdevice*dev,u64mask) { intrc=dma_set_ma...
!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) { pci_using_dac =1; }else{ err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));if(err) { pr_err("No usable DMA config, aborting\n");gotoerr_dma; ...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。
系统I/O 设备驱动程序关于 IOMMU 的配置。这部分通常因具体的硬件系统实现而异。这主要包括调用dma_coerce_mask_and_coherent()/dma_set_mask_and_coherent()函数将 DMA 掩码和一致性 DMA 掩码设置为相同的值,以及配置类似前面提到的 DAA 之类的设备。
例如:err = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));。
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。