Skip to main content

RootSystemDescriptionPointer

Struct RootSystemDescriptionPointer 

Source
pub struct RootSystemDescriptionPointer {
    pub signature: [u8; 8],
    pub checksum: u8,
    pub oemid: [u8; 6],
    pub revision: u8,
    pub rsdt_address: u32,
    pub length: u32,
    pub xsdt_address: u64,
    pub extended_checksum: u8,
    /* private fields */
}
Expand description

§Root System Description Pointer structure.

During OS initialization, OSPM must obtain the Root System Description Pointer (RSDP) structure from the platform. When OSPM locates the Root System Description Pointer (RSDP) structure, it then locates the Root System Description Table (RSDT) or the Extended Root System Description Table (XSDT) using the physical system address supplied in the RSDP.

§Finding the RSDP on IA-PC Systems

OSPM finds the Root System Description Pointer (RSDP) structure by searching physical memory ranges on 16-byte boundaries for a valid Root System Description Pointer structure signature and checksum match as follows:

  • The first 1 KB of the Extended BIOS Data Area (EBDA). For EISA or MCA systems, the EBDA can be found in the two-byte location 40:0Eh on the BIOS data area.
  • The BIOS read-only memory space between 0E0000h and 0FFFFFh.

§Finding the RSDP on UEFI Enabled Systems

In Unified Extensible Firmware Interface (UEFI) enabled systems, a pointer to the RSDP structure exists within the EFI System Table. The OS loader is provided a pointer to the EFI System Table at invocation. The OS loader must retrieve the pointer to the RSDP structure from the EFI System Table and convey the pointer to OSPM, using an OS dependent data structure, as part of the hand off of control from the OS loader to the OS.

The OS loader locates the pointer to the RSDP structure by examining the EFI Configuration Table within the EFI System Table. EFI Configuration Table entries consist of Globally Unique Identifier (GUID)/table pointer pairs. The UEFI specification defines two GUIDs for ACPI; one for ACPI 1.0 and the other for ACPI 2.0 or later specification revisions.

The EFI GUID for a pointer to the ACPI 1.0 specification RSDP structure is:

  • eb9d2d30-2d88-11d3-9a16-0090273fc14d

The EFI GUID for a pointer to the ACPI 2.0 or later specification RSDP structure is:

  • 8868e871-e4f1-11d3-bc22-0080c73c8881

The OS loader for an ACPI-compatible OS will search for an RSDP structure pointer (RSDP Structure) using the current revision GUID first and if it finds one, will use the corresponding RSDP structure pointer. If the GUID is not found then the OS loader will search for the RSDP structure pointer using the ACPI 1.0 version GUID.

The OS loader must retrieve the pointer to the RSDP structure from the EFI System Table before assuming platform control via the EFI ExitBootServices interface. See the UEFI Specification for more information.

Fields§

§signature: [u8; 8]

“RSD PTR “
Notice that this signature must contain a trailing blank character.

§checksum: u8

This is the checksum of the fields defined in the ACPI 1.0 specification.
This includes only the first 20 bytes of this table, bytes 0 to 19, including the checksum field.
These bytes must sum to zero.

§oemid: [u8; 6]

An OEM-supplied string that identifies the OEM.

§revision: u8

The revision of this structure.

Larger revision numbers are backward compatible to lower revision numbers.
The ACPI version 1.0 revision number of this table is zero. The ACPI version 1.0 RSDP Structure only includes the first 20 bytes of this table, bytes 0 to 19. It does not include the Length field and beyond.

§rsdt_address: u32

32 bit physical address of the RSDT.

JJ’s note: Assume undefined behavior if revision is 2.0+.

§length: u32

The length of the table, in bytes, including the header, starting from offset 0x0. This field is used to record the size of the entire table.

This field is only available in the ACPI version 2.0+ RSDP Structure.

§xsdt_address: u64

64 bit physical address of the XSDT.

This field is only available in the ACPI version 2.0+ RSDP Structure.

§extended_checksum: u8

This is a checksum of the entire table, including both checksum fields.

This field is only available in the ACPI version 2.0+ RSDP Structure.

Implementations§

Source§

impl RootSystemDescriptionPointer

Source

pub const fn validate_signature(&self) -> bool

Returns true if the rsdp signature is “RSD PTR “; otherwise, false.

Source

pub const fn validate_sdt_signature(&self) -> bool

Returns true if the rsdt or xsdt address matches the signature for RSDT or XSDT, more for simplicity than anything else.

Trait Implementations§

Source§

impl Clone for RootSystemDescriptionPointer

Source§

fn clone(&self) -> RootSystemDescriptionPointer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for RootSystemDescriptionPointer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.