裝置管理命名空間物件
ACPI 5.0 規格會定義數種類型的命名空間物件,可用來管理裝置。 例如,裝置識別物件包含連線到匯流排之裝置的識別資訊,例如不支援子裝置硬體列舉的 I2C。 其他類型的命名空間物件可以指定系統資源、描述裝置相依性,以及指出哪些裝置可以停用。
Windows 中的裝置識別
Windows 隨插即用會根據裝置列舉值所提供的裝置識別碼,尋找並載入設備磁碟機。 列舉值是知道如何從裝置擷取識別資訊的匯流排驅動程式。 某些匯流排 (,例如 PCI、SD 和 USB) 具有硬體定義的機制來執行這項擷取。 對於不會 (例如處理器匯流排或簡單周邊匯流排) 的匯流排,ACPI 會在 命名空間中定義識別物件。
Windows ACPI 驅動程式Acpi.sys會將這些物件中找到的值組合成各種裝置識別碼字串,根據驅動程式的需求來特別識別裝置或一般。 為了識別 ACPI 列舉裝置而建立的一些字串模式如下:
ACPI\VEN_vvv[v]&DEV_dddd&SUBSYS_sss[s]nnnn&REV_rrrr
ACPI\VEN_vvv[v]&DEV_dddd&SUBSYS_sss[s]nnnn
ACPI\VEN_vvv[v]&DEV_dddd&REV_rrrr
ACPI\VEN_vvv[v]&DEV_dddd
ACPI\vvv[v]dddd
您可以開啟裝置管理員並檢查列舉裝置的硬體識別碼和相容識別碼屬性,以查看 Windows 為裝置建立的裝置識別碼。 每個字串都可以在 INF 檔案中指定,以識別要載入裝置的驅動程式。 INF 比對的順序是從最特定的硬體識別碼 (最慣用驅動程式) 到最不特定的識別碼 (最不慣用的驅動程式) ,讓更瞭解裝置特定功能的驅動程式可以取代較不特定 (的驅動程式,因此僅支援) 的裝置功能子集。
裝置識別碼應該只用于 INF 比對,且絕不應由設備磁碟機剖析或處理。 如果設備磁碟機需要識別載入的特定硬體,建議的方法是在安裝時設定適當的登錄機碼 INF 檔案。 驅動程式接著可以在初始化期間存取這些金鑰,以取得必要的資訊。
ACPI 中的裝置識別
硬體識別碼 (_HID)
在 ACPI 中識別裝置的最低需求是硬體識別碼 (_HID) 物件。 _HID傳回格式為 「ABC[D]xxxx」 的字串,其中 「ABC[D]」 是 3 個字元或 4 個字元的字串,可識別裝置製造商 (「廠商識別碼」) ,而 xxxx 是十六進位數位,可識別該廠商所製造的特定裝置 (「裝置識別碼」) 。 廠商識別碼在整個產業中必須是唯一的。 Microsoft 會配置這些字串,以確保它們是唯一的。 廠商識別碼可從隨插即用識別碼 - PNPID 要求取得。
ACPI 5.0 也支援在 _HID 和其他識別物件中使用 PCI 指派的廠商識別碼,因此您可能不需要從 Microsoft 取得廠商識別碼。 For more information about hardware identification requirements, see section 6.1.5, "_HID (Hardware ID)", of the ACPI 5.0 specification.
相容的識別碼 (_CID)
Microsoft 已為與 Windows 隨附的收件匣驅動程式相容的裝置保留廠商識別碼 「PNP」。 Windows 會定義一些裝置識別碼,以搭配此廠商識別碼使用,可用來載入裝置的 Windows 提供的驅動程式。 另一個物件「相容識別碼」 (_CID) 物件可用來傳回這些識別碼。 Windows 一律偏好 (_HID) 傳回的硬體識別碼,而非 INF 比對和驅動程式選取中_CID) 傳回的相容識別碼 (。 如果廠商提供的裝置特定驅動程式無法使用,此喜好設定可讓 Windows 提供的驅動程式視為預設驅動程式。 下表中的相容識別碼是新建立,可與 SoC 平臺搭配使用。
相容的識別碼 | 描述 |
---|---|
PNP0C40 | Windows 相容按鈕陣列 |
PNP0C50 | 符合 HID-over-I2C 規範的裝置 |
PNP0C60 | 可轉換膝上型電腦顯示器感應器裝置 |
PNP0C70 | 停駐感應器裝置 |
PNP0D10 | 具有標準偵錯的 XHCI 相容 USB 控制器 |
PNP0D15 | 沒有標準偵錯的 XHCI 相容 USB 控制器 |
PNP0D20 | 不符合標準偵錯的 EHCI 相容 USB 控制器 |
PNP0D25 | 具有標準偵錯的 EHCI 相容 USB 控制器 |
PNP0D40 | 符合 SDA 標準標準的 SD 主機控制器 |
PNP0D80 | Windows 相容的系統電源管理控制器 |
子系統識別碼 (_SUB) 、硬體修訂 (_HRV) 和類別 (_CLS)
ACPI 5.0 會定義_SUB、_HRV和_CLS物件,這些物件可與_HID一起使用,以建立更唯一識別裝置特定版本、整合或硬體修訂的識別碼,或指出 PCI 定義的裝置類別的成員資格。 這些物件通常是選擇性的,但 Windows 中的特定裝置類別可能需要這些物件。 如需這些物件的詳細資訊,請參閱 ACPI 5.0 規格的 6.1 節「裝置識別物件」。
為了方便使用,OEM 系統上的裝置識別碼為「四部分」識別碼,有 Windows 硬體認證套件 (HCK) 需求。 這四個部分包括廠商識別碼、裝置識別碼、子系統廠商 (OEM) 識別碼,以及子系統 (OEM) 裝置識別碼。 因此,OEM 平臺需要子系統識別碼 (_SUB) 物件。
Device-Specific 方法 (_DSM)
_DSM方法定義于 ACPI 5.0 規格的 9.14.1 節「_DSM (裝置特定方法) 」中。 這個方法提供個別的裝置特定資料和控制函式,這些函式可由設備磁碟機呼叫,而不會與其他這類裝置特定方法衝突。 特定裝置或裝置類別的_DSM定義 UUID (GUID) ,保證不會與其他 UUID 衝突。 針對每個 UUID,有一組定義的函式,_DSM方法可以實作以提供資料或執行驅動程式的控制函式。 類別特定的資料和資料格式會以個別的裝置類別特定規格提供,也會在 ACPI Device-Specific 方法中討論。
位址 (_ADR) 和唯一識別碼 (_UID)
裝置識別有三個額外需求:
- 對於連線到硬體可列舉父匯流排 (的裝置,例如 SDIO、USB HSIC) ,但具有平臺特定功能或 (控制項的裝置,例如側帶電源或喚醒中斷) ,則不會使用_HID。 相反地,父匯流排驅動程式會 (建立裝置識別碼,如先前) 所述。 不過,在此情況下,位址物件 (_ADR) 必須位於裝置的 ACPI 命名空間中。 此物件可讓作業系統建立匯流排列舉裝置與其 ACPI 描述功能或控制項的關聯。
- 在使用特定 IP 區塊多個實例的平臺上,讓每個區塊都有相同的裝置識別物件,必須要有唯一識別碼 (_UID) 物件,才能讓作業系統區分區塊。
- 特定命名空間範圍中沒有任何兩個裝置可以有相同的名稱。
裝置設定物件
針對命名空間中識別的每個裝置,系統資源 (記憶體位址、中斷等) 裝置所取用,也必須由目前資源設定 (_CRS) 物件報告。 支援多個可能的資源組態報告 (_PRS) 和變更裝置資源設定的控制項 (_SRS) ,但為選擇性。
SoC 平臺的新功能是 GPIO 和簡單的周邊匯流排, (SPB) 裝置可以使用的資源。 如需詳細資訊,請參閱常規用途 I/O (GPIO) 和簡單周邊匯流排 (SPB) 。
此外,SoC 平臺的新功能是一般用途的固定 DMA 描述元。 FixedDMA 描述元支援由數個系統裝置共用 DMA 控制器硬體。 (要求行和通道暫存器) 靜態配置給特定系統裝置的 DMA 資源會列在 FixedDMA 描述元中。 For more information, see section 19.5.49, "FixedDMA (DMA Resource Descriptor Macro)", of the ACPI 5.0 specification.
裝置狀態變更
基於各種原因,可以停用或移除 ACPI 列舉的裝置。 提供 Status (_STA) 物件,讓這類狀態變更能夠與作業系統通訊。 如需_STA的說明,請參閱 ACPI 5.0 規格的 6.3.7 節。 Windows 會使用 _STA 來判斷裝置是否應該列舉、顯示為已停用或使用者看不到。 韌體中的這個控制項適用于許多應用程式,包括停駐和 USB OTG 主機對功能切換。
此外,ACPI 也會提供通知機制,讓 ASL 可用來通知平臺中的事件驅動程式,例如在停駐時移除的裝置。 一般而言,當 ACPI 裝置的狀態變更時,韌體必須執行「裝置檢查」或「匯流排檢查」通知,讓 Windows 重新列舉裝置並重新評估其_STA。 如需 ACPI 通知的相關資訊,請參閱 ACPI 5.0 規格的 5.6.6.6 節「裝置物件通知」。
啟用/停用
作為 Windows 隨插即用的一部分,驅動程式必須能夠由使用者或系統 (動態啟用和停用,例如更新驅動程式) 。
SoC 裝置已整合到 SoC 晶片中,因此無法移除。 大部分 SoC 裝置的驅動程式都可以豁免啟用和停用的需求。 對於未豁免的驅動程式,有驅動程式介面表示驅動程式支援依序移除。 如需詳細資訊,請參閱 Microsoft Connect 網站上的標題為「減少 SoC 驅動程式的 PNP 需求」檔。
如果驅動程式支援依序移除,且裝置硬體可以停用 (,則裝置可以設定為停止存取其指派的資源) ,則裝置的 ACPI 命名空間節點可以包含 Disable (_DIS) 物件。 每當移除驅動程式時,作業系統就會評估這個方法。 使用_DIS有下列額外需求:
- _STA每當裝置停用時,都必須清除「已啟用並解碼其資源」位。
- 裝置必須提供 [設定資源設定] (_SRS) 物件,才能重新啟用裝置硬體,並在 _STA 中設定上述位。
如需詳細資訊,請參閱 ACPI 5.0 規格的 6.2.3 節 (_DIS) 、6.2.15 (_SRS) 和 6.3.7 (_STA) 。
裝置相依性
一般而言,特定平臺上的裝置之間有硬體相依性。 Windows 會要求描述所有這類相依性,以確保所有裝置都能正常運作,因為系統 (裝置電源已移除動態變更、驅動程式已停止並啟動,依此類) 。 在 ACPI 中,裝置之間的相依性會以下列方式描述:
命名空間階層。 任何屬於子裝置的裝置 (列為另一個裝置命名空間內的裝置) 相依于父裝置。 例如,USB HSIC 裝置相依于埠 (父) 和控制器 (父系) 連線。 同樣地,在系統記憶體管理單位命名空間中所列的 GPU 裝置, (MMU) 裝置相依于 MMU 裝置。
資源連線。 連線到 GPIO 或 SPB 控制器的裝置相依于這些控制器。 此類型的相依性是由裝置_CRS中包含連線資源所描述。
OpRegion 相依性。 對於使用 OpRegions 執行 I/O 的 ASL 控制項方法,作業系統不會隱含地知道相依性,因為它們只會在控制方法評估期間決定。 此問題適用于一般PurposeIO 和 GenericSerialBus OpRegions,其中隨插即用驅動程式提供區域存取權。 為了減輕此問題,ACPI 會定義 OpRegion 相依性 (_DEP) 物件。 _DEP應該用於任何裝置命名空間,其中 OpRegion (HW 資源) 是由控制項方法參考,上述兩者都不適用於參考的 OpRegion 連線資源。 For more information, see section 6.5.8, "_DEP (Operation Region Dependencies)", of the ACPI 5.0 specification.
設備磁碟機之間也可能有軟體相依性。 也必須描述這些相依性。
如需詳細資訊,請參閱下列資源:
如需驅動程式載入順序相依性,請參閱 指定驅動程式載入順序。
如需電源關聯相依性,請參閱:
IoInvalidateDeviceRelations (若要觸發建立電源關聯,請使用powerRelations.DEVICE_RELATION_TYPE列舉值 PowerRelations.) 呼叫IoInvalidateDeviceRelations常式