引用分层数据节点

版权所有:

© 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。