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