初始化设备dma功能:
驱动向dma通用层申请一块dma缓冲区,该缓冲区用于主机和设备交换数据。
DMA映射包括两个方面的工作:
- 分配一片DMA缓冲区;
- 为这片缓冲区产生设备可访问的地址。
内核中提供了一下函数用于分配一个DMA一致性的内存区域:
void
*dma_alloc_coherent(
struct
device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
这个函数的返回值为申请到的DMA缓冲区的虚拟地址。此外,该函数还通过参数handle返回DMA缓冲区的总线地址。与之对应的释放函数为:
void
dma_free_coherent(
struct
device *dev, size_t size,
void
*cpu_addr, dma_addr_t handle);
返回两个地址:
一个是驱动认识的虚拟内存地址。
一个是dma控制器的物理地址或总线地址,总之dma控制器可以使用该地址向内存中写入数据。初始化设备dma功能:
驱动向dma通用层申请一块dma缓冲区,该缓冲区用于主机和设备交换数据。