对SMMU驱动已经熟悉了一段时间,接下来计划对相关的内容进行分析。
内核DMA框架用于将内存物理地址PA进行映射为设备可访问的IOVA,并对驱动提供API可用接口。它包括IOVA框架(包括IOVA的分配和释放)、IOMMU框架(DMA MAP/UNMAP过程)、页表操作、ARM SMMU驱动及提供给驱动的框架。
DMA API接口为驱动提供DMA分配/释放接口,包括一致性DMA和流式DMA;
IOMMU框架提供DMA MAP/UNMAP过程:根据DMA API接口提供的参数,分配/释放IOVA,并调用ARM驱动进行页表相关操作,建立/销毁页表项;
IOVA框架提供IOVA的分配和释放,同时提供RCACHE缓存机制;
ARM驱动负责与SMMU硬件的交互,包括SMMU识别、外设的识别等。