ACPI 通常只允许引用树中的设备对象。分层数据扩展节点可能无法直接引用,因此本文档定义了一种实现此类引用的方案。
引用由设备对象名称和一个或多个分层数据扩展 [dsd-guide] 键组成。具体而言,键引用的分层数据扩展节点应直接位于父对象(即设备对象或另一个分层数据扩展节点)之下。
分层数据节点中的键应由节点名称、“@”字符和十六进制表示的节点编号(无前缀或后缀)组成。相同的 ACPI 对象应包括 _DSD 属性扩展,其属性“reg”应具有与节点编号相同的数值。
如果分层数据扩展节点没有数值,则应从 ACPI 对象的 _DSD 属性中省略“reg”属性,并应从分层数据扩展键中省略“@”字符和数字。
例子
在下面的 ASL 代码片段中,“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.