162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci.. include:: <isonum.txt>
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci===================================================
562306a36Sopenharmony_ciACPI Device Tree - Representation of ACPI Namespace
662306a36Sopenharmony_ci===================================================
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci:Copyright: |copy| 2013, Intel Corporation
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci:Author: Lv Zheng <lv.zheng@intel.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci:Credit:   Thanks for the help from Zhang Rui <rui.zhang@intel.com> and
1362306a36Sopenharmony_ci           Rafael J.Wysocki <rafael.j.wysocki@intel.com>.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciAbstract
1662306a36Sopenharmony_ci========
1762306a36Sopenharmony_ciThe Linux ACPI subsystem converts ACPI namespace objects into a Linux
1862306a36Sopenharmony_cidevice tree under the /sys/devices/LNXSYSTEM:00 and updates it upon
1962306a36Sopenharmony_cireceiving ACPI hotplug notification events.  For each device object
2062306a36Sopenharmony_ciin this hierarchy there is a corresponding symbolic link in the
2162306a36Sopenharmony_ci/sys/bus/acpi/devices.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciThis document illustrates the structure of the ACPI device tree.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciACPI Definition Blocks
2662306a36Sopenharmony_ci======================
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciThe ACPI firmware sets up RSDP (Root System Description Pointer) in the
2962306a36Sopenharmony_cisystem memory address space pointing to the XSDT (Extended System
3062306a36Sopenharmony_ciDescription Table).  The XSDT always points to the FADT (Fixed ACPI
3162306a36Sopenharmony_ciDescription Table) using its first entry, the data within the FADT
3262306a36Sopenharmony_ciincludes various fixed-length entries that describe fixed ACPI features
3362306a36Sopenharmony_ciof the hardware.  The FADT contains a pointer to the DSDT
3462306a36Sopenharmony_ci(Differentiated System Description Table).  The XSDT also contains
3562306a36Sopenharmony_cientries pointing to possibly multiple SSDTs (Secondary System
3662306a36Sopenharmony_ciDescription Table).
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciThe DSDT and SSDT data is organized in data structures called definition
3962306a36Sopenharmony_ciblocks that contain definitions of various objects, including ACPI
4062306a36Sopenharmony_cicontrol methods, encoded in AML (ACPI Machine Language).  The data block
4162306a36Sopenharmony_ciof the DSDT along with the contents of SSDTs represents a hierarchical
4262306a36Sopenharmony_cidata structure called the ACPI namespace whose topology reflects the
4362306a36Sopenharmony_cistructure of the underlying hardware platform.
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciThe relationships between ACPI System Definition Tables described above
4662306a36Sopenharmony_ciare illustrated in the following diagram::
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci   +---------+    +-------+    +--------+    +------------------------+
4962306a36Sopenharmony_ci   |  RSDP   | +->| XSDT  | +->|  FADT  |    |  +-------------------+ |
5062306a36Sopenharmony_ci   +---------+ |  +-------+ |  +--------+  +-|->|       DSDT        | |
5162306a36Sopenharmony_ci   | Pointer | |  | Entry |-+  | ...... |  | |  +-------------------+ |
5262306a36Sopenharmony_ci   +---------+ |  +-------+    | X_DSDT |--+ |  | Definition Blocks | |
5362306a36Sopenharmony_ci   | Pointer |-+  | ..... |    | ...... |    |  +-------------------+ |
5462306a36Sopenharmony_ci   +---------+    +-------+    +--------+    |  +-------------------+ |
5562306a36Sopenharmony_ci                  | Entry |------------------|->|       SSDT        | |
5662306a36Sopenharmony_ci                  +- - - -+                  |  +-------------------| |
5762306a36Sopenharmony_ci                  | Entry | - - - - - - - -+ |  | Definition Blocks | |
5862306a36Sopenharmony_ci                  +- - - -+                | |  +-------------------+ |
5962306a36Sopenharmony_ci                                           | |  +- - - - - - - - - -+ |
6062306a36Sopenharmony_ci                                           +-|->|       SSDT        | |
6162306a36Sopenharmony_ci                                             |  +-------------------+ |
6262306a36Sopenharmony_ci                                             |  | Definition Blocks | |
6362306a36Sopenharmony_ci                                             |  +- - - - - - - - - -+ |
6462306a36Sopenharmony_ci                                             +------------------------+
6562306a36Sopenharmony_ci                                                          |
6662306a36Sopenharmony_ci                                             OSPM Loading |
6762306a36Sopenharmony_ci                                                         \|/
6862306a36Sopenharmony_ci                                                   +----------------+
6962306a36Sopenharmony_ci                                                   | ACPI Namespace |
7062306a36Sopenharmony_ci                                                   +----------------+
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci                  Figure 1. ACPI Definition Blocks
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci.. note:: RSDP can also contain a pointer to the RSDT (Root System
7562306a36Sopenharmony_ci   Description Table).  Platforms provide RSDT to enable
7662306a36Sopenharmony_ci   compatibility with ACPI 1.0 operating systems.  The OS is expected
7762306a36Sopenharmony_ci   to use XSDT, if present.
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciExample ACPI Namespace
8162306a36Sopenharmony_ci======================
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciAll definition blocks are loaded into a single namespace.  The namespace
8462306a36Sopenharmony_ciis a hierarchy of objects identified by names and paths.
8562306a36Sopenharmony_ciThe following naming conventions apply to object names in the ACPI
8662306a36Sopenharmony_cinamespace:
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci   1. All names are 32 bits long.
8962306a36Sopenharmony_ci   2. The first byte of a name must be one of 'A' - 'Z', '_'.
9062306a36Sopenharmony_ci   3. Each of the remaining bytes of a name must be one of 'A' - 'Z', '0'
9162306a36Sopenharmony_ci      - '9', '_'.
9262306a36Sopenharmony_ci   4. Names starting with '_' are reserved by the ACPI specification.
9362306a36Sopenharmony_ci   5. The '\' symbol represents the root of the namespace (i.e. names
9462306a36Sopenharmony_ci      prepended with '\' are relative to the namespace root).
9562306a36Sopenharmony_ci   6. The '^' symbol represents the parent of the current namespace node
9662306a36Sopenharmony_ci      (i.e. names prepended with '^' are relative to the parent of the
9762306a36Sopenharmony_ci      current namespace node).
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciThe figure below shows an example ACPI namespace::
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci   +------+
10262306a36Sopenharmony_ci   | \    |                     Root
10362306a36Sopenharmony_ci   +------+
10462306a36Sopenharmony_ci     |
10562306a36Sopenharmony_ci     | +------+
10662306a36Sopenharmony_ci     +-| _PR  |                 Scope(_PR): the processor namespace
10762306a36Sopenharmony_ci     | +------+
10862306a36Sopenharmony_ci     |   |
10962306a36Sopenharmony_ci     |   | +------+
11062306a36Sopenharmony_ci     |   +-| CPU0 |             Processor(CPU0): the first processor
11162306a36Sopenharmony_ci     |     +------+
11262306a36Sopenharmony_ci     |
11362306a36Sopenharmony_ci     | +------+
11462306a36Sopenharmony_ci     +-| _SB  |                 Scope(_SB): the system bus namespace
11562306a36Sopenharmony_ci     | +------+
11662306a36Sopenharmony_ci     |   |
11762306a36Sopenharmony_ci     |   | +------+
11862306a36Sopenharmony_ci     |   +-| LID0 |             Device(LID0); the lid device
11962306a36Sopenharmony_ci     |   | +------+
12062306a36Sopenharmony_ci     |   |   |
12162306a36Sopenharmony_ci     |   |   | +------+
12262306a36Sopenharmony_ci     |   |   +-| _HID |         Name(_HID, "PNP0C0D"): the hardware ID
12362306a36Sopenharmony_ci     |   |   | +------+
12462306a36Sopenharmony_ci     |   |   |
12562306a36Sopenharmony_ci     |   |   | +------+
12662306a36Sopenharmony_ci     |   |   +-| _STA |         Method(_STA): the status control method
12762306a36Sopenharmony_ci     |   |     +------+
12862306a36Sopenharmony_ci     |   |
12962306a36Sopenharmony_ci     |   | +------+
13062306a36Sopenharmony_ci     |   +-| PCI0 |             Device(PCI0); the PCI root bridge
13162306a36Sopenharmony_ci     |     +------+
13262306a36Sopenharmony_ci     |       |
13362306a36Sopenharmony_ci     |       | +------+
13462306a36Sopenharmony_ci     |       +-| _HID |         Name(_HID, "PNP0A08"): the hardware ID
13562306a36Sopenharmony_ci     |       | +------+
13662306a36Sopenharmony_ci     |       |
13762306a36Sopenharmony_ci     |       | +------+
13862306a36Sopenharmony_ci     |       +-| _CID |         Name(_CID, "PNP0A03"): the compatible ID
13962306a36Sopenharmony_ci     |       | +------+
14062306a36Sopenharmony_ci     |       |
14162306a36Sopenharmony_ci     |       | +------+
14262306a36Sopenharmony_ci     |       +-| RP03 |         Scope(RP03): the PCI0 power scope
14362306a36Sopenharmony_ci     |       | +------+
14462306a36Sopenharmony_ci     |       |   |
14562306a36Sopenharmony_ci     |       |   | +------+
14662306a36Sopenharmony_ci     |       |   +-| PXP3 |     PowerResource(PXP3): the PCI0 power resource
14762306a36Sopenharmony_ci     |       |     +------+
14862306a36Sopenharmony_ci     |       |
14962306a36Sopenharmony_ci     |       | +------+
15062306a36Sopenharmony_ci     |       +-| GFX0 |         Device(GFX0): the graphics adapter
15162306a36Sopenharmony_ci     |         +------+
15262306a36Sopenharmony_ci     |           |
15362306a36Sopenharmony_ci     |           | +------+
15462306a36Sopenharmony_ci     |           +-| _ADR |     Name(_ADR, 0x00020000): the PCI bus address
15562306a36Sopenharmony_ci     |           | +------+
15662306a36Sopenharmony_ci     |           |
15762306a36Sopenharmony_ci     |           | +------+
15862306a36Sopenharmony_ci     |           +-| DD01 |     Device(DD01): the LCD output device
15962306a36Sopenharmony_ci     |             +------+
16062306a36Sopenharmony_ci     |               |
16162306a36Sopenharmony_ci     |               | +------+
16262306a36Sopenharmony_ci     |               +-| _BCL | Method(_BCL): the backlight control method
16362306a36Sopenharmony_ci     |                 +------+
16462306a36Sopenharmony_ci     |
16562306a36Sopenharmony_ci     | +------+
16662306a36Sopenharmony_ci     +-| _TZ  |                 Scope(_TZ): the thermal zone namespace
16762306a36Sopenharmony_ci     | +------+
16862306a36Sopenharmony_ci     |   |
16962306a36Sopenharmony_ci     |   | +------+
17062306a36Sopenharmony_ci     |   +-| FN00 |             PowerResource(FN00): the FAN0 power resource
17162306a36Sopenharmony_ci     |   | +------+
17262306a36Sopenharmony_ci     |   |
17362306a36Sopenharmony_ci     |   | +------+
17462306a36Sopenharmony_ci     |   +-| FAN0 |             Device(FAN0): the FAN0 cooling device
17562306a36Sopenharmony_ci     |   | +------+
17662306a36Sopenharmony_ci     |   |   |
17762306a36Sopenharmony_ci     |   |   | +------+
17862306a36Sopenharmony_ci     |   |   +-| _HID |         Name(_HID, "PNP0A0B"): the hardware ID
17962306a36Sopenharmony_ci     |   |     +------+
18062306a36Sopenharmony_ci     |   |
18162306a36Sopenharmony_ci     |   | +------+
18262306a36Sopenharmony_ci     |   +-| TZ00 |             ThermalZone(TZ00); the FAN thermal zone
18362306a36Sopenharmony_ci     |     +------+
18462306a36Sopenharmony_ci     |
18562306a36Sopenharmony_ci     | +------+
18662306a36Sopenharmony_ci     +-| _GPE |                 Scope(_GPE): the GPE namespace
18762306a36Sopenharmony_ci       +------+
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci                     Figure 2. Example ACPI Namespace
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ciLinux ACPI Device Objects
19362306a36Sopenharmony_ci=========================
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ciThe Linux kernel's core ACPI subsystem creates struct acpi_device
19662306a36Sopenharmony_ciobjects for ACPI namespace objects representing devices, power resources
19762306a36Sopenharmony_ciprocessors, thermal zones.  Those objects are exported to user space via
19862306a36Sopenharmony_cisysfs as directories in the subtree under /sys/devices/LNXSYSTM:00.  The
19962306a36Sopenharmony_ciformat of their names is <bus_id:instance>, where 'bus_id' refers to the
20062306a36Sopenharmony_ciACPI namespace representation of the given object and 'instance' is used
20162306a36Sopenharmony_cifor distinguishing different object of the same 'bus_id' (it is
20262306a36Sopenharmony_citwo-digit decimal representation of an unsigned integer).
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ciThe value of 'bus_id' depends on the type of the object whose name it is
20562306a36Sopenharmony_cipart of as listed in the table below::
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci                +---+-----------------+-------+----------+
20862306a36Sopenharmony_ci                |   | Object/Feature  | Table | bus_id   |
20962306a36Sopenharmony_ci                +---+-----------------+-------+----------+
21062306a36Sopenharmony_ci                | N | Root            | xSDT  | LNXSYSTM |
21162306a36Sopenharmony_ci                +---+-----------------+-------+----------+
21262306a36Sopenharmony_ci                | N | Device          | xSDT  | _HID     |
21362306a36Sopenharmony_ci                +---+-----------------+-------+----------+
21462306a36Sopenharmony_ci                | N | Processor       | xSDT  | LNXCPU   |
21562306a36Sopenharmony_ci                +---+-----------------+-------+----------+
21662306a36Sopenharmony_ci                | N | ThermalZone     | xSDT  | LNXTHERM |
21762306a36Sopenharmony_ci                +---+-----------------+-------+----------+
21862306a36Sopenharmony_ci                | N | PowerResource   | xSDT  | LNXPOWER |
21962306a36Sopenharmony_ci                +---+-----------------+-------+----------+
22062306a36Sopenharmony_ci                | N | Other Devices   | xSDT  | device   |
22162306a36Sopenharmony_ci                +---+-----------------+-------+----------+
22262306a36Sopenharmony_ci                | F | PWR_BUTTON      | FADT  | LNXPWRBN |
22362306a36Sopenharmony_ci                +---+-----------------+-------+----------+
22462306a36Sopenharmony_ci                | F | SLP_BUTTON      | FADT  | LNXSLPBN |
22562306a36Sopenharmony_ci                +---+-----------------+-------+----------+
22662306a36Sopenharmony_ci                | M | Video Extension | xSDT  | LNXVIDEO |
22762306a36Sopenharmony_ci                +---+-----------------+-------+----------+
22862306a36Sopenharmony_ci                | M | ATA Controller  | xSDT  | LNXIOBAY |
22962306a36Sopenharmony_ci                +---+-----------------+-------+----------+
23062306a36Sopenharmony_ci                | M | Docking Station | xSDT  | LNXDOCK  |
23162306a36Sopenharmony_ci                +---+-----------------+-------+----------+
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci                 Table 1. ACPI Namespace Objects Mapping
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ciThe following rules apply when creating struct acpi_device objects on
23662306a36Sopenharmony_cithe basis of the contents of ACPI System Description Tables (as
23762306a36Sopenharmony_ciindicated by the letter in the first column and the notation in the
23862306a36Sopenharmony_cisecond column of the table above):
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci   N:
24162306a36Sopenharmony_ci      The object's source is an ACPI namespace node (as indicated by the
24262306a36Sopenharmony_ci      named object's type in the second column).  In that case the object's
24362306a36Sopenharmony_ci      directory in sysfs will contain the 'path' attribute whose value is
24462306a36Sopenharmony_ci      the full path to the node from the namespace root.
24562306a36Sopenharmony_ci   F:
24662306a36Sopenharmony_ci      The struct acpi_device object is created for a fixed hardware
24762306a36Sopenharmony_ci      feature (as indicated by the fixed feature flag's name in the second
24862306a36Sopenharmony_ci      column), so its sysfs directory will not contain the 'path'
24962306a36Sopenharmony_ci      attribute.
25062306a36Sopenharmony_ci   M:
25162306a36Sopenharmony_ci      The struct acpi_device object is created for an ACPI namespace node
25262306a36Sopenharmony_ci      with specific control methods (as indicated by the ACPI defined
25362306a36Sopenharmony_ci      device's type in the second column).  The 'path' attribute containing
25462306a36Sopenharmony_ci      its namespace path will be present in its sysfs directory.  For
25562306a36Sopenharmony_ci      example, if the _BCL method is present for an ACPI namespace node, a
25662306a36Sopenharmony_ci      struct acpi_device object with LNXVIDEO 'bus_id' will be created for
25762306a36Sopenharmony_ci      it.
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ciThe third column of the above table indicates which ACPI System
26062306a36Sopenharmony_ciDescription Tables contain information used for the creation of the
26162306a36Sopenharmony_cistruct acpi_device objects represented by the given row (xSDT means DSDT
26262306a36Sopenharmony_cior SSDT).
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ciThe fourth column of the above table indicates the 'bus_id' generation
26562306a36Sopenharmony_cirule of the struct acpi_device object:
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci   _HID:
26862306a36Sopenharmony_ci      _HID in the last column of the table means that the object's bus_id
26962306a36Sopenharmony_ci      is derived from the _HID/_CID identification objects present under
27062306a36Sopenharmony_ci      the corresponding ACPI namespace node. The object's sysfs directory
27162306a36Sopenharmony_ci      will then contain the 'hid' and 'modalias' attributes that can be
27262306a36Sopenharmony_ci      used to retrieve the _HID and _CIDs of that object.
27362306a36Sopenharmony_ci   LNXxxxxx:
27462306a36Sopenharmony_ci      The 'modalias' attribute is also present for struct acpi_device
27562306a36Sopenharmony_ci      objects having bus_id of the "LNXxxxxx" form (pseudo devices), in
27662306a36Sopenharmony_ci      which cases it contains the bus_id string itself.
27762306a36Sopenharmony_ci   device:
27862306a36Sopenharmony_ci      'device' in the last column of the table indicates that the object's
27962306a36Sopenharmony_ci      bus_id cannot be determined from _HID/_CID of the corresponding
28062306a36Sopenharmony_ci      ACPI namespace node, although that object represents a device (for
28162306a36Sopenharmony_ci      example, it may be a PCI device with _ADR defined and without _HID
28262306a36Sopenharmony_ci      or _CID).  In that case the string 'device' will be used as the
28362306a36Sopenharmony_ci      object's bus_id.
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ciLinux ACPI Physical Device Glue
28762306a36Sopenharmony_ci===============================
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ciACPI device (i.e. struct acpi_device) objects may be linked to other
29062306a36Sopenharmony_ciobjects in the Linux' device hierarchy that represent "physical" devices
29162306a36Sopenharmony_ci(for example, devices on the PCI bus).  If that happens, it means that
29262306a36Sopenharmony_cithe ACPI device object is a "companion" of a device otherwise
29362306a36Sopenharmony_cirepresented in a different way and is used (1) to provide configuration
29462306a36Sopenharmony_ciinformation on that device which cannot be obtained by other means and
29562306a36Sopenharmony_ci(2) to do specific things to the device with the help of its ACPI
29662306a36Sopenharmony_cicontrol methods.  One ACPI device object may be linked this way to
29762306a36Sopenharmony_cimultiple "physical" devices.
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ciIf an ACPI device object is linked to a "physical" device, its sysfs
30062306a36Sopenharmony_cidirectory contains the "physical_node" symbolic link to the sysfs
30162306a36Sopenharmony_cidirectory of the target device object.  In turn, the target device's
30262306a36Sopenharmony_cisysfs directory will then contain the "firmware_node" symbolic link to
30362306a36Sopenharmony_cithe sysfs directory of the companion ACPI device object.
30462306a36Sopenharmony_ciThe linking mechanism relies on device identification provided by the
30562306a36Sopenharmony_ciACPI namespace.  For example, if there's an ACPI namespace object
30662306a36Sopenharmony_cirepresenting a PCI device (i.e. a device object under an ACPI namespace
30762306a36Sopenharmony_ciobject representing a PCI bridge) whose _ADR returns 0x00020000 and the
30862306a36Sopenharmony_cibus number of the parent PCI bridge is 0, the sysfs directory
30962306a36Sopenharmony_cirepresenting the struct acpi_device object created for that ACPI
31062306a36Sopenharmony_cinamespace object will contain the 'physical_node' symbolic link to the
31162306a36Sopenharmony_ci/sys/devices/pci0000:00/0000:00:02:0/ sysfs directory of the
31262306a36Sopenharmony_cicorresponding PCI device.
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ciThe linking mechanism is generally bus-specific.  The core of its
31562306a36Sopenharmony_ciimplementation is located in the drivers/acpi/glue.c file, but there are
31662306a36Sopenharmony_cicomplementary parts depending on the bus types in question located
31762306a36Sopenharmony_cielsewhere.  For example, the PCI-specific part of it is located in
31862306a36Sopenharmony_cidrivers/pci/pci-acpi.c.
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ciExample Linux ACPI Device Tree
32262306a36Sopenharmony_ci=================================
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ciThe sysfs hierarchy of struct acpi_device objects corresponding to the
32562306a36Sopenharmony_ciexample ACPI namespace illustrated in Figure 2 with the addition of
32662306a36Sopenharmony_cifixed PWR_BUTTON/SLP_BUTTON devices is shown below::
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci   +--------------+---+-----------------+
32962306a36Sopenharmony_ci   | LNXSYSTEM:00 | \ | acpi:LNXSYSTEM: |
33062306a36Sopenharmony_ci   +--------------+---+-----------------+
33162306a36Sopenharmony_ci     |
33262306a36Sopenharmony_ci     | +-------------+-----+----------------+
33362306a36Sopenharmony_ci     +-| LNXPWRBN:00 | N/A | acpi:LNXPWRBN: |
33462306a36Sopenharmony_ci     | +-------------+-----+----------------+
33562306a36Sopenharmony_ci     |
33662306a36Sopenharmony_ci     | +-------------+-----+----------------+
33762306a36Sopenharmony_ci     +-| LNXSLPBN:00 | N/A | acpi:LNXSLPBN: |
33862306a36Sopenharmony_ci     | +-------------+-----+----------------+
33962306a36Sopenharmony_ci     |
34062306a36Sopenharmony_ci     | +-----------+------------+--------------+
34162306a36Sopenharmony_ci     +-| LNXCPU:00 | \_PR_.CPU0 | acpi:LNXCPU: |
34262306a36Sopenharmony_ci     | +-----------+------------+--------------+
34362306a36Sopenharmony_ci     |
34462306a36Sopenharmony_ci     | +-------------+-------+----------------+
34562306a36Sopenharmony_ci     +-| LNXSYBUS:00 | \_SB_ | acpi:LNXSYBUS: |
34662306a36Sopenharmony_ci     | +-------------+-------+----------------+
34762306a36Sopenharmony_ci     |   |
34862306a36Sopenharmony_ci     |   | +- - - - - - - +- - - - - - +- - - - - - - -+
34962306a36Sopenharmony_ci     |   +-| PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: |
35062306a36Sopenharmony_ci     |   | +- - - - - - - +- - - - - - +- - - - - - - -+
35162306a36Sopenharmony_ci     |   |
35262306a36Sopenharmony_ci     |   | +------------+------------+-----------------------+
35362306a36Sopenharmony_ci     |   +-| PNP0A08:00 | \_SB_.PCI0 | acpi:PNP0A08:PNP0A03: |
35462306a36Sopenharmony_ci     |     +------------+------------+-----------------------+
35562306a36Sopenharmony_ci     |       |
35662306a36Sopenharmony_ci     |       | +-----------+-----------------+-----+
35762306a36Sopenharmony_ci     |       +-| device:00 | \_SB_.PCI0.RP03 | N/A |
35862306a36Sopenharmony_ci     |       | +-----------+-----------------+-----+
35962306a36Sopenharmony_ci     |       |   |
36062306a36Sopenharmony_ci     |       |   | +-------------+----------------------+----------------+
36162306a36Sopenharmony_ci     |       |   +-| LNXPOWER:00 | \_SB_.PCI0.RP03.PXP3 | acpi:LNXPOWER: |
36262306a36Sopenharmony_ci     |       |     +-------------+----------------------+----------------+
36362306a36Sopenharmony_ci     |       |
36462306a36Sopenharmony_ci     |       | +-------------+-----------------+----------------+
36562306a36Sopenharmony_ci     |       +-| LNXVIDEO:00 | \_SB_.PCI0.GFX0 | acpi:LNXVIDEO: |
36662306a36Sopenharmony_ci     |         +-------------+-----------------+----------------+
36762306a36Sopenharmony_ci     |           |
36862306a36Sopenharmony_ci     |           | +-----------+-----------------+-----+
36962306a36Sopenharmony_ci     |           +-| device:01 | \_SB_.PCI0.DD01 | N/A |
37062306a36Sopenharmony_ci     |             +-----------+-----------------+-----+
37162306a36Sopenharmony_ci     |
37262306a36Sopenharmony_ci     | +-------------+-------+----------------+
37362306a36Sopenharmony_ci     +-| LNXSYBUS:01 | \_TZ_ | acpi:LNXSYBUS: |
37462306a36Sopenharmony_ci       +-------------+-------+----------------+
37562306a36Sopenharmony_ci         |
37662306a36Sopenharmony_ci         | +-------------+------------+----------------+
37762306a36Sopenharmony_ci         +-| LNXPOWER:0a | \_TZ_.FN00 | acpi:LNXPOWER: |
37862306a36Sopenharmony_ci         | +-------------+------------+----------------+
37962306a36Sopenharmony_ci         |
38062306a36Sopenharmony_ci         | +------------+------------+---------------+
38162306a36Sopenharmony_ci         +-| PNP0C0B:00 | \_TZ_.FAN0 | acpi:PNP0C0B: |
38262306a36Sopenharmony_ci         | +------------+------------+---------------+
38362306a36Sopenharmony_ci         |
38462306a36Sopenharmony_ci         | +-------------+------------+----------------+
38562306a36Sopenharmony_ci         +-| LNXTHERM:00 | \_TZ_.TZ00 | acpi:LNXTHERM: |
38662306a36Sopenharmony_ci           +-------------+------------+----------------+
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci                  Figure 3. Example Linux ACPI Device Tree
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_ci.. note:: Each node is represented as "object/path/modalias", where:
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ci   1. 'object' is the name of the object's directory in sysfs.
39362306a36Sopenharmony_ci   2. 'path' is the ACPI namespace path of the corresponding
39462306a36Sopenharmony_ci      ACPI namespace object, as returned by the object's 'path'
39562306a36Sopenharmony_ci      sysfs attribute.
39662306a36Sopenharmony_ci   3. 'modalias' is the value of the object's 'modalias' sysfs
39762306a36Sopenharmony_ci      attribute (as described earlier in this document).
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci.. note:: N/A indicates the device object does not have the 'path' or the
40062306a36Sopenharmony_ci   'modalias' attribute.
401