在系統上電的時候,BIOS/UEFI負責檢測並初始化重定向硬體(即VT-d硬體),為其分配相應的物理地址,並且以ACPI表中的DMAR(DMA Remapping Reporting)表的形式告知VT-d硬體的存在。

DMAR的格式如下所示,先是標準的APCI表的表頭,然後是Host Address Width表示該系統中支持的物理地址寬度;標誌位元組Flag表示VT-d硬體支持的一些功能,最後是Remapping Structures,即一堆有組織的結構體用來描述VT-d硬體的功能。

Remapping Structures是一堆以Type和Length為開始的結構體,Type的類型可能有下面五種:

BIOS/UEFI負責在初始化系統的時候將這些結構體以類型為順序有序地組織起來(同種類型的結構體可能有多個,也可能壓根就不存在)。第一個結構體必須是DRHD(DMA Remapping Hardware Unit Definition)結構體。

1. DRHD(DMA Remapping Hardware Unit Definition)表

一個DMAR結構體用於唯一定義系統中存在的一個VT-d重定向硬體。其結構體如下所示:

主要包括兩方面的信息,一是提供VT-d重定向硬體寄存器基地址,為系統軟體訪問VT-d硬體寄存器提供入口(各個偏移量所指向的具體寄存器在VT-d的spec中有詳細的約定,即VT-d硬體的具體實現);另一個是該VT-d重定向硬體所管轄的硬體,由Segment Number和Device Scope兩個區域來定義。Device Scope結構體由Device Scope Entry組成,每個Device Scope Entry可以用來指明一個PCI endpoint device,一個PCI sub-hierarchy,或者其他設備,如I/O xAPIC或者HPET。

2. RMRR(Reserved Memory Region Reporting)表

RMRR表用於表示BIOS或者UEFI為了DMA的使用而保留的一些系統物理內存,這些內存從操作系統的角度來看其屬性為Reserved Memory,因為有一些比較傳統的設備(比如USB、UMA顯卡等)可能會需要用到一些固定的,或者專用的系統內存,這時候就需要BIOS或UEFI為其保留。

該表中,主要包括兩方面信息,即保留的內存的範圍(Reserved Memory Region Base Address和Reserved Memory Region Limit Address)和針對的物理設備(Segment Number和Device Scope)。

3. ATSR(Root Port ATS Capability Reporting)表

ATS是Address Translation Services的意思,它是PCIe Capability的一種,用於表示PCIe設備是否支持經過PCIe Root Port翻譯過的地址。ATSR表只適用於那種PCIe設備支持Device-TLB的系統中,即PCIe設備帶有地址轉換加速功能。一個ATSR表表示一個支持ATS功能的PCIe Root-Port,其結構如下所示:

主要包括兩方面信息:Segment Number用於定位PCIe Root-Port;Device Scope用於定位位於該PCIe Root-Port下面的設備。

4. RHSA(Remapping Hardware Status Affinity)表

RHSR表適用於NUMA(Non-Uniform Memory)系統(即不同的CPU Socket都可能會單獨連接一些內存條,不同的CPU Socket對同一物理內存的訪問路徑可能是不同的),並且系統中的VT-d重定向硬體分布於不同的Node上。該表用於表示VT-d重定向硬體從屬於哪個Domain。

5. ANDD(ACPI Name-space Device Declaration)表

一個ANDD表用於表示一個以ACPI name-space規則命名,並且可發出DMA請求的設備。ANDD可以和前面提到的Device Scope Entry結合一起時候。

其中ACPI Device Number,相當於在該VT-d硬體管轄範圍內的以ACPI name-space規則命名的硬體ID號,前面Device Scope Entry值需要這個ID號,就可以找到該ANDD表,並從該表的ACPI Object Name區域找到具體的設備。


推薦閱讀:
相关文章