| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- .. 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
- 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.
|