先取得平台描述,再協調執行期間的控制權

選擇步驟後,圖中對應的元件與下方解說會加上重點標示。完整圖與所有解說會持續顯示;也可用方向鍵切換步驟。

由上往下看本章選用的協商策略。圖中把可重複的 Query 簡化成一回合,正文以三次呼叫的實際假設值展開。

本例先讀平台描述,再以 Query 了解控制政策,最後提出 Control 要求並依成功回覆接手。本例先讀平台描述,再以 Query 了解控制政策,最後提出 Control 要求並依成功回覆接手。OS:讀取平台描述並協商平台韌體:資源與政策平台描述:Root Bridge/資源/設定位置本例先 Query:可依回覆調整再查 →← 回覆可授予的控制範圍提出 Control 要求 →← 依成功回覆取得對應控制權

作者依 PCI Firmware 3.3 繪製的交接示意;控制範圍由實際回覆與依賴條件決定。

韌體先建立開機環境,OS 再依平台描述與控制權協商接手管理。本章把 Host Bridge 資源描述、設定空間位置與 _OSC(Operating System Capabilities,作業系統能力協商方法)串成一條閱讀路線。

前情提要:BAR 與 Bridge Window 的計算回到 Chapter 4;Hot-Plug、PME、AER 與 DPC 的硬體機制已在前章建立,現在確認由誰管理。

BAR
Base Address Register,基底位址暫存器
PME
Power Management Event,電源管理事件
AER
Advanced Error Reporting,進階錯誤回報
DPC
Downstream Port Containment,下游連接埠錯誤隔離

規格路線:Firmware 3.3 §3.5 的交接要求 → §4.1 的平台描述 → §4.5.1 的 Support/Control 欄位 → Query、Control 與依賴條件。

  1. 先確認平台提供哪些資源描述

    硬體欄位依 Base 6.0;本章的韌體交接依 Firmware 3.3,兩份來源分別保留版本。

    從 Host Bridge 的描述取得 Segment、Bus 及資源範圍,再區分 MCFG 的設定空間位置、_CRS 的資源與裝置 BAR。

    BAR
    Base Address Register,基底位址暫存器

    PCI Firmware 3.3 §3.5、§4.1.1–§4.1.5,pp.34–46。

  2. 用正確的 Support 與 Control 欄位協商

    本章已限定 UUID、Revision 與 buffer 格式;實際成功狀態及回傳位元都要核對。

    依 _OSC 的 PCI 專用欄位說明,分別宣告 OS 能力與提出管理需求;本例先用 Query 查詢政策。

    PCI Firmware 3.3 §4.5.1/Tables 4-4–4-6,pp.48–58。

  3. 沿回覆調整需求並保留依賴

    已授予的控制權與各項依賴依規則保留;不能只因一個 Query 有回覆就開始改寫硬體。

    比較要求與回傳的 Control 位元;某項能力被遮罩時,重新檢查相關依賴,再決定後續要求。

    PCI Firmware 3.3 §4.5.1–§4.5.2/Tables 4-4–4-6,pp.49–60。

  4. 依成功授權的範圍接手管理

    例如 Hot-Plug、AER 與 DPC 的控制需按各自依賴協調;本章不把 OS 已啟動視為全部控制權都已移交。

    AER
    Advanced Error Reporting,進階錯誤回報
    DPC
    Downstream Port Containment,下游連接埠錯誤隔離

    成功的 Control 回覆決定 OS 接手哪些功能;仍由韌體管理的部分與交接限制,依平台政策及規格處理。

    PCI Firmware 3.3 §4.5.1–§4.5.3,pp.48–62。

圖中元件

平台韌體

本圖負責提供平台描述並參與控制權協商。

基本責任

UEFI 軟體介面、ACPI 平台描述與 PCI Firmware 的專用約定各有來源,不合併成一種硬體能力。

1. UEFI、ACPI、PCI Firmware,為什麼需要三種規格?

UEFI
Unified Extensible Firmware Interface,統一可延伸韌體介面
先依問題選文件
想回答的問題主要閱讀入口要帶走的資訊
韌體中的驅動透過什麼介面使用 PCI 裝置?UEFI 2.11 §14:PCI Bus SupportPCI Bus/Device Driver 與 PCI I/O 等軟體介面的分工。
平台如何向 OS 描述裝置、資源與協調方法?ACPI;PCI 的用法再讀 PCI Firmware 3.3 §3–§4Host Bridge 的 namespace 物件、_CRS、_OSC 等描述及方法。
PCI 系統交接時,資源與控制權應符合什麼要求?PCI Firmware 3.3 §3.5、§4.1、§4.5交接狀態、ECAM 位置、PCI 專用的 _OSC 欄位。
實際 Capability、Status 與封包如何運作?PCIe Base 6.0 的相關功能章節與 Chapter 7 Register 定義硬體能力、設定與事件的精確語意。

在 UEFI boot services 環境,PCI Device Driver 用 PCI I/O Protocol 存取其控制器的 Memory、I/O 與 Configuration Space;PCI Bus Driver 則處理 PCI 控制器的裝置 handle。讀 UEFI §14.3.7–§14.4 時要注意:枚舉的晶片組細節具有平台相依性,不能把這個軟體介面章節當成每個 Host Bridge 的硬體程式設計手冊。

若想追查整條 PCI bus 的存取抽象,入口是 PCI Root Bridge I/O;若想追查一個已提供給驅動的 PCI controller,入口是 PCI I/O。這裡只建立閱讀位置,不展開完整 API 實作。OS 的 native driver 也不等於開機前的 UEFI driver。

UEFI 補充來源與核對範圍

UEFI 2.11 官方 PDF的 §14.3.7–§14.4(文件 p.623)已從官方索引摘錄核對;Root Bridge I/O 與 PCI I/O 的章節位置由 2.11 目錄確認。全文直接取得回覆 403,因此不宣稱已逐頁核對整個 UEFI Chapter 14,也不以它推定額外平台行為。

2. OS 開始執行時,能假設所有 PCI 裝置都已配置嗎?

不能。PCI Firmware 3.3 §3.5 要求韌體配置所有 Host Bridges,因為其硬體程式設計模型不是 PCI 規格統一定義;通往開機與主控台裝置的 PCI-to-PCI Bridges 也必須配置。其他路徑則可能尚未完成,因此 OS 不能只憑「開機成功」推定每張卡都已準備好。

對已配置的 BAR,OS 還要確認對應 I/O/Memory Enable 等交接條件及平台位址轉譯;CPU 用的位址不一定等於 BAR 內的值。這個判讀已在 Chapter 4 建立,本章只補上責任:UEFI driver 與 application 不得自行更改由韌體配置者持有的 BAR/Bridge 資源配置。OS 接手後的配置政策,也必須遵守平台可提供的範圍。

韌體應在 ACPI namespace 描述 Host Bridge,包括 _HID/_CID、_CRS 等資訊。_SEG 用來區分 PCI Segment Group;如果省略,需依其定義處理,不能把 BDF 自動當成全系統唯一識別。PCI Express Host Bridge 的 _HID/_CID 配對見 Firmware §4.1.5;namespace 的路徑與 Bus:Device.Function 是不同的識別系統。

BDF
Bus/Device/Function,匯流排、裝置與功能識別
交接與 Host Bridge 的依據

PCI Firmware 3.3 §3.5(pp.34–37)、§4.1.5(pp.45–46)。本章不重複 BAR 大小與 Bridge Window 計算,回顧 Chapter 4即可。

3. MCFG、_CRS 與 BAR 都有位址,差別在哪裡?

先問位址的用途。MCFG 描述特定 Segment/Bus 範圍的 memory-mapped Configuration Space 存取位置;_CRS 描述 Host Bridge 當前消耗與向下游提供的資源;BAR 則描述某個 Function 的裝置資源。MCFG 不是「可供 BAR 任意分配的記憶體池」。

非零 Start Bus 的 ECAM 教學案例
資料來源或目標作者假設值意義
MCFG Base Address0xE0000000以 Bus 0 為基準。
Segment Group0x0002選擇對應 Segment 的 allocation entry。
Start Bus/End Bus0x40/0x4F此 entry 支援的 Bus 範圍,含兩端。
目標 Bus/Device/Function/Offset0x42/0x03/0x01/0x180非 ARI 的設定空間目標。
算出的設定存取位址0xE4219180不是裝置 BAR 位址。
ARI
Alternative Routing-ID Interpretation,替代路由識別碼解讀

依 Firmware 3.3 §4.1.4,MCFG 的 Base Address 即使 Start Bus 非零,仍以 Bus 0 為基準。本例先確認目標在 0x40–0x4F 內,再算:

0xE0000000 + (0x42 << 20)
             + (0x03 << 15) + (0x01 << 12) + 0x180
= 0xE4219180

這個 entry 實際涵蓋的 ECAM 位址是 0xE4000000–0xE4FFFFFF,共 16 MiB。不能把 Bus Number 先減 Start Bus;那會算出 0xE0219180。也不能因 Base 是 0xE0000000,就推定前面沒有涵蓋的區域可用於其他目的。

再假設 _CRS 向下游提供 Memory 範圍 0x90000000–0x90FFFFFF,且本例沒有位址轉譯。位於其中的 BAR 候選區間仍要檢查對齊、大小、其他裝置占用與每層 Bridge Window;只在 _CRS 範圍內不等於已完成配置。反過來,剛算出的 ECAM 位址也不能寫進某張卡的 BAR 來「讓設定空間可達」。

MCFG 主要描述開機時已存在的相關 Host Bridges;對支援 Host Bridge 熱加入的情況,Firmware §4.1.3 另定義 _CBA。不要把「一般 PCIe Endpoint 熱插入」與「新增整個 Host Bridge」混為同一種平台描述更新。

這一題應先翻 Table,而不是找 PCIe Register Figure

PCI Firmware 3.3 Table 4-1(p.39)看 ECAM 位元配置 → Tables 4-2、4-3(pp.41–42)找 MCFG allocation entry → §4.1.4(pp.44–45)確認 Bus 0 基準。_CRS 資源邊界見 §3.5(pp.35–37)、§4.3.2(p.47);_CBA 見 §4.1.3(pp.42–44)。

4. 找到 Hot-Plug 或 AER 欄位後,OS 就可以修改嗎?

還要確認控制權。PCI Host Bridge 的 _OSC(Operating System Capabilities)讓 OS 宣告支援能力,並要求管理特定功能。它作用於該 Host Bridge 所起始的整個 hierarchy,不是對每個 Endpoint 各發一份授權。

先讀 PCI Firmware 3.3 §4.5.1 的介面識別:UUID 為 33DB4D5B-1FF7-401C-9657-7441C03DD766,Revision=1,Capabilities Buffer 有三個 DWORD。這三個 DWORD 的位元編號各自重新從 0 開始,不能把不同 DWORD 的 bit 7 混在一起。

_OSC 的三個 DWORD
DWORD送入時的用途回傳後怎麼讀
1:通用欄位bit 0=1 表示 Query;清除表示要求接管協商出的能力。檢查失敗、UUID、Revision、Capabilities Masked;回傳 bit 0 是 Reserved,不用它判斷授權。
2:Support FieldOS 告訴平台自己具備哪些軟體能力。單向宣告;OS 不以回傳修改值作為授權。
3:Control FieldOS 要求管理哪些功能。在有效回覆與正確呼叫階段下,讀各 bit 是否被保留。

控制權的回傳 1,不證明硬體一定有那個 Capability。Firmware §4.5.1 明確要求:韌體不能只因自己未明確支援某功能,就隨意拒絕 OS;OS 仍須到每個 Slot/Function 查能力。控制權的回傳 0,也不一定表示硬體沒有實作,可能是平台不允許 OS 接管。

PCI 專用介面與通用欄位分開讀

PCI Firmware 3.3 §4.5.1(pp.48–49)、Tables 4-4–4-6(pp.49–58)。通用回傳欄位補充依 ACPI 6.6 §6.2.12(官方索引摘錄,文件 p.401):bit 1 為失敗、bit 2 為 UUID 不識別、bit 3 為 Revision 不識別、bit 4 為 Capabilities Masked。全文未取得,不據此延伸其他 ACPI 行為。Firmware §4.5.3 的 ASL 範例也使用 0x10 表示能力被遮罩。

5. 想同時管理 Hot-Plug、PME、AER 與 DPC,要要求哪些 bit?

PME
Power Management Event,電源管理事件

從 Table 4-5 的輸入欄位先建立相依關係,再用 Table 4-6 的回傳定義確認責任。不能只看兩張表相同的 bit 編號,就假定輸入與輸出每一項都完全同義。

本例的 Control 請求與相依條件
Control bit要求的管理功能請求時的必要搭配
0PCI Express Native Hot PlugControl bit 4。
2PCI Express Native PMEControl bit 4;這是 PME 事件管理,不等於所有電源功能。
3AERControl bit 4。
4PCI Express Capability Structure仍須遵守其他功能個別的控制權條款。
7DPC ConfigurationControl bits 3、4,以及 Support bit 7 的 Error Disconnect Recover 支援。

所以本例 Control 請求為 (1 << 0) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 7) = 0x9D。Support=0x9F,表示 OS 宣告 bits 0–4 與 bit 7 的能力:Extended Config operation regions、ASPM、Clock PM、Segment Groups、MSI,以及 Error Disconnect Recover。本例沒有宣告其他 Support 位元,也未請求 LTR、Completion Timeout 或 SFI 控制權。

MSI
Message Signaled Interrupt,訊息中斷
LTR
Latency Tolerance Reporting,延遲容忍度回報

如果韌體保留 DPC Configuration 的所有權,就必須同時保留 AER。反過來,授予 DPC 時須同時授予 AER 與 PCI Express Capability Structure。bit 4 的概括名稱不能用來推翻 bit 3、bit 7 的明確授權限制;Table 4-6 的個別條款與 §4.5.2.4 要一起閱讀。

Support 的 ASPM bit 與 Control 的 native PME bit 也不能互換:前者宣告 OS 的設定能力,後者要求管理 PME 事件。Chapter 10 的 L1.2 是否能啟用,仍要檢查硬體、平台條件與適用的 LTR 等控制權。

LTR
Latency Tolerance Reporting,延遲容忍度回報
相依條件的完整位置

PCI Firmware 3.3 Table 4-4(pp.49–51)、Table 4-5(pp.51–52)、Table 4-6(pp.53–58),尤其 bit 7(pp.56–57);§4.5.2.4(p.60)。沒有要求本例以外的 bit,不等於那些功能在平台上不存在。

6. 第一次 Query 被遮罩,要怎麼讀下一步?

作者情境:韌體已知此平台的 DPC 在 OS 原生控制下有相容性問題,因此保留 DPC 與 AER;允許 OS 管理 Hot-Plug、PME 與相應 PCIe Capability。假設沒有其他授權歷史,也沒有呼叫失敗或 UUID/Revision 錯誤。下表的 Support 始終是 0x0000009F,UUID/Revision/Count 也不變。

先協商,再正式接管的三次 _OSC 呼叫
呼叫送入 DWORD 1送入 Control回傳 DWORD 1回傳 Control
第一次 Query0x000000010x0000009D0x000000100x00000015
依結果再次 Query0x000000010x000000150x000000000x00000015
正式要求接管0x000000000x000000150x000000000x00000015

第一次的差異為 0x9D & ~0x15 = 0x88,正是 AER bit 3 與 DPC bit 7。回傳 DWORD 1 的 0x10 是 Capabilities Masked,不是「全部不支援」,也不是成功授予原本所有要求。第二次把請求調整成 0x15,Query 不再被遮罩;這時仍只是協商結果。

Query Support Flag=1 時,韌體不得因這次呼叫改動硬體設定。規格強烈建議先 Query,直到 Capabilities Masked 清除;本例之後才清 Query bit,正式要求接管,並重新檢查回傳結果。只有第三列完成後,才能按本例的有效結果判定 OS 已取得那三項控制權。

若回傳有失敗、UUID 或 Revision 錯誤,不能仍把未變的 Control Buffer 當成成功授權。本例把這些錯誤排除,是為了集中解釋遮罩協商,不代表它們可在實際判讀時忽略。

Query 與實際控制轉移

PCI Firmware 3.3 §4.5.2.1–§4.5.2.3(p.59)、§4.5.3(pp.61–62);通用 Query/回傳語意見上述 ACPI 6.6 §6.2.12 官方摘錄。本例不是複製規格 ASL 範例的平台政策;只依欄位與相依規則設計數值。

7. 控制權交出去以後,韌體與 OS 各自還能做什麼?

Hot-Plug 授權包含責任交接:韌體須安排事件走原生 device interrupt 路徑;交接後,不再更新插槽的指示燈、電源控制等狀態。PME 授權也有對應的事件路由與 Register 限制。這能避免兩個管理者同時修改同一組狀態。

同一次開機、同一 Host Bridge 的後續 _OSC 呼叫,OS 必須保留先前宣告的支援與已取得的控制請求;韌體也不得收回已授予的控制權。PCI Firmware 3.3 這套介面沒有讓 OS 自行放棄已取得控制權的機制,不能把一般 ACPI 的可能用法直接套進來。

DPC 仍由韌體管理,OS 為什麼可以清除部分狀態?

PCI Firmware 3.3 的 Table 4-6 對 EDR(Error Disconnect Recover,錯誤斷線恢復協作)設有特定例外。它允許 OS 在指定對象與時間窗內處理部分 Status;AER Mask、Severity 與 DPC Control 的設定權仍留給原本的管理者。

【模擬資料】以下情境為教學用途建立,不代表特定硬體或平台。沿用本章正式 _OSC 呼叫後的 Control=0x00000015、Support=0x0000009F。OS 取得 native Hot-Plug、PME 與相應 PCI Express Capability 的控制權;AER 與 DPC 由韌體保留。另設本例位於 Segment 0,觸發 DPC 的 Switch Downstream Port 是 02:01.0,下游 Endpoint Function 為 03:00.0。

假設平台已依 §4.6.12 完成所需的 EDR/DPC _DSM 協調,沒有 SFI 介入。韌體與 OS 決定嘗試恢復,卡片仍在,OS 也已確認實際觸發的 Port,並完成適用的驅動停止與軟體狀態檢查。到 Switch 的上游管理路徑可用;下游 Function 則需等 Link 與設定存取條件恢復後才能處理。下圖只整理這條恢復路徑的狀態寫入範圍。

時間由上往下。EDR Notify 到呼叫 _OST 之前,與 _OST 返回後,是兩段不同的窗口。_OST 是 OS 向韌體回報本次通知處理結果的方法;不要把「開始呼叫」與「已返回」合成同一個時點。窄螢幕可左右滑動查看兩個對象。

EDR 在 _OST 前後,允許處理的對象與狀態不同時間由上往下。觸發 Port 的指定狀態寫入窗口,從 EDR Notify 開始,到 OS 呼叫 _OST 時結束;下游 Function 的另一個窗口,從 _OST 返回後開始,到該 Function 重新初始化完成或被停用時結束。設定控制權仍屬韌體。時間與事件觸發 DPC 的 Port02:01.0下游 Function03:00.0韌體送出 EDR NotifyOS 呼叫 _OST_OST 返回03:00.0 重初始化完成或被停用指定 Status 的寫入例外Device/AER StatusDPC Trigger Status仍須符合硬體處理規則觸發 Port 的這段例外已結束不延續到下游 Function重新初始化期間尚未開始這個下游 Function重新初始化時的寫入窗口下游 Function 的指定狀態Device StatusAER Uncorrectable/Correctable Error Status全程仍由韌體持有 AER/DPC 設定控制權
作者依 Table 4-6 整理的例外時間窗。藍色區塊只表示可處理指定 Status,不表示取得整份設定控制權;時間不按比例。後續熱移除的另一項例外另於下文說明。

先處理觸發 Port,再處理下游 Function

從 Table 4-6 bit 7 的第一段例外讀起:EDR Notify 開始後,到 OS 呼叫對應 _OST 之前,OS 可以寫入觸發 Port的 Device Status 與列明的 AER Status,也可以處理該 Port 的 DPC Trigger Status。在這段期間,韌體不得同時寫入規定的狀態。原表另列 Root Error Status 與 RP PIO Status;它們仍須符合 Port Type 與能力的適用條件,本例不把 Root Port 專用欄位套到 Switch Port。

本例 02:01.0 的 DPC base=0x300。OS 先保存有效紀錄,等 Link Status 的 Data Link Layer Link Active 讀為 0,再依恢復流程以 16-bit 寫入 0x0001 到 0x308,清除 DPC Trigger Status。這個允許寫入的例外,沒有免除 Base 6.0 的硬體條件;若對象是支援 RP Extensions 的 Root Port,還須等 DPC RP Busy=0。

Chapter 12 曾示範原生管理者先寫 0x0008 清 DPC Interrupt Status,再解除隔離。這裡不能直接照搬:本例的有限例外只允許 OS 處理 Port 的 DPC Trigger Status,並未授予 DPC Interrupt Status 或整份 DPC Control 的修改權。權限核對完成後,才套用欄位的寫入方法。

接著看 Table 4-6 的下一頁。OS 呼叫 _OST 時,前面的 Port 通知處理窗口就已結束;等對應 _OST 返回後,才開始下游 Function的指定狀態處理窗口。本例是 03:00.0 的 Device Status、AER Uncorrectable Error Status 與 Correctable Error Status,持續到這個 Function 重初始化完成或被停用為止。規格也對適用 Function 列有 DPC 狀態例外,但不能因此假設普通 Endpoint 一定實作 DPC。

用同一次 EDR 流程核對「哪個對象、何時、哪個欄位」
目前階段本例正在處理的對象OS 的適用動作仍需保留的限制
EDR Notify 後、呼叫 _OST 前觸發 Port 02:01.0保存證據,處理列明 Status;符合硬體條件後清 Trigger Status。不能順便改 AER Mask、Severity 或 DPC Control。
_OST 正在執行,尚未返回韌體正在處理這次回報本例等待方法返回。不能沿用已結束的 Port 例外,也不能提前使用返回後才開始的 Function 例外。
_OST 返回後、03:00.0 重初始化完成或停用前下游 Function 03:00.0在可存取且紀錄有效的條件下,處理該 Function 的指定 Device/AER Status。這個窗口沒有把 02:01.0 的完整控制權轉交給 OS。
03:00.0 的重初始化已完成本次 Function 的例外結束回到原先控制權分工。本次 Function 恢復例外已結束;AER/DPC 設定權仍屬韌體。

各自窗口內,韌體也必須遵守對應的禁止寫入規則,以免兩邊同時修改相同狀態。普通執行期間的控制權,則依 _OSC 結果維持原有分工;完成 EDR 不會自動把 AER 或 DPC 授予 OS。

實際通知的是哪個 Port,也要先確認

§4.6.13 說明,EDR Notify 可以送到真正觸發 Port 的上層物件。若該通知對象提供定位用的 _DSM,OS 須使用它確認受隔離的 Port;若沒有,才按規則視通知對象本身為觸發 Port。本例假設已完成這一步,不能只把通知物件的名稱直接換成 02:01.0。

另有一條與上圖分開的路徑:若之後處理的熱移除發生在 DPC Trigger Status 仍為 1 的 Port 下,Table 4-6 也允許 OS 處理該 Port 的 Trigger Status。這項例外只涵蓋條文列明的處理情境,不能延伸成一般執行期間任意寫 DPC 的權限。

控制權例外與硬體條件,要分別查哪份規格?

PCI Firmware Specification Revision 3.3:Table 4-6 Interpretation of the _OSC Control Field, Returned Value,Control bit 7(PDF/印刷 pp.56–57),先辨認觸發 Port、下游 Function,以及 Notify、_OST 呼叫、返回和 Function 重初始化的時間界線。§4.6.12 _DSM for Downstream Port Containment and Hot-Plug Surprise Control(pp.82–84)定義本例假設已完成的協調;其中的 DPC Event Handling Implementation Note(pp.85–86)以未編號流程圖說明恢復路線,不能為它自行加 Figure 編號。§4.6.13 _DSM for Locating the Port that Experienced the Containment Event(pp.87–88)確認通知對象與觸發 Port 的定位方式。這些是 Firmware 3.3 的規則,並非 Base 6.0 所定義的軟體授權介面。

PCI Express Base Specification Revision 6.0:§6.2.11 Downstream Port Containment (DPC)(p.694)、Figure 7-300/Table 7-264 DPC Status Register、§7.9.14.4(pp.1252–1253),確認 Trigger Status 的寫入及釋放所需的 Link inactive/適用 RP Busy 條件。上述兩份文件在本段引用處,PDF 與印刷頁碼相同。完整欄位流程連回 Chapter 12;EDR 的平台政策與失敗恢復不在本段完整展開。

本節前段交接責任與後續 _OSC 呼叫仍依 Firmware Table 4-6(pp.53–57)、§4.5.2.2–§4.5.2.3(p.59)。未提供 _OSC 的 Host Bridge,依 §4.5.1(p.49)處理本介面所定義功能的啟用限制。

8. 把位址、管理者與控制權接起來

_OSC 授予 Hot-Plug,是否就可以對每個 Downstream Port 寫 Power On?

不可以。授權涵蓋 hierarchy,但 Slot Implemented、Hot-Plug Capable、Power Controller Present,以及命令與供電條件仍要逐一確認。控制權不能取代能力。回看 Chapter 11與 Firmware §4.5.1。

Support bit 7=1,是否代表 OS 已取得 DPC Configuration?

沒有。它只宣告 EDR 支援;還要要求 Control bit 7、滿足 AER/Capability 相依條件,並完成有效的非 Query 控制轉移。依據:Tables 4-4–4-6、§4.5.2.4。

MCFG 能找到裝置、_OSC 也成功,但 BAR 沒空間,能否忽略 _CRS 限制?

不能。三者回答的是設定存取、管理權與可分配資源,彼此不能替代。若平台無法提供足夠範圍,控制權本身不會創造額外位址資源。依據:Firmware §3.5、§4.1、§4.5。