ACPI Drivers
An ACPI-enabled system provides a set of drivers (collectively the ACPI driver).
ACPI HAL
The ACPI HAL driver provides a fixed device with HID ROOT\ACPI_HAL. The ACPI_HAL will always discover a device with HID ACPI_HAL\PNP0C08 (“ACPI system board hardware”) during attach, representing the ACPI \_SB_ object, which will be attached by the ACPI Namespace driver.
ACPI Namespace
The ACPI Namespace driver attaches to devices with HID ACPI_HAL\PNP0C08 and reports all device and processor objects in the \_SB_ ACPI namespace. It loads HIDs, CIDs, and (if present) the ADR from all nodes, as well as processor uid, acpi path, base bus number (_BBN) and pci segment (_SEG) where present. The dispatch routine of the ACPI Namespace driver supports retreiving node properties as well as a special operation to execute ACPI methods (NOTE: Not yet implemented) and the ability to enumerate a node’s resources from the _PRS and _CRS methods.
Nodes with no HID or CID and their children will be ignored by the ACPI Namespace driver, and must be enumerated by other drivers, and may be later attached to a corresponding namespace node using the Attach-By-Adr private dispatch.
When the ACPI Namespace driver receives a set-resources IRP from the IO Manager it modifies stored ACPI resource structures to match the chosen resources and invokes _SRS if _PRS was originally used to enumerate resources (Not yet implemented). It then frees all stored ACPI resource structures.
Private Dispatch
The ACPI Namespace driver accepts a private dispatch with id {0a6f2f6c-5e68-42b9-bc8e-375b556d57ea}, called Attach-By-ADR. This function, invoked on the parent of a device enumerated by another bus driver, attempts to locate a direct child of the parent’s namespace node with ADR field equal to the one provided in the operation parameters. If such a node is located, the node has a function attached as with a normal ACPI device and recursive enumeration of devices is restarted on the subtree starting from that node.
ACPI Processor
The ACPI Processor driver attaches to devices with HID ACPI0007 (processor device objects) and HID ACPI\ProcessorObject (legacy processor objects). It provides a PerCpu reference to the processor device and its dispatch routine allows retreiving the architectural processor ID (APIC id on x86_64 or MPIDR on aarch64) of the processor the device is associated with, which may (but usually does not) differ from the ACPI processor UID.