IOMMU的资料结构
主机软体必须维护最多八个供IOMMU使用的记忆体资料结构。这些资料结构包括:
- Device Table:是一个由DeviceID索引的表。每个设备表条目包含模式栏位、指向I/O页表的指标、指向中断重映控制表的指标、一组控制位元和16位的DomainID。DomainID充当地址空间标识符,允许共享相同I/O页表的多个设备共享IOMMU上的相同转译记忆体资源。对于共享相同DomainID的所有设备,其页表必须相同。
- I/O page Table:每个设备表条目可以指定不同的I/O页表,或者不同的设备表条目可以共享相同的I/O页表。每次IOMMU处理对记忆体的设备存取时,它都会在其转译记忆体和/或适当的I/O页表中查找设备的虚拟位址(DVA),以确定该设备是否具有权限,以及(如果允许)访问的系统实体位址。
- Command Buffer:IOMMU通过位于系统记忆体中的循环缓冲区接受由处理器排程的命令。
- Event Log:IOMMU通过另一个循环缓冲区,即事件日志,向处理器报告非典型的事件。
- Interrupt Remapping Table:每个设备表条目可以指定一个中断重映表。每次IOMMU处理设备中断请求时,它都会查找IRTE以将中断重映到具有转译向量的目的地。
- Peripheral Page Request Log:IOMMU可以接受来自支援PRI的周边设备的请求,以处理页更改请求。这些请求被记录在一个位于系统记忆体中的循环缓冲区,即PPR日志
- Guest Virtual APIC Table:IOMMU可以更新用户中断请求状态。
IOMMU的基本功能支持一阶的转译表,用于地址转译和中断重映。事件日志是唯一由IOMMU写入系统内存的数据结构。虚拟地址(GPA)的最大大小在能力偏移10h[VAsize]中定义,实体地址(SPA)的最大大小在能力偏移10h[PAsize]中定义。
IOMMU可以选择性地支持一阶和二阶的转译表,以及客户APIC虚拟化、硬体错误暂存器、性能计数器暂存器、周边设备页面请求服务、x2APIC和SMI过滤器。IOMMU可以写入事件日志、外设页请求日志、用户虚拟APIC表、用户虚拟APIC日志和用户页表。用户虚拟地址(GVA)的最大大小在能力偏移10h[GVAsize]中定义。
参考来源