ACPI RSDP in UEFI Handoff Routines
The Root System Description Pointer (RSDP) serves as the primary bridge between UEFI firmware and the operating system's ACPI (Advanced Configuration and Power Interface) subsystem. During the boot sequence, the RSDP provides the initial memory pointer required by the OS kernel to discover, map, and parse hardware configuration tables. Without the RSDP handoff, modern operating systems cannot configure device power states, enumerate non-PCI hardware, or initialize platform-level ACPI features.
The Role of the RSDP Structure
The RSDP is a small, standardized descriptor structure containing essential validation metadata and memory addresses. Its primary role is to supply the physical address of the Root System Description Table (RSDT) or the Extended System Description Table (XSDT).
Key fields within the RSDP structure include:
- Signature: An 8-byte string reading
"RSD PTR "used for validation. - Checksums: One-byte values verifying the integrity of the ACPI 1.0 table descriptor and the extended ACPI 2.0+ fields.
- XsdtAddress: A 64-bit physical pointer pointing
directly to the XSDT (superseding the 32-bit
RsdtAddresson modern platforms).
The UEFI Handoff Mechanism
Unlike legacy BIOS systems—where the operating system had to scan the
Extended BIOS Data Area (EBDA) or physical memory regions between
0x000E0000 and 0x000FFFFF to locate the
"RSD PTR " signature—UEFI provides a deterministic,
pointer-based handoff mechanism.
- Table Registration: During firmware initialization,
the UEFI DXE (Driver Execution Environment) builds the ACPI tables and
publishes the RSDP. The firmware registers a pointer to the RSDP inside
the
EFI_CONFIGURATION_TABLEarray, which is housed in the globalEFI_SYSTEM_TABLE. - GUID Association: The entry is tagged with a
well-known GUID. For modern systems running ACPI 2.0 or later, it uses
EFI_ACPI_20_TABLE_GUID(8868e871-e4f1-11d3-bc22-0080c73c8881). For legacy compliance,ACPI_10_TABLE_GUIDmay also be published. - OS Loader Query: When the UEFI bootloader executes,
it queries the
EFI_SYSTEM_TABLE->ConfigurationTablearray for the ACPI GUID. Once located, theVendorTablepointer within that configuration table entry directly references the physical memory location of the RSDP. - Parameter Passing: The bootloader passes this
pointer directly to the OS kernel through architecture-specific boot
parameters (such as the
boot_paramsstructure in x86-64 Linux or the EFI initialization structures in Windows).
Preserving Memory
Across ExitBootServices()
A critical part of the handoff is memory management. Before
transferring full execution to the OS kernel, the bootloader calls
ExitBootServices(), which terminates UEFI boot-time
services and invalidates standard boot memory allocations.
To prevent the RSDP and downstream ACPI tables from being
overwritten, UEFI places these structures into memory regions marked as
EfiACPIReclaimMemory or EfiACPIMemoryNVS. The
operating system's memory manager reads the UEFI memory map, identifies
these regions, and preserves them during the initial kernel memory
setup.
OS Consumption
Once the kernel has control and reads the RSDP:
- It validates the structure using the embedded checksums.
- It extracts the 64-bit address of the XSDT.
- It traverses the XSDT to discover pointers to all secondary tables, such as the FADT (Fixed ACPI Description Table), MADT (Multiple APIC Description Table), and DSDT (Differentiated System Description Table).
Through this chain of pointers, the RSDP enables the operating system to take full operational control of the platform's power management, multiprocessor initialization, and device topology.