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]中定義。
參考來源