51

I have to disable some event to avoid an immediate wakeup after suspend in my desktop machine, and I made it by trial and error (works well, so that is not a problem). But I wonder... for example in my laptop I have a long list in /proc/acpi/wakeup:

[...]
RP03      S4    *disabled
PXSX      S4    *disabled
RP04      S4    *disabled  pci:0000:00:1c.3
PXSX      S4    *enabled   pci:0000:03:00.0
RP06      S4    *disabled
[...]

I have searched around and I can't find a place where a list with the meaning of the 4-letter code in the first column is explained. I imagine that the events with a device name after them are linked/generated by that device, but I am at a loss with most of the rest... minus wild guesses.

How can I know what, for example, event RP06 is? Is there anywhere a list? Or are that codes vendor-specific?

Rmano
  • 3,335
  • 5
  • 21
  • 36

4 Answers4

55

The codes come from the DSDT (Differentiated System Description Table) of your BIOS. This "table" describes the integrated devices on your mainboard, their dependencies and power-management functions.

Devices in the DSDT are arranged in a tree and each path component is limited to 4 characters. The codes in /proc/acpi/wakeup are the last path components (aka the names) of the devices the vendor used for the devices.

They are inherently vendor-specific, as the vendor may name any device as he likes. But there are some names that are common between many vendors, either because they are used as examples in the ACPI specification or because they are obvious abbreviations:

  • PS2K: PS/2 keyboard
  • PS2M: PS/2 mouse
  • PWRB or PBTN: Power button
  • SLPB: Sleep button
  • LID: Laptop lid
  • RP0x or EXPx: PCIE slot #x (aka PCI Express Root Port #x)
  • EHCx or USBx: USB 2.0 (EHCI) chip
  • XHC: USB 3.0 (XHCI) chip
  • PEGx: PCI Express for Graphics slot #x
  • GLAN or IGBE: Gigabit Ethernet
cg909
  • 6,908
  • 1
  • 27
  • 30
  • 2
    Great answer! Thanks. What about IGBE and HDEF? ;-) – Monah Tuk Mar 17 '17 at 00:51
  • 4
    Well, they are inherently vendor-specific, so you can't be too sure. But HDEF most probably means "High definition", so it's likely to be the integrated audio device and IGBE could stand for "Intel Gigabit Ethernet" or "Integrated Gigabit Ethernet", so it should be the Ethernet LAN controller. – cg909 Mar 17 '17 at 07:51
  • 2
    What about `PXSX`? – BuZZ-dEE Jan 17 '18 at 23:02
  • 4
    @BuZZ-dEE `PXSX` seems to be an generic name for devices using PCI Express. At least on my computer there is one PXSX device corresponding to each RP0x device. You might get more information by [reading the DSDT of your computer](https://blog.fpmurphy.com/2014/12/decompiling-acpi-tables.html). If there is a PCI id on the right side in the `/proc/acpi/wakeup` output you can correlate it to the output of `lspci` – cg909 Jan 22 '18 at 13:16
5

You could extract and decompile ACPI table for your computer.

By use Intel's ASL compiler, you could turn your systems DSDT table into source code.

You'll need to install acpica-tools:

  • Ubuntu: sudo apt-get install acpica-tools
  • Arch Linux: sudo pacman -S --needed acpica

Here are the steps:

  1. Extract ACPI tables (as root): sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
  2. Decompile: iasl -d dsdt.dat, we get output file dsdt.dsl
  3. Find device defined in /proc/acpi/wakeup and compare it with dsdt.dsl

References

mja
  • 1,335
  • 1
  • 14
  • 25
  • 2
    The dsdt.dsl is a huge file with a sprinkling of english. I don't even see "keyboard" or "mouse". That's my experience with an ASUS machine – caduceus May 15 '20 at 07:23
5

Obvious solution for pci devices:

# cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
GP12      S4    *enabled   pci:0000:00:07.1
GP13      S4    *enabled   pci:0000:00:08.1 
XHC0      S4    *enabled   pci:0000:08:00.3
GPP0      S4    *enabled   pci:0000:00:01.1
GPP8      S4    *enabled   pci:0000:00:03.1
GPP1      S4    *enabled   pci:0000:00:01.2
PTXH      S4    *enabled   pci:0000:02:00.0
PT20      S4    *enabled   pci:0000:03:00.0
...

is to search by bus numbers:

# lspci | grep 08:00.3
08:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
# lspci | grep 02:00.0
02:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] Device 43ee
Oleg Kr
  • 151
  • 1
  • 2
  • Yes, thanks. The main problem is for the non-pci ones, though. basically is lack of documentation from the motherboard-bios integrator... – Rmano Nov 19 '21 at 12:42
  • 1
    @Rmano I managed to find with grep some non-pci devices in /sys/bus/acpi/devices symlinked to /sys/devices e.g. my non-pci GP30 is SATA controller and another GPPn is HD Audio (in fact PCI). Tried to find some utility to explore the sysfs tree but couldn't find anything. – Oleg Kr Nov 19 '21 at 18:54
2

The linux kernel documentation on acpi namespace gives some tantalising hints on what these abbreviations might be, eg "Scope(RP03): the PCI0 power scope", and the kernel source for the /proc file says it is a dev->pnp.bus_id, but that doesn't help.

The 958 page acpi spec 5.0 is very interesting, but no help on these names either.

meuh
  • 49,672
  • 2
  • 52
  • 114