2023-04-24 15:29:38 -07:00
|
|
|
.. SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
==================
|
|
|
|
ACPI WMI interface
|
|
|
|
==================
|
|
|
|
|
|
|
|
The ACPI WMI interface is a proprietary extension of the ACPI specification made
|
|
|
|
by Microsoft to allow hardware vendors to embed WMI (Windows Management Instrumentation)
|
|
|
|
objects inside their ACPI firmware. Typical functions implemented over ACPI WMI
|
|
|
|
are hotkey events on modern notebooks and configuration of BIOS options.
|
|
|
|
|
|
|
|
PNP0C14 ACPI device
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
Discovery of WMI objects is handled by defining ACPI devices with a PNP ID
|
|
|
|
of ``PNP0C14``. These devices will contain a set of ACPI buffers and methods
|
|
|
|
used for mapping and execution of WMI methods and/or queries. If there exist
|
|
|
|
multiple of such devices, then each device is required to have a
|
|
|
|
unique ACPI UID.
|
|
|
|
|
|
|
|
_WDG buffer
|
|
|
|
-----------
|
|
|
|
|
|
|
|
The ``_WDG`` buffer is used to discover WMI objects and is required to be
|
|
|
|
static. Its internal structure consists of data blocks with a size of 20 bytes,
|
|
|
|
containing the following data:
|
|
|
|
|
|
|
|
======= =============== =====================================================
|
|
|
|
Offset Size (in bytes) Content
|
|
|
|
======= =============== =====================================================
|
|
|
|
0x00 16 128 bit Variant 2 object GUID.
|
|
|
|
0x10 2 2 character method ID or single byte notification ID.
|
|
|
|
0x12 1 Object instance count.
|
|
|
|
0x13 1 Object flags.
|
|
|
|
======= =============== =====================================================
|
|
|
|
|
|
|
|
The WMI object flags control whether the method or notification ID is used:
|
|
|
|
|
|
|
|
- 0x1: Data block usage is expensive and must be explicitly enabled/disabled.
|
|
|
|
- 0x2: Data block contains WMI methods.
|
|
|
|
- 0x4: Data block contains ASCIZ string.
|
|
|
|
- 0x8: Data block describes a WMI event, use notification ID instead
|
|
|
|
of method ID.
|
|
|
|
|
|
|
|
Each WMI object GUID can appear multiple times inside a system.
|
|
|
|
The method/notification ID is used to construct the ACPI method names used for
|
|
|
|
interacting with the WMI object.
|
|
|
|
|
|
|
|
WQxx ACPI methods
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
If a data block does not contain WMI methods, then its content can be retrieved
|
|
|
|
by this required ACPI method. The last two characters of the ACPI method name
|
|
|
|
are the method ID of the data block to query. Their single parameter is an
|
|
|
|
integer describing the instance which should be queried. This parameter can be
|
|
|
|
omitted if the data block contains only a single instance.
|
|
|
|
|
|
|
|
WSxx ACPI methods
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
Similar to the ``WQxx`` ACPI methods, except that it is optional and takes an
|
|
|
|
additional buffer as its second argument. The instance argument also cannot
|
|
|
|
be omitted.
|
|
|
|
|
|
|
|
WMxx ACPI methods
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
Used for executing WMI methods associated with a data block. The last two
|
|
|
|
characters of the ACPI method name are the method ID of the data block
|
|
|
|
containing the WMI methods. Their first parameter is a integer describing the
|
|
|
|
instance which methods should be executed. The second parameter is an integer
|
|
|
|
describing the WMI method ID to execute, and the third parameter is a buffer
|
|
|
|
containing the WMI method parameters. If the data block is marked as containing
|
|
|
|
an ASCIZ string, then this buffer should contain an ASCIZ string. The ACPI
|
|
|
|
method will return the result of the executed WMI method.
|
|
|
|
|
|
|
|
WExx ACPI methods
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
Used for optionally enabling/disabling WMI events, the last two characters of
|
|
|
|
the ACPI method are the notification ID of the data block describing the WMI
|
|
|
|
event as hexadecimal value. Their first parameter is an integer with a value
|
|
|
|
of 0 if the WMI event should be disabled, other values will enable
|
|
|
|
the WMI event.
|
|
|
|
|
|
|
|
WCxx ACPI methods
|
|
|
|
-----------------
|
|
|
|
Similar to the ``WExx`` ACPI methods, except that it controls data collection
|
|
|
|
instead of events and thus the last two characters of the ACPI method name are
|
|
|
|
the method ID of the data block to enable/disable.
|
|
|
|
|
|
|
|
_WED ACPI method
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Used to retrieve additional WMI event data, its single parameter is a integer
|
2024-02-19 04:59:18 -07:00
|
|
|
holding the notification ID of the event. This method should be evaluated every
|
|
|
|
time an ACPI notification is received, since some ACPI implementations use a
|
|
|
|
queue to store WMI event data items. This queue will overflow after a couple
|
|
|
|
of WMI events are received without retrieving the associated WMI event data.
|