引用层级数据节点¶
- 版权:
© 2018, 2021 Intel Corporation
- 作者:
Sakari Ailus <sakari.ailus@linux.intel.com>
通常,ACPI 只允许引用树中的设备对象。层级数据扩展节点可能无法直接引用,因此本文档定义了一种实现此类引用的方案。
引用由设备对象名称后跟一个或多个层级数据扩展 [dsd-guide] 键组成。具体而言,键引用的层级数据扩展节点应直接位于父对象下,即设备对象或另一个层级数据扩展节点。
层级数据节点中的键应由节点名称、“@”字符和节点的十六进制表示的数字(不带前缀或后缀)组成。相同的 ACPI 对象应包含 _DSD 属性扩展,该扩展具有一个属性 “reg”,该属性应具有与节点编号相同的数值。
如果层级数据扩展节点没有数值,则应从 ACPI 对象的 _DSD 属性中省略 “reg” 属性,并从层级数据扩展键中省略 “@” 字符和数字。
示例¶
在下面的 ASL 代码片段中,“reference” _DSD 属性包含对 DEV0 的设备对象引用,在该设备对象下,一个层级数据扩展键 “node@1” 引用 NOD1 对象,最后,一个层级数据扩展键 “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"
}
},
}
})
}
另请参见 图表 中的图表示例。
参考¶
- [dsd-guide] DSD 指南。
https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc,引用时间为 2021-11-30。