引用分层数据节点¶
- 版权所有:
© 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。