[haiku-bugs] [Haiku] #10663: RSDP and MP Floating Pointer scan spots

  • From: yaniv@xxxxxxxxxxxxxx
  • Date: Mon, 10 Mar 2014 11:35:31 -0000

#10663: RSDP and MP Floating Pointer scan spots
---------------------------+------------------------------
 Reporter:  yaniv          |        Owner:  axeld
     Type:  bug            |       Status:  new
 Priority:  normal         |    Milestone:  R1
Component:  System/Kernel  |      Version:  R1/Development
 Keywords:                 |   Blocked By:
 Blocking:                 |  Has a Patch:  0
 Platform:  x86            |
---------------------------+------------------------------
 '''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:
 a. In the first kilobyte of Extended BIOS Data Area (EBDA), or
 b. 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
 c. In the BIOS ROM address space between 0F0000h and 0FFFFFh.

--
Ticket URL: <https://dev.haiku-os.org/ticket/10663>
Haiku <https://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: