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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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
- 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: Gigabit Ethernet
Method 2
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:
- Extract ACPI tables (as root):
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat - Decompile:
iasl -d dsdt.dat, we get output filedsdt.dsl - Find device defined in
/proc/acpi/wakeupand compare it withdsdt.dsl
References
Method 3
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
Method 4
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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0