dma_addr_t addr; BUG_ON(!valid_dma_direction(dir)); if (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); ...
在drivers/iommu/rockchip-iommu.c文件中调用arch_setup_dma_ops设置。 验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVICE(数据从设备中传出)其中之一。 验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVIC...
iommu的dma_map_ops是drivers\iommu\Dma-iommu.c中定义的iommu_dma_ops。 Xen的dma_map_ops是drivers/xen/swiotlb-xen.c中定义的xen_swiotlb_dma_ops。 #definedma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)#definedma_unmap_single(d, a, s, r) dma_unmap_single_attrs(...
在drivers/iommu/rockchip-iommu.c文件中调用arch_setup_dma_ops设置。 验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVICE(数据从设备中传出)其中之一。 验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVIC...
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 addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { const struct dma_map_ops *ops = get_dma_ops(dev); ...
setup_arch---》arm64_memblock_init---》dma_contiguous_reserve-》dma_contiguous_reserve_area-》cma_declare_contiguous 将CMA区域添加到Buddy System 为了避免这块reserved的内存在不用时候的浪费,内存管理模块会将CMA区域添加到Buddy System中,用于可移动页面的分配和管理。CMA区域是通过cma_init_reserved_areas接口...
...根据代码,如果dma的设备树里有dma-coherent,Linux则认为硬件会维护cache一致性,不会在dma运行过程中执行cache操作。...的定义dma_map_single()和dma_unmap_single()都在include\linux\dma-mapping.h里定义。...mm\Dma-mapping.c中的arch_setup_dma_ops( ),把设置保存在变量“dev->dma_coherent”中。.....
存在两个startup_32函数,setup()的最后是跳转执行的是arch/i386/boot/compressed/head.S中的startup_32(),此时startup_32已经被移动到0x00100000或0x00001000,对应于高装载或低装载。该函数的主要工作是解压内核。 解压完的内核映像从arch/i386/kernel/head.S开始执行。该文件中包含另一个startup_32函数。改sta...
arch_setup_pdev_archdata(pdev); returnplatform_device_add(pdev); } 2) 注册设备platform_driver_register #defineplatform_driver_register(drv) __platform_driver_register(drv, THIS_MODULE) 三、举例1. 开发步骤 platform 总线下驱动的开发步骤是: ...
* Do pre-allocation for the given DMA buffer type, and set the managed * buffer allocation mode to the given substream. * In this mode, PCM core will allocate a buffer automatically before PCM * hw_params ops call, and release the buffer after PCM hw_free ops call ...