引用分层数据节点(Referencing hierarchical data nodes)

ACPI 通常只允许引用树中的设备对象。分层数据扩展节点可能无法直接引用,因此本文档定义了一种实现此类引用的方案。

引用由设备对象名称和一个或多个分层数据扩展 [dsd-guide] 键组成。具体而言,键引用的分层数据扩展节点应直接位于父对象(即设备对象或另一个分层数据扩展节点)之下。

分层数据节点中的键应由节点名称、“@”字符和十六进制表示的节点编号(无前缀或后缀)组成。相同的 ACPI 对象应包括 _DSD 属性扩展,其属性“reg”应具有与节点编号相同的数值。

如果分层数据扩展节点没有数值,则应从 ACPI 对象的 _DSD 属性中省略“reg”属性,并应从分层数据扩展键中省略“@”字符和数字。

例子

在下面的 ASL(ACPI Source Language) 代码片段中,“reference” _DSD 属性包含对 DEV0 的设备对象引用,并且在该设备对象下,有一个指向 NOD1 对象的分层数据扩展键“node@1”,最后,有一个指向 ANOD 对象的分层数据扩展键“anothernode”,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", Package () {
                    ^DEV0, "node@1", "anothernode"
                }
            },
        }
    })
}
复制代码

另请参见Graphs中的graph示例。

参考

[dsd-guide] DSD Guide.

https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced 2021-11-30.

posted @ 2025-02-19 15:40  闹闹爸爸  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示