_DSD 裝置屬性使用規則¶
屬性、屬性集和屬性子集¶
ACPI 5.1 中引入的 _DSD (裝置特定資料) 配置物件允許透過 ACPI 名稱空間提供任何型別的裝置配置資料。 原則上,資料的格式可以是任意的,但它必須由 UUID 標識,該 UUID 必須被處理 _DSD 輸出的驅動程式識別。 但是,Linux 核心中的 ACPI 子系統識別的 _DSD 定義了通用 UUID,它會自動處理與它們關聯的資料包,並將這些資料作為“裝置屬性”提供給裝置驅動程式。
裝置屬性是一個數據項,由字串鍵和與其關聯的值(特定型別)組成。
在 ACPI _DSD 上下文中,它是通用裝置屬性 UUID 後的子包的一個元素,如 _DSD(裝置特定資料)實施指南文件 [1]中標題為“眾所周知的 _DSD UUID 和資料結構格式”子節“裝置屬性 UUID”部分中所指定。
它也可以被視為鍵的定義和關聯的資料型別,_DSD 可以在給定裝置的裝置屬性 UUID 子包中返回。
屬性集是適用於硬體實體(如裝置)的屬性的集合。 在 ACPI _DSD 上下文中,它是可以在給定裝置的裝置屬性 UUID 子包中返回的所有屬性的集合。
屬性子集是屬性的巢狀集合。 它們中的每一個都與一個附加鍵(名稱)相關聯,允許將子集作為一個整體引用(並被視為一個單獨的實體)。 屬性子集的規範表示形式是透過 _DSD(裝置特定資料)實施指南文件 [1]中標題為“眾所周知的 _DSD UUID 和資料結構格式”子節“分層資料擴充套件 UUID”部分中指定的機制。
屬性集可以是分層的。 也就是說,屬性集可以包含多個屬性子集,每個屬性子集可以包含自己的屬性子集,依此類推。
屬性集的一般有效性規則¶
有效的屬性集必須遵循裝置屬性 UUID 定義文件 [1] 給出的指導。
_DSD 屬性旨在作為 ACPI 規範定義的現有機制的補充,而不是替代。 因此,作為規則,只有在 ACPI 規範沒有直接規定處理底層用例的情況下才應使用它們。 從 _DSD 返回不遵循該規則的屬性集(在與裝置屬性 UUID 關聯的資料包中)通常是無效的。
其他注意事項¶
在某些情況下,即使原則上遵循了上面給出的一般規則,屬性集仍然可能不被視為有效的屬性集。
例如,這適用於可能導致核心程式碼(裝置驅動程式或庫/子系統)以可能導致與 ACPI 名稱空間中的 AML 方法衝突的方式訪問硬體的裝置屬性。 特別是,如果核心程式碼使用裝置屬性來操作通常由與電源管理相關的 ACPI 方法控制的硬體,例如 _PSx 和 _DSW(對於裝置物件)或 _ON 和 _OFF(對於電源資源物件),或者由 ACPI 裝置停用/啟用方法(例如 _DIS 和 _SRS)控制的硬體,則可能會發生這種情況。
在核心程式碼可能由於使用裝置屬性而導致 AML 混淆的所有情況下,所討論的裝置屬性不適合 ACPI 環境,因此它們不能屬於有效的屬性集。
屬性集和裝置樹繫結¶
通常,使 _DSD 返回遵循裝置樹繫結的屬性集是有用的。
但是,在這些情況下,首先必須考慮上述有效性注意事項,並且必須避免從 _DSD 返回無效的屬性集。 因此,可能無法使 _DSD 字面意思且完整地返回遵循給定 DT 繫結的屬性集。 儘管如此,為了程式碼重用,以裝置屬性的形式提供儘可能多的配置資料並以適合手頭用例的 ACPI 特定機制來補充它可能是有意義的。
無論如何,不應期望字面意思遵循 DT 繫結的屬性集在 ACPI 環境中自動工作,無論其內容如何。