162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci.. include:: <isonum.txt>
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci===================================
562306a36Sopenharmony_ciReferencing hierarchical data nodes
662306a36Sopenharmony_ci===================================
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci:Copyright: |copy| 2018, 2021 Intel Corporation
962306a36Sopenharmony_ci:Author: Sakari Ailus <sakari.ailus@linux.intel.com>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciACPI in general allows referring to device objects in the tree only.
1262306a36Sopenharmony_ciHierarchical data extension nodes may not be referred to directly, hence this
1362306a36Sopenharmony_cidocument defines a scheme to implement such references.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciA reference consist of the device object name followed by one or more
1662306a36Sopenharmony_cihierarchical data extension [dsd-guide] keys. Specifically, the hierarchical
1762306a36Sopenharmony_cidata extension node which is referred to by the key shall lie directly under
1862306a36Sopenharmony_cithe parent object i.e. either the device object or another hierarchical data
1962306a36Sopenharmony_ciextension node.
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciThe keys in the hierarchical data nodes shall consist of the name of the node,
2262306a36Sopenharmony_ci"@" character and the number of the node in hexadecimal notation (without pre-
2362306a36Sopenharmony_cior postfixes). The same ACPI object shall include the _DSD property extension
2462306a36Sopenharmony_ciwith a property "reg" that shall have the same numerical value as the number of
2562306a36Sopenharmony_cithe node.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciIn case a hierarchical data extensions node has no numerical value, then the
2862306a36Sopenharmony_ci"reg" property shall be omitted from the ACPI object's _DSD properties and the
2962306a36Sopenharmony_ci"@" character and the number shall be omitted from the hierarchical data
3062306a36Sopenharmony_ciextension key.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciExample
3462306a36Sopenharmony_ci=======
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciIn the ASL snippet below, the "reference" _DSD property contains a
3762306a36Sopenharmony_cidevice object reference to DEV0 and under that device object, a
3862306a36Sopenharmony_cihierarchical data extension key "node@1" referring to the NOD1 object
3962306a36Sopenharmony_ciand lastly, a hierarchical data extension key "anothernode" referring to
4062306a36Sopenharmony_cithe ANOD object which is also the final target node of the reference.
4162306a36Sopenharmony_ci::
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	Device (DEV0)
4462306a36Sopenharmony_ci	{
4562306a36Sopenharmony_ci	    Name (_DSD, Package () {
4662306a36Sopenharmony_ci		ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
4762306a36Sopenharmony_ci		Package () {
4862306a36Sopenharmony_ci		    Package () { "node@0", "NOD0" },
4962306a36Sopenharmony_ci		    Package () { "node@1", "NOD1" },
5062306a36Sopenharmony_ci		}
5162306a36Sopenharmony_ci	    })
5262306a36Sopenharmony_ci	    Name (NOD0, Package() {
5362306a36Sopenharmony_ci		ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
5462306a36Sopenharmony_ci		Package () {
5562306a36Sopenharmony_ci		    Package () { "reg", 0 },
5662306a36Sopenharmony_ci		    Package () { "random-property", 3 },
5762306a36Sopenharmony_ci		}
5862306a36Sopenharmony_ci	    })
5962306a36Sopenharmony_ci	    Name (NOD1, Package() {
6062306a36Sopenharmony_ci		ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
6162306a36Sopenharmony_ci		Package () {
6262306a36Sopenharmony_ci		    Package () { "reg", 1 },
6362306a36Sopenharmony_ci		    Package () { "anothernode", "ANOD" },
6462306a36Sopenharmony_ci		}
6562306a36Sopenharmony_ci	    })
6662306a36Sopenharmony_ci	    Name (ANOD, Package() {
6762306a36Sopenharmony_ci		ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
6862306a36Sopenharmony_ci		Package () {
6962306a36Sopenharmony_ci		    Package () { "random-property", 0 },
7062306a36Sopenharmony_ci		}
7162306a36Sopenharmony_ci	    })
7262306a36Sopenharmony_ci	}
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci	Device (DEV1)
7562306a36Sopenharmony_ci	{
7662306a36Sopenharmony_ci	    Name (_DSD, Package () {
7762306a36Sopenharmony_ci		ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
7862306a36Sopenharmony_ci		Package () {
7962306a36Sopenharmony_ci		    Package () {
8062306a36Sopenharmony_ci			"reference", Package () {
8162306a36Sopenharmony_ci			    ^DEV0, "node@1", "anothernode"
8262306a36Sopenharmony_ci			}
8362306a36Sopenharmony_ci		    },
8462306a36Sopenharmony_ci		}
8562306a36Sopenharmony_ci	    })
8662306a36Sopenharmony_ci	}
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciPlease also see a graph example in
8962306a36Sopenharmony_ciDocumentation/firmware-guide/acpi/dsd/graph.rst.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ciReferences
9262306a36Sopenharmony_ci==========
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci[dsd-guide] DSD Guide.
9562306a36Sopenharmony_ci    https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced
9662306a36Sopenharmony_ci    2021-11-30.
97