1Copyright (C) 2018 Intel Corporation 2Author: Sakari Ailus <sakari.ailus@linux.intel.com> 3 4 5Referencing hierarchical data nodes 6----------------------------------- 7 8ACPI in general allows referring to device objects in the tree only. 9Hierarchical data extension nodes may not be referred to directly, hence this 10document defines a scheme to implement such references. 11 12A reference consist of the device object name followed by one or more 13hierarchical data extension [1] keys. Specifically, the hierarchical data 14extension node which is referred to by the key shall lie directly under the 15parent object i.e. either the device object or another hierarchical data 16extension node. 17 18The keys in the hierarchical data nodes shall consist of the name of the node, 19"@" character and the number of the node in hexadecimal notation (without pre- 20or postfixes). The same ACPI object shall include the _DSD property extension 21with a property "reg" that shall have the same numerical value as the number of 22the node. 23 24In case a hierarchical data extensions node has no numerical value, then the 25"reg" property shall be omitted from the ACPI object's _DSD properties and the 26"@" character and the number shall be omitted from the hierarchical data 27extension key. 28 29 30Example 31------- 32 33 In the ASL snippet below, the "reference" _DSD property [2] contains a 34 device object reference to DEV0 and under that device object, a 35 hierarchical data extension key "node@1" referring to the NOD1 object 36 and lastly, a hierarchical data extension key "anothernode" referring to 37 the ANOD object which is also the final target node of the reference. 38 39 Device (DEV0) 40 { 41 Name (_DSD, Package () { 42 ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), 43 Package () { 44 Package () { "node@0", NOD0 }, 45 Package () { "node@1", NOD1 }, 46 } 47 }) 48 Name (NOD0, Package() { 49 ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 50 Package () { 51 Package () { "random-property", 3 }, 52 } 53 }) 54 Name (NOD1, Package() { 55 ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), 56 Package () { 57 Package () { "anothernode", ANOD }, 58 } 59 }) 60 Name (ANOD, Package() { 61 ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 62 Package () { 63 Package () { "random-property", 0 }, 64 } 65 }) 66 } 67 68 Device (DEV1) 69 { 70 Name (_DSD, Package () { 71 ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 72 Package () { 73 Package () { "reference", ^DEV0, "node@1", "anothernode" }, 74 } 75 }) 76 } 77 78Please also see a graph example in graph.txt . 79 80References 81---------- 82 83[1] Hierarchical Data Extension UUID For _DSD. 84 <URL:http://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.1.pdf>, 85 referenced 2018-07-17. 86 87[2] Device Properties UUID For _DSD. 88 <URL:http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf>, 89 referenced 2016-10-04. 90