Here's some notes from 2001:
Why ACPI is in the kernel
ACPI and the AML interpreter are required very early during kernel
initialization, before the device drivers are loaded. Control methods
are executed by the interpreter at this time (such as all device _INI
methods).
ACPI owns the ACPI hardware and ACPI interrupt (SCI), and therefore this
part of the ACPI subsystem is similar to a device driver.
Control methods that are executed via the AML interpreter are allowed
direct access to all of physical memory, all I/O space, and all PCI
configuration space (via Operation Regions.)
Device drivers such as the Embedded Controller, Battery, and Thermal use
ACPI services and execute AML control methods during their operation.
Device driver callback routines are invoked directly from the AML
interpreter when the ASL Notify operation is executed.
ACPI and the AML interpreter cannot be paged out. How do you wake up
the disk used for paging? Not a good idea for other device drivers to
depend on code that may be paged out.
Also,
As of May 2000, the AML interpreter was in acpid! Shortly after that, we
made a conscious decision to move it into the driver for the reasons
above. The code may be large (for Linux), but it is necessary and must
remain resident (it is non-pageable).