xref: /OK3568_Linux_fs/kernel/Documentation/firmware-guide/acpi/namespace.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun.. include:: <isonum.txt>
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun===================================================
5*4882a593SmuzhiyunACPI Device Tree - Representation of ACPI Namespace
6*4882a593Smuzhiyun===================================================
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun:Copyright: |copy| 2013, Intel Corporation
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun:Author: Lv Zheng <lv.zheng@intel.com>
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun:Credit:   Thanks for the help from Zhang Rui <rui.zhang@intel.com> and
13*4882a593Smuzhiyun           Rafael J.Wysocki <rafael.j.wysocki@intel.com>.
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunAbstract
16*4882a593Smuzhiyun========
17*4882a593SmuzhiyunThe Linux ACPI subsystem converts ACPI namespace objects into a Linux
18*4882a593Smuzhiyundevice tree under the /sys/devices/LNXSYSTEM:00 and updates it upon
19*4882a593Smuzhiyunreceiving ACPI hotplug notification events.  For each device object
20*4882a593Smuzhiyunin this hierarchy there is a corresponding symbolic link in the
21*4882a593Smuzhiyun/sys/bus/acpi/devices.
22*4882a593Smuzhiyun
23*4882a593SmuzhiyunThis document illustrates the structure of the ACPI device tree.
24*4882a593Smuzhiyun
25*4882a593SmuzhiyunACPI Definition Blocks
26*4882a593Smuzhiyun======================
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunThe ACPI firmware sets up RSDP (Root System Description Pointer) in the
29*4882a593Smuzhiyunsystem memory address space pointing to the XSDT (Extended System
30*4882a593SmuzhiyunDescription Table).  The XSDT always points to the FADT (Fixed ACPI
31*4882a593SmuzhiyunDescription Table) using its first entry, the data within the FADT
32*4882a593Smuzhiyunincludes various fixed-length entries that describe fixed ACPI features
33*4882a593Smuzhiyunof the hardware.  The FADT contains a pointer to the DSDT
34*4882a593Smuzhiyun(Differentiated System Descripition Table).  The XSDT also contains
35*4882a593Smuzhiyunentries pointing to possibly multiple SSDTs (Secondary System
36*4882a593SmuzhiyunDescription Table).
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunThe DSDT and SSDT data is organized in data structures called definition
39*4882a593Smuzhiyunblocks that contain definitions of various objects, including ACPI
40*4882a593Smuzhiyuncontrol methods, encoded in AML (ACPI Machine Language).  The data block
41*4882a593Smuzhiyunof the DSDT along with the contents of SSDTs represents a hierarchical
42*4882a593Smuzhiyundata structure called the ACPI namespace whose topology reflects the
43*4882a593Smuzhiyunstructure of the underlying hardware platform.
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunThe relationships between ACPI System Definition Tables described above
46*4882a593Smuzhiyunare illustrated in the following diagram::
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun   +---------+    +-------+    +--------+    +------------------------+
49*4882a593Smuzhiyun   |  RSDP   | +->| XSDT  | +->|  FADT  |    |  +-------------------+ |
50*4882a593Smuzhiyun   +---------+ |  +-------+ |  +--------+  +-|->|       DSDT        | |
51*4882a593Smuzhiyun   | Pointer | |  | Entry |-+  | ...... |  | |  +-------------------+ |
52*4882a593Smuzhiyun   +---------+ |  +-------+    | X_DSDT |--+ |  | Definition Blocks | |
53*4882a593Smuzhiyun   | Pointer |-+  | ..... |    | ...... |    |  +-------------------+ |
54*4882a593Smuzhiyun   +---------+    +-------+    +--------+    |  +-------------------+ |
55*4882a593Smuzhiyun                  | Entry |------------------|->|       SSDT        | |
56*4882a593Smuzhiyun                  +- - - -+                  |  +-------------------| |
57*4882a593Smuzhiyun                  | Entry | - - - - - - - -+ |  | Definition Blocks | |
58*4882a593Smuzhiyun                  +- - - -+                | |  +-------------------+ |
59*4882a593Smuzhiyun                                           | |  +- - - - - - - - - -+ |
60*4882a593Smuzhiyun                                           +-|->|       SSDT        | |
61*4882a593Smuzhiyun                                             |  +-------------------+ |
62*4882a593Smuzhiyun                                             |  | Definition Blocks | |
63*4882a593Smuzhiyun                                             |  +- - - - - - - - - -+ |
64*4882a593Smuzhiyun                                             +------------------------+
65*4882a593Smuzhiyun                                                          |
66*4882a593Smuzhiyun                                             OSPM Loading |
67*4882a593Smuzhiyun                                                         \|/
68*4882a593Smuzhiyun                                                   +----------------+
69*4882a593Smuzhiyun                                                   | ACPI Namespace |
70*4882a593Smuzhiyun                                                   +----------------+
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun                  Figure 1. ACPI Definition Blocks
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun.. note:: RSDP can also contain a pointer to the RSDT (Root System
75*4882a593Smuzhiyun   Description Table).  Platforms provide RSDT to enable
76*4882a593Smuzhiyun   compatibility with ACPI 1.0 operating systems.  The OS is expected
77*4882a593Smuzhiyun   to use XSDT, if present.
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun
80*4882a593SmuzhiyunExample ACPI Namespace
81*4882a593Smuzhiyun======================
82*4882a593Smuzhiyun
83*4882a593SmuzhiyunAll definition blocks are loaded into a single namespace.  The namespace
84*4882a593Smuzhiyunis a hierarchy of objects identified by names and paths.
85*4882a593SmuzhiyunThe following naming conventions apply to object names in the ACPI
86*4882a593Smuzhiyunnamespace:
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun   1. All names are 32 bits long.
89*4882a593Smuzhiyun   2. The first byte of a name must be one of 'A' - 'Z', '_'.
90*4882a593Smuzhiyun   3. Each of the remaining bytes of a name must be one of 'A' - 'Z', '0'
91*4882a593Smuzhiyun      - '9', '_'.
92*4882a593Smuzhiyun   4. Names starting with '_' are reserved by the ACPI specification.
93*4882a593Smuzhiyun   5. The '\' symbol represents the root of the namespace (i.e. names
94*4882a593Smuzhiyun      prepended with '\' are relative to the namespace root).
95*4882a593Smuzhiyun   6. The '^' symbol represents the parent of the current namespace node
96*4882a593Smuzhiyun      (i.e. names prepended with '^' are relative to the parent of the
97*4882a593Smuzhiyun      current namespace node).
98*4882a593Smuzhiyun
99*4882a593SmuzhiyunThe figure below shows an example ACPI namespace::
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun   +------+
102*4882a593Smuzhiyun   | \    |                     Root
103*4882a593Smuzhiyun   +------+
104*4882a593Smuzhiyun     |
105*4882a593Smuzhiyun     | +------+
106*4882a593Smuzhiyun     +-| _PR  |                 Scope(_PR): the processor namespace
107*4882a593Smuzhiyun     | +------+
108*4882a593Smuzhiyun     |   |
109*4882a593Smuzhiyun     |   | +------+
110*4882a593Smuzhiyun     |   +-| CPU0 |             Processor(CPU0): the first processor
111*4882a593Smuzhiyun     |     +------+
112*4882a593Smuzhiyun     |
113*4882a593Smuzhiyun     | +------+
114*4882a593Smuzhiyun     +-| _SB  |                 Scope(_SB): the system bus namespace
115*4882a593Smuzhiyun     | +------+
116*4882a593Smuzhiyun     |   |
117*4882a593Smuzhiyun     |   | +------+
118*4882a593Smuzhiyun     |   +-| LID0 |             Device(LID0); the lid device
119*4882a593Smuzhiyun     |   | +------+
120*4882a593Smuzhiyun     |   |   |
121*4882a593Smuzhiyun     |   |   | +------+
122*4882a593Smuzhiyun     |   |   +-| _HID |         Name(_HID, "PNP0C0D"): the hardware ID
123*4882a593Smuzhiyun     |   |   | +------+
124*4882a593Smuzhiyun     |   |   |
125*4882a593Smuzhiyun     |   |   | +------+
126*4882a593Smuzhiyun     |   |   +-| _STA |         Method(_STA): the status control method
127*4882a593Smuzhiyun     |   |     +------+
128*4882a593Smuzhiyun     |   |
129*4882a593Smuzhiyun     |   | +------+
130*4882a593Smuzhiyun     |   +-| PCI0 |             Device(PCI0); the PCI root bridge
131*4882a593Smuzhiyun     |     +------+
132*4882a593Smuzhiyun     |       |
133*4882a593Smuzhiyun     |       | +------+
134*4882a593Smuzhiyun     |       +-| _HID |         Name(_HID, "PNP0A08"): the hardware ID
135*4882a593Smuzhiyun     |       | +------+
136*4882a593Smuzhiyun     |       |
137*4882a593Smuzhiyun     |       | +------+
138*4882a593Smuzhiyun     |       +-| _CID |         Name(_CID, "PNP0A03"): the compatible ID
139*4882a593Smuzhiyun     |       | +------+
140*4882a593Smuzhiyun     |       |
141*4882a593Smuzhiyun     |       | +------+
142*4882a593Smuzhiyun     |       +-| RP03 |         Scope(RP03): the PCI0 power scope
143*4882a593Smuzhiyun     |       | +------+
144*4882a593Smuzhiyun     |       |   |
145*4882a593Smuzhiyun     |       |   | +------+
146*4882a593Smuzhiyun     |       |   +-| PXP3 |     PowerResource(PXP3): the PCI0 power resource
147*4882a593Smuzhiyun     |       |     +------+
148*4882a593Smuzhiyun     |       |
149*4882a593Smuzhiyun     |       | +------+
150*4882a593Smuzhiyun     |       +-| GFX0 |         Device(GFX0): the graphics adapter
151*4882a593Smuzhiyun     |         +------+
152*4882a593Smuzhiyun     |           |
153*4882a593Smuzhiyun     |           | +------+
154*4882a593Smuzhiyun     |           +-| _ADR |     Name(_ADR, 0x00020000): the PCI bus address
155*4882a593Smuzhiyun     |           | +------+
156*4882a593Smuzhiyun     |           |
157*4882a593Smuzhiyun     |           | +------+
158*4882a593Smuzhiyun     |           +-| DD01 |     Device(DD01): the LCD output device
159*4882a593Smuzhiyun     |             +------+
160*4882a593Smuzhiyun     |               |
161*4882a593Smuzhiyun     |               | +------+
162*4882a593Smuzhiyun     |               +-| _BCL | Method(_BCL): the backlight control method
163*4882a593Smuzhiyun     |                 +------+
164*4882a593Smuzhiyun     |
165*4882a593Smuzhiyun     | +------+
166*4882a593Smuzhiyun     +-| _TZ  |                 Scope(_TZ): the thermal zone namespace
167*4882a593Smuzhiyun     | +------+
168*4882a593Smuzhiyun     |   |
169*4882a593Smuzhiyun     |   | +------+
170*4882a593Smuzhiyun     |   +-| FN00 |             PowerResource(FN00): the FAN0 power resource
171*4882a593Smuzhiyun     |   | +------+
172*4882a593Smuzhiyun     |   |
173*4882a593Smuzhiyun     |   | +------+
174*4882a593Smuzhiyun     |   +-| FAN0 |             Device(FAN0): the FAN0 cooling device
175*4882a593Smuzhiyun     |   | +------+
176*4882a593Smuzhiyun     |   |   |
177*4882a593Smuzhiyun     |   |   | +------+
178*4882a593Smuzhiyun     |   |   +-| _HID |         Name(_HID, "PNP0A0B"): the hardware ID
179*4882a593Smuzhiyun     |   |     +------+
180*4882a593Smuzhiyun     |   |
181*4882a593Smuzhiyun     |   | +------+
182*4882a593Smuzhiyun     |   +-| TZ00 |             ThermalZone(TZ00); the FAN thermal zone
183*4882a593Smuzhiyun     |     +------+
184*4882a593Smuzhiyun     |
185*4882a593Smuzhiyun     | +------+
186*4882a593Smuzhiyun     +-| _GPE |                 Scope(_GPE): the GPE namespace
187*4882a593Smuzhiyun       +------+
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun                     Figure 2. Example ACPI Namespace
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun
192*4882a593SmuzhiyunLinux ACPI Device Objects
193*4882a593Smuzhiyun=========================
194*4882a593Smuzhiyun
195*4882a593SmuzhiyunThe Linux kernel's core ACPI subsystem creates struct acpi_device
196*4882a593Smuzhiyunobjects for ACPI namespace objects representing devices, power resources
197*4882a593Smuzhiyunprocessors, thermal zones.  Those objects are exported to user space via
198*4882a593Smuzhiyunsysfs as directories in the subtree under /sys/devices/LNXSYSTM:00.  The
199*4882a593Smuzhiyunformat of their names is <bus_id:instance>, where 'bus_id' refers to the
200*4882a593SmuzhiyunACPI namespace representation of the given object and 'instance' is used
201*4882a593Smuzhiyunfor distinguishing different object of the same 'bus_id' (it is
202*4882a593Smuzhiyuntwo-digit decimal representation of an unsigned integer).
203*4882a593Smuzhiyun
204*4882a593SmuzhiyunThe value of 'bus_id' depends on the type of the object whose name it is
205*4882a593Smuzhiyunpart of as listed in the table below::
206*4882a593Smuzhiyun
207*4882a593Smuzhiyun                +---+-----------------+-------+----------+
208*4882a593Smuzhiyun                |   | Object/Feature  | Table | bus_id   |
209*4882a593Smuzhiyun                +---+-----------------+-------+----------+
210*4882a593Smuzhiyun                | N | Root            | xSDT  | LNXSYSTM |
211*4882a593Smuzhiyun                +---+-----------------+-------+----------+
212*4882a593Smuzhiyun                | N | Device          | xSDT  | _HID     |
213*4882a593Smuzhiyun                +---+-----------------+-------+----------+
214*4882a593Smuzhiyun                | N | Processor       | xSDT  | LNXCPU   |
215*4882a593Smuzhiyun                +---+-----------------+-------+----------+
216*4882a593Smuzhiyun                | N | ThermalZone     | xSDT  | LNXTHERM |
217*4882a593Smuzhiyun                +---+-----------------+-------+----------+
218*4882a593Smuzhiyun                | N | PowerResource   | xSDT  | LNXPOWER |
219*4882a593Smuzhiyun                +---+-----------------+-------+----------+
220*4882a593Smuzhiyun                | N | Other Devices   | xSDT  | device   |
221*4882a593Smuzhiyun                +---+-----------------+-------+----------+
222*4882a593Smuzhiyun                | F | PWR_BUTTON      | FADT  | LNXPWRBN |
223*4882a593Smuzhiyun                +---+-----------------+-------+----------+
224*4882a593Smuzhiyun                | F | SLP_BUTTON      | FADT  | LNXSLPBN |
225*4882a593Smuzhiyun                +---+-----------------+-------+----------+
226*4882a593Smuzhiyun                | M | Video Extension | xSDT  | LNXVIDEO |
227*4882a593Smuzhiyun                +---+-----------------+-------+----------+
228*4882a593Smuzhiyun                | M | ATA Controller  | xSDT  | LNXIOBAY |
229*4882a593Smuzhiyun                +---+-----------------+-------+----------+
230*4882a593Smuzhiyun                | M | Docking Station | xSDT  | LNXDOCK  |
231*4882a593Smuzhiyun                +---+-----------------+-------+----------+
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun                 Table 1. ACPI Namespace Objects Mapping
234*4882a593Smuzhiyun
235*4882a593SmuzhiyunThe following rules apply when creating struct acpi_device objects on
236*4882a593Smuzhiyunthe basis of the contents of ACPI System Description Tables (as
237*4882a593Smuzhiyunindicated by the letter in the first column and the notation in the
238*4882a593Smuzhiyunsecond column of the table above):
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun   N:
241*4882a593Smuzhiyun      The object's source is an ACPI namespace node (as indicated by the
242*4882a593Smuzhiyun      named object's type in the second column).  In that case the object's
243*4882a593Smuzhiyun      directory in sysfs will contain the 'path' attribute whose value is
244*4882a593Smuzhiyun      the full path to the node from the namespace root.
245*4882a593Smuzhiyun   F:
246*4882a593Smuzhiyun      The struct acpi_device object is created for a fixed hardware
247*4882a593Smuzhiyun      feature (as indicated by the fixed feature flag's name in the second
248*4882a593Smuzhiyun      column), so its sysfs directory will not contain the 'path'
249*4882a593Smuzhiyun      attribute.
250*4882a593Smuzhiyun   M:
251*4882a593Smuzhiyun      The struct acpi_device object is created for an ACPI namespace node
252*4882a593Smuzhiyun      with specific control methods (as indicated by the ACPI defined
253*4882a593Smuzhiyun      device's type in the second column).  The 'path' attribute containing
254*4882a593Smuzhiyun      its namespace path will be present in its sysfs directory.  For
255*4882a593Smuzhiyun      example, if the _BCL method is present for an ACPI namespace node, a
256*4882a593Smuzhiyun      struct acpi_device object with LNXVIDEO 'bus_id' will be created for
257*4882a593Smuzhiyun      it.
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunThe third column of the above table indicates which ACPI System
260*4882a593SmuzhiyunDescription Tables contain information used for the creation of the
261*4882a593Smuzhiyunstruct acpi_device objects represented by the given row (xSDT means DSDT
262*4882a593Smuzhiyunor SSDT).
263*4882a593Smuzhiyun
264*4882a593SmuzhiyunThe fourth column of the above table indicates the 'bus_id' generation
265*4882a593Smuzhiyunrule of the struct acpi_device object:
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun   _HID:
268*4882a593Smuzhiyun      _HID in the last column of the table means that the object's bus_id
269*4882a593Smuzhiyun      is derived from the _HID/_CID identification objects present under
270*4882a593Smuzhiyun      the corresponding ACPI namespace node. The object's sysfs directory
271*4882a593Smuzhiyun      will then contain the 'hid' and 'modalias' attributes that can be
272*4882a593Smuzhiyun      used to retrieve the _HID and _CIDs of that object.
273*4882a593Smuzhiyun   LNXxxxxx:
274*4882a593Smuzhiyun      The 'modalias' attribute is also present for struct acpi_device
275*4882a593Smuzhiyun      objects having bus_id of the "LNXxxxxx" form (pseudo devices), in
276*4882a593Smuzhiyun      which cases it contains the bus_id string itself.
277*4882a593Smuzhiyun   device:
278*4882a593Smuzhiyun      'device' in the last column of the table indicates that the object's
279*4882a593Smuzhiyun      bus_id cannot be determined from _HID/_CID of the corresponding
280*4882a593Smuzhiyun      ACPI namespace node, although that object represents a device (for
281*4882a593Smuzhiyun      example, it may be a PCI device with _ADR defined and without _HID
282*4882a593Smuzhiyun      or _CID).  In that case the string 'device' will be used as the
283*4882a593Smuzhiyun      object's bus_id.
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun
286*4882a593SmuzhiyunLinux ACPI Physical Device Glue
287*4882a593Smuzhiyun===============================
288*4882a593Smuzhiyun
289*4882a593SmuzhiyunACPI device (i.e. struct acpi_device) objects may be linked to other
290*4882a593Smuzhiyunobjects in the Linux' device hierarchy that represent "physical" devices
291*4882a593Smuzhiyun(for example, devices on the PCI bus).  If that happens, it means that
292*4882a593Smuzhiyunthe ACPI device object is a "companion" of a device otherwise
293*4882a593Smuzhiyunrepresented in a different way and is used (1) to provide configuration
294*4882a593Smuzhiyuninformation on that device which cannot be obtained by other means and
295*4882a593Smuzhiyun(2) to do specific things to the device with the help of its ACPI
296*4882a593Smuzhiyuncontrol methods.  One ACPI device object may be linked this way to
297*4882a593Smuzhiyunmultiple "physical" devices.
298*4882a593Smuzhiyun
299*4882a593SmuzhiyunIf an ACPI device object is linked to a "physical" device, its sysfs
300*4882a593Smuzhiyundirectory contains the "physical_node" symbolic link to the sysfs
301*4882a593Smuzhiyundirectory of the target device object.  In turn, the target device's
302*4882a593Smuzhiyunsysfs directory will then contain the "firmware_node" symbolic link to
303*4882a593Smuzhiyunthe sysfs directory of the companion ACPI device object.
304*4882a593SmuzhiyunThe linking mechanism relies on device identification provided by the
305*4882a593SmuzhiyunACPI namespace.  For example, if there's an ACPI namespace object
306*4882a593Smuzhiyunrepresenting a PCI device (i.e. a device object under an ACPI namespace
307*4882a593Smuzhiyunobject representing a PCI bridge) whose _ADR returns 0x00020000 and the
308*4882a593Smuzhiyunbus number of the parent PCI bridge is 0, the sysfs directory
309*4882a593Smuzhiyunrepresenting the struct acpi_device object created for that ACPI
310*4882a593Smuzhiyunnamespace object will contain the 'physical_node' symbolic link to the
311*4882a593Smuzhiyun/sys/devices/pci0000:00/0000:00:02:0/ sysfs directory of the
312*4882a593Smuzhiyuncorresponding PCI device.
313*4882a593Smuzhiyun
314*4882a593SmuzhiyunThe linking mechanism is generally bus-specific.  The core of its
315*4882a593Smuzhiyunimplementation is located in the drivers/acpi/glue.c file, but there are
316*4882a593Smuzhiyuncomplementary parts depending on the bus types in question located
317*4882a593Smuzhiyunelsewhere.  For example, the PCI-specific part of it is located in
318*4882a593Smuzhiyundrivers/pci/pci-acpi.c.
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun
321*4882a593SmuzhiyunExample Linux ACPI Device Tree
322*4882a593Smuzhiyun=================================
323*4882a593Smuzhiyun
324*4882a593SmuzhiyunThe sysfs hierarchy of struct acpi_device objects corresponding to the
325*4882a593Smuzhiyunexample ACPI namespace illustrated in Figure 2 with the addition of
326*4882a593Smuzhiyunfixed PWR_BUTTON/SLP_BUTTON devices is shown below::
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun   +--------------+---+-----------------+
329*4882a593Smuzhiyun   | LNXSYSTEM:00 | \ | acpi:LNXSYSTEM: |
330*4882a593Smuzhiyun   +--------------+---+-----------------+
331*4882a593Smuzhiyun     |
332*4882a593Smuzhiyun     | +-------------+-----+----------------+
333*4882a593Smuzhiyun     +-| LNXPWRBN:00 | N/A | acpi:LNXPWRBN: |
334*4882a593Smuzhiyun     | +-------------+-----+----------------+
335*4882a593Smuzhiyun     |
336*4882a593Smuzhiyun     | +-------------+-----+----------------+
337*4882a593Smuzhiyun     +-| LNXSLPBN:00 | N/A | acpi:LNXSLPBN: |
338*4882a593Smuzhiyun     | +-------------+-----+----------------+
339*4882a593Smuzhiyun     |
340*4882a593Smuzhiyun     | +-----------+------------+--------------+
341*4882a593Smuzhiyun     +-| LNXCPU:00 | \_PR_.CPU0 | acpi:LNXCPU: |
342*4882a593Smuzhiyun     | +-----------+------------+--------------+
343*4882a593Smuzhiyun     |
344*4882a593Smuzhiyun     | +-------------+-------+----------------+
345*4882a593Smuzhiyun     +-| LNXSYBUS:00 | \_SB_ | acpi:LNXSYBUS: |
346*4882a593Smuzhiyun     | +-------------+-------+----------------+
347*4882a593Smuzhiyun     |   |
348*4882a593Smuzhiyun     |   | +- - - - - - - +- - - - - - +- - - - - - - -+
349*4882a593Smuzhiyun     |   +-| PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: |
350*4882a593Smuzhiyun     |   | +- - - - - - - +- - - - - - +- - - - - - - -+
351*4882a593Smuzhiyun     |   |
352*4882a593Smuzhiyun     |   | +------------+------------+-----------------------+
353*4882a593Smuzhiyun     |   +-| PNP0A08:00 | \_SB_.PCI0 | acpi:PNP0A08:PNP0A03: |
354*4882a593Smuzhiyun     |     +------------+------------+-----------------------+
355*4882a593Smuzhiyun     |       |
356*4882a593Smuzhiyun     |       | +-----------+-----------------+-----+
357*4882a593Smuzhiyun     |       +-| device:00 | \_SB_.PCI0.RP03 | N/A |
358*4882a593Smuzhiyun     |       | +-----------+-----------------+-----+
359*4882a593Smuzhiyun     |       |   |
360*4882a593Smuzhiyun     |       |   | +-------------+----------------------+----------------+
361*4882a593Smuzhiyun     |       |   +-| LNXPOWER:00 | \_SB_.PCI0.RP03.PXP3 | acpi:LNXPOWER: |
362*4882a593Smuzhiyun     |       |     +-------------+----------------------+----------------+
363*4882a593Smuzhiyun     |       |
364*4882a593Smuzhiyun     |       | +-------------+-----------------+----------------+
365*4882a593Smuzhiyun     |       +-| LNXVIDEO:00 | \_SB_.PCI0.GFX0 | acpi:LNXVIDEO: |
366*4882a593Smuzhiyun     |         +-------------+-----------------+----------------+
367*4882a593Smuzhiyun     |           |
368*4882a593Smuzhiyun     |           | +-----------+-----------------+-----+
369*4882a593Smuzhiyun     |           +-| device:01 | \_SB_.PCI0.DD01 | N/A |
370*4882a593Smuzhiyun     |             +-----------+-----------------+-----+
371*4882a593Smuzhiyun     |
372*4882a593Smuzhiyun     | +-------------+-------+----------------+
373*4882a593Smuzhiyun     +-| LNXSYBUS:01 | \_TZ_ | acpi:LNXSYBUS: |
374*4882a593Smuzhiyun       +-------------+-------+----------------+
375*4882a593Smuzhiyun         |
376*4882a593Smuzhiyun         | +-------------+------------+----------------+
377*4882a593Smuzhiyun         +-| LNXPOWER:0a | \_TZ_.FN00 | acpi:LNXPOWER: |
378*4882a593Smuzhiyun         | +-------------+------------+----------------+
379*4882a593Smuzhiyun         |
380*4882a593Smuzhiyun         | +------------+------------+---------------+
381*4882a593Smuzhiyun         +-| PNP0C0B:00 | \_TZ_.FAN0 | acpi:PNP0C0B: |
382*4882a593Smuzhiyun         | +------------+------------+---------------+
383*4882a593Smuzhiyun         |
384*4882a593Smuzhiyun         | +-------------+------------+----------------+
385*4882a593Smuzhiyun         +-| LNXTHERM:00 | \_TZ_.TZ00 | acpi:LNXTHERM: |
386*4882a593Smuzhiyun           +-------------+------------+----------------+
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun                  Figure 3. Example Linux ACPI Device Tree
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun.. note:: Each node is represented as "object/path/modalias", where:
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun   1. 'object' is the name of the object's directory in sysfs.
393*4882a593Smuzhiyun   2. 'path' is the ACPI namespace path of the corresponding
394*4882a593Smuzhiyun      ACPI namespace object, as returned by the object's 'path'
395*4882a593Smuzhiyun      sysfs attribute.
396*4882a593Smuzhiyun   3. 'modalias' is the value of the object's 'modalias' sysfs
397*4882a593Smuzhiyun      attribute (as described earlier in this document).
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun.. note:: N/A indicates the device object does not have the 'path' or the
400*4882a593Smuzhiyun   'modalias' attribute.
401