if (dma_set_mask(dev, DMA_BIT_MASK(64))) { dev_warn(dev, "mydev: No suitable DMA available\n"); goto ignore_this_device; } 相干掩码将始终能够设置与流掩码相同或更小的掩码。然而,对于设备驱动程序仅使用一致分配的罕见情况,必须检查 dma_set_coherent_mask() 的返回值。最后,如果您的设备只能...
intdma_set_mask_and_coherent(structdevice *dev, u64 mask) 该函数也可以分为如下两个函数,如果有需要,可以分别对流式映射设置DMA mask,对一致性分配设置DMA mask。 intdma_set_mask(structdevice *dev, u64 mask);intdma_set_coherent_mask(structdevice *dev, u64 mask); 3. DMA映射的类型 3.1一致性...
int dma_set_mask(struct device *dev, u64 mask); 该掩码显示与设备能寻址能力相应的位 假设dma_set_mask返回0,则对该设备不能使用DMA DMA映射 一个DMA映射是要分配的DMA缓冲区与为该缓冲区生成的、设备可訪问地址的组合 DMA映射建立了一个新的结构类型——dma_addr_t来表示总线地址 依据DMA缓冲区期望...
inline int dma_set_mask_and_coherent(struct device *dev, u64 mask) 流式DMA的寻址范围可通过以下接口设置: inline int dma_set_mask(struct device *dev, u64 mask) 也可以通过以下接口同时设置一致性DMA和流式DMA接口的寻址范围: inline int dma_set_mask_and_coherent(struct device *dev, u64 mask)...
intdma_set_mask(struct device *dev,u64 mask); 1. 比如一个只能访问24位地址的DMA外设,就使用dma_set_mask(dev,0xffffff) 编程流程 下面是在内核程序中使用DMA内存的流程: 一致性DMA 如果在驱动中使用DMA缓冲区,可以使用内核提供的已经考虑到一致性的API: ...
intdma_set_mask(structdevice *dev,u64 mask); AI代码助手复制代码 比如一个只能访问24位地址的DMA外设,就使用dma_set_mask(dev,0xffffff) 编程流程 下面是在内核程序中使用DMA内存的流程: 一致性DMA 如果在驱动中使用DMA缓冲区,可以使用内核提供的已经考虑到一致性的API: ...
在函数rmem_dma_setup()中还会例化reserved_mem.ops,如下: staticconststructreserved_mem_ops rmem_dma_ops = { .device_init = rmem_dma_device_init, .device_release = rmem_dma_device_release, }; 3. 设备树中保留内存的定义方式 以vexpress-v2p-ca9.dts中保留内存的定义方式为例,说明dts文件中如何定...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。
err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); if (!err) { pci_using_dac = 1; } else { err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); if (err) { dev_err(&pdev->dev, "No usable DMA configuration, aborting\n"); ...
(match)) return PTR_ERR(match); ret = component_master_add_with_match(dev, &rockchip_drm_ops, match); if (ret < 0) { rockchip_drm_match_remove(dev); return ret; } dev->coherent_dma_mask = DMA_BIT_MASK(64); return 0; } static struct platform_driver rockchip_drm_platform_...