Windows ACPI Requirements
The requirements here have been mainly captured from Windows ACPI Design Guide for SoC Platforms - Windows drivers which list a set of ACPI features required to support Windows on SoC-based platforms with clamshell form factor.
Summary
The following table lists the set of ACPI features required to support Windows on SoC-based platforms.
Feature | Section of ACPI 5.0 specification | Notes |
---|---|---|
System description tables | 5.2.5 | Root System Description Pointer (RSDP) |
| 5.2.7, 5.2.8 | Either of Root (RSDT) or Extended (XSDT) System Description Tables |
| 5.2.9 | Fixed ACPI Description Table (FADT) |
| 5.2.12 | Multiple APIC Description Table (MADT) |
| 5.2.24 | Generic Timer Description Table (GTDT) |
| 5.2.6 | Core System Resources Table (CSRT) Specification |
| 5.2.6 | Debug Port Table 2 (DBG2) Specification |
| 5.2.11.1 | Differentiated System Description Table (DSDT) |
| 5.2.11.2 | Secondary System Description Table (SSDT) |
Device management | 6.1 | Device Identification Objects |
| 6.2 | Device Configuration Objects |
GPIO | 5.6.5.1 | GPIO controller devices |
| 5.6.5 | GPIO-signaled ACPI events |
| 6.4.3.8.1, 19.5.53, 19.5.54 | GPIO resource descriptors and macros |
| 5.5.2.4.4 | GeneralPurposeIO OpRegions |
Simple peripheral bus (SPB) | 6.4.3.8.2, 19.5.55, 19.5.118, 19.5.134 | SPB resource descriptors and macros |
|
| GenericSerialBus OpRegions |
Device power management | 3.3 |
|
| 7.1 | Power Resources |
| 7.2 | Device Power Management Objects |
ACPI-defined devices | 9.0, 10 |
|
| 9.5 | Control Method Power Button |
| 9.4 | Control Method Lid Device |
| 10.2 | Control Method Battery device |
| 9.18 | Control Method Time and Alarm device |
| 11 | Thermal Zones |
Device-specific support | 8.4 | Processors |
| Appendix B | Displays |
| 6.1.8, 9.13 | USB |
|
| SD bus |
|
| Cameras |
|
| HID-over-I2C devices |
| 3.2.1, 4.8.2.2.1.2, 4.8.2.2.1.3 | Buttons |
|
| Dock and convertible PC sensors |
ACPI Model
Windows supports the hardware-reduced ACPI platform and ACPI hardware specification is not required for SoC-based platforms.
Event Model
GPIO interrupts are used to signal the events. A number of inbox drivers rely on this service to provide support for ACPI-defined devices, such as Control Method Power Button, LID device, Control Method Battery, Thermal Zone, and so on
ACPI Tables
Windows requires or supports the following ACPI Tables
Root System Description Pointer (RSDP)
Root System Description Table (RSDT)
Fixed ACPI Description Table (FADT)
Debug Port Table 2 (DBG2)
Differentiated System Description Table (DSDT)
System description tables (SSDT)
Multiple APIC Description Table (MADT)
Generic Timer Description Table (GTDT)
Core System Resources Table (CSRT).
Windows SMM Security Mitigations Table (WSMT)
iSCSI Boot Firmware Table (iBFT)
Device identification
Windows uses the following methods for device identification and enumeration.
_HID, _CID, _SUB, _HRV, _CLS, _DSM, _ADR, _UID
Device Management Namespace Objects - Windows drivers
Power Management
ACPI-defined sleeping states (S1 through S4) are not used on Windows SoC platforms and Windows focus on device level power management. Windows supports the D0 to D3 ( including D3cold) power states.
For devices integrated with SoC, Windows Power Framework (PoFx) does the power management. An SoC-specific power engine plug-in (PEP) is required by the PoFx.
For peripheral devices that are not integrated into the SoC, Windows uses ACPI Device Power Management.
For some devices, PEP alone or in combination with ACPI device power management can be used.
Power Engine Plugin (PEP)
The Power Engine Plugin (PEP) provides interfaces for platform power management including device power management (DPM), processor power management (PPM), and ACPI runtime methods.
PEP allows implementing ACPI runtime methods natively via a Windows driver rather than firmware (AML)
ACPI Defined Devices
Lid Device
Control method battery device
Thermal zones
Control method time and alarm device
Windows ACPI drive
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/acpi-driver