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 RsdtAddress on 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.

  1. 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_TABLE array, which is housed in the global EFI_SYSTEM_TABLE.
  2. 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_GUID may also be published.
  3. OS Loader Query: When the UEFI bootloader executes, it queries the EFI_SYSTEM_TABLE->ConfigurationTable array for the ACPI GUID. Once located, the VendorTable pointer within that configuration table entry directly references the physical memory location of the RSDP.
  4. Parameter Passing: The bootloader passes this pointer directly to the OS kernel through architecture-specific boot parameters (such as the boot_params structure 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:

  1. It validates the structure using the embedded checksums.
  2. It extracts the 64-bit address of the XSDT.
  3. 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.