|
| 1 | +.. SPDX-License-Identifier: GPL-2.0-or-later |
| 2 | +
|
| 3 | +================== |
| 4 | +ACPI WMI interface |
| 5 | +================== |
| 6 | + |
| 7 | +The ACPI WMI interface is a proprietary extension of the ACPI specification made |
| 8 | +by Microsoft to allow hardware vendors to embed WMI (Windows Management Instrumentation) |
| 9 | +objects inside their ACPI firmware. Typical functions implemented over ACPI WMI |
| 10 | +are hotkey events on modern notebooks and configuration of BIOS options. |
| 11 | + |
| 12 | +PNP0C14 ACPI device |
| 13 | +------------------- |
| 14 | + |
| 15 | +Discovery of WMI objects is handled by defining ACPI devices with a PNP ID |
| 16 | +of ``PNP0C14``. These devices will contain a set of ACPI buffers and methods |
| 17 | +used for mapping and execution of WMI methods and/or queries. If there exist |
| 18 | +multiple of such devices, then each device is required to have a |
| 19 | +unique ACPI UID. |
| 20 | + |
| 21 | +_WDG buffer |
| 22 | +----------- |
| 23 | + |
| 24 | +The ``_WDG`` buffer is used to discover WMI objects and is required to be |
| 25 | +static. Its internal structure consists of data blocks with a size of 20 bytes, |
| 26 | +containing the following data: |
| 27 | + |
| 28 | +======= =============== ===================================================== |
| 29 | +Offset Size (in bytes) Content |
| 30 | +======= =============== ===================================================== |
| 31 | +0x00 16 128 bit Variant 2 object GUID. |
| 32 | +0x10 2 2 character method ID or single byte notification ID. |
| 33 | +0x12 1 Object instance count. |
| 34 | +0x13 1 Object flags. |
| 35 | +======= =============== ===================================================== |
| 36 | + |
| 37 | +The WMI object flags control whether the method or notification ID is used: |
| 38 | + |
| 39 | +- 0x1: Data block usage is expensive and must be explicitly enabled/disabled. |
| 40 | +- 0x2: Data block contains WMI methods. |
| 41 | +- 0x4: Data block contains ASCIZ string. |
| 42 | +- 0x8: Data block describes a WMI event, use notification ID instead |
| 43 | + of method ID. |
| 44 | + |
| 45 | +Each WMI object GUID can appear multiple times inside a system. |
| 46 | +The method/notification ID is used to construct the ACPI method names used for |
| 47 | +interacting with the WMI object. |
| 48 | + |
| 49 | +WQxx ACPI methods |
| 50 | +----------------- |
| 51 | + |
| 52 | +If a data block does not contain WMI methods, then its content can be retrieved |
| 53 | +by this required ACPI method. The last two characters of the ACPI method name |
| 54 | +are the method ID of the data block to query. Their single parameter is an |
| 55 | +integer describing the instance which should be queried. This parameter can be |
| 56 | +omitted if the data block contains only a single instance. |
| 57 | + |
| 58 | +WSxx ACPI methods |
| 59 | +----------------- |
| 60 | + |
| 61 | +Similar to the ``WQxx`` ACPI methods, except that it is optional and takes an |
| 62 | +additional buffer as its second argument. The instance argument also cannot |
| 63 | +be omitted. |
| 64 | + |
| 65 | +WMxx ACPI methods |
| 66 | +----------------- |
| 67 | + |
| 68 | +Used for executing WMI methods associated with a data block. The last two |
| 69 | +characters of the ACPI method name are the method ID of the data block |
| 70 | +containing the WMI methods. Their first parameter is a integer describing the |
| 71 | +instance which methods should be executed. The second parameter is an integer |
| 72 | +describing the WMI method ID to execute, and the third parameter is a buffer |
| 73 | +containing the WMI method parameters. If the data block is marked as containing |
| 74 | +an ASCIZ string, then this buffer should contain an ASCIZ string. The ACPI |
| 75 | +method will return the result of the executed WMI method. |
| 76 | + |
| 77 | +WExx ACPI methods |
| 78 | +----------------- |
| 79 | + |
| 80 | +Used for optionally enabling/disabling WMI events, the last two characters of |
| 81 | +the ACPI method are the notification ID of the data block describing the WMI |
| 82 | +event as hexadecimal value. Their first parameter is an integer with a value |
| 83 | +of 0 if the WMI event should be disabled, other values will enable |
| 84 | +the WMI event. |
| 85 | + |
| 86 | +WCxx ACPI methods |
| 87 | +----------------- |
| 88 | +Similar to the ``WExx`` ACPI methods, except that it controls data collection |
| 89 | +instead of events and thus the last two characters of the ACPI method name are |
| 90 | +the method ID of the data block to enable/disable. |
| 91 | + |
| 92 | +_WED ACPI method |
| 93 | +---------------- |
| 94 | + |
| 95 | +Used to retrieve additional WMI event data, its single parameter is a integer |
| 96 | +holding the notification ID of the event. |
0 commit comments