Opened 10 years ago

Last modified 10 years ago

#10663 assigned bug

RSDP and MP Floating Pointer scan spots

Reported by: yaniv Owned by: tqh
Priority: normal Milestone: R1
Component: Drivers/ACPI Version: R1/Development
Keywords: Cc:
Blocked By: Blocking:
Platform: x86

Description

In src/system/boot/platform/bios_ia32/acpi.cpp

acpi_scan_spots[] includes BDA area, it should be the first 1 KB of EBDA.

According to spec: 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.

In src/system/boot/platform/bios_ia32/smp.cpp

acpi_scan_spots[] need to include the first 1 KB of EBDA. acpi_scan_spots[0] need to use actual base memory size from BDA

According to spec:

  1. The MP Floating Pointer Structure. This structure contains a physical address

pointer to the MP configuration table and other MP feature information bytes. When present, this structure indicates that the system conforms to the MP specification. This structure must be stored in at least one of the following memory locations, because the operating system searches for the MP floating pointer structure in the order described below:

  1. In the first kilobyte of Extended BIOS Data Area (EBDA), or
  2. Within the last kilobyte of system base memory (e.g., 639K-640K for systems with 640 KB of base memory or 511K-512K for systems with 512 KB of base memory) if the EBDA segment is undefined, or
  3. In the BIOS ROM address space between 0F0000h and 0FFFFFh.

Change History (2)

comment:1 by anevilyak, 10 years ago

Component: System/KernelDrivers/ACPI
Owner: changed from axeld to tqh
Status: newassigned

comment:2 by tqh, 10 years ago

While this is ACPI code (and perhaps should use ACPICA instead) this is handcrafted bootcode. Someone in that area might be better suited to tackle this (mmlr?).

Note: See TracTickets for help on using tickets.