引用分層資料節點

版權所有:

© 2018, 2021 英特爾公司

作者:

Sakari Ailus <sakari.ailus@linux.intel.com>

ACPI 通常只允許引用樹中的裝置物件。分層資料擴充套件節點不能被直接引用,因此本文件定義了一種實現此類引用的方案。

對 _DSD 分層資料節點的引用是一個字串,由裝置物件引用、一個點(“.”)和一個數據節點物件的相對路徑組成。請勿使用非字串引用,因為這將生成分層資料節點的副本,而非引用!

被引用的分層資料擴充套件節點應直接位於其父物件之下,即裝置物件或另一個分層資料擴充套件節點 [dsd-guide]。

分層資料節點中的鍵應由節點名稱、“@”字元和節點的十六進位制數字(不帶字首或字尾)組成。相同的 ACPI 物件應包含 _DSD 屬性擴充套件,其中包含一個“reg”屬性,其數值應與節點的編號相同。

如果分層資料擴充套件節點沒有數值,則應從 ACPI 物件的 _DSD 屬性中省略“reg”屬性,並從分層資料擴充套件鍵中省略“@”字元和數字。

示例

在下面的 ASL 片段中,“reference”_DSD 屬性包含一個字串引用,指向 DEV1 父級下 DEV0 下的分層資料擴充套件節點 ANOD。ANOD 也是該引用的最終目標節點。

Device (DEV0)
{
    Name (_DSD, Package () {
        ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
        Package () {
            Package () { "node@0", "NOD0" },
            Package () { "node@1", "NOD1" },
        }
    })
    Name (NOD0, Package() {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
        Package () {
            Package () { "reg", 0 },
            Package () { "random-property", 3 },
        }
    })
    Name (NOD1, Package() {
        ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
        Package () {
            Package () { "reg", 1 },
            Package () { "anothernode", "ANOD" },
        }
    })
    Name (ANOD, Package() {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
        Package () {
            Package () { "random-property", 0 },
        }
    })
}

Device (DEV1)
{
    Name (_DSD, Package () {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
        Package () {
            Package () { "reference", "^DEV0.ANOD" }
            },
        }
    })
}

另請參閱圖表中的圖表示例。

參考文獻

[dsd-guide] DSD 指南。

https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc,引用日期:2021-11-30。