[SeaBIOS] [PATCH] acpi: hide 64-bit PCI hole for Windows XP

Gerd Hoffmann kraxel at redhat.com
Fri Aug 9 08:25:00 CEST 2013


   Hi,

>> pmbase is a compile-time constant (aka #define) in both seabios and
>> coreboot, and making this runtime-configurable is non-trivial.  See
>> src/smm.c in seabios for one reason why.

> Converting src/smm.c to use a runtime value isn't hard - just change
> the assembler from: "mov $" __stringify(PORT_ACPI_PM_BASE) " + 0x04,
> %dx\n" to: "mov 4(my_acpi_base), %dx\n" and make sure to define the
> global variable my_acpi_base as VARFSEG.

Ah, good, I give that a try.  Need to check how that works out for
coreboot though.

That leaves the mmconf xbar location.  We can continue to have everybody
agree this should be mapped @ 0xb0000000 and be done with it.  Making
this configurable via fw_cfg is no problem for seabios.  coreboot can't
deal with it though, it sets up the xbar _very_ early because it does
the complete pci setup via mmconf.

>> In seabios we have fixed 32bit / 64bit width today, from acpi.c:
>>
>>     // store pci io windows
>>     *(u32*)&ssdt_ptr[acpi_pci32_start[0]] = cpu_to_le32(pcimem_start);
>>     *(u32*)&ssdt_ptr[acpi_pci32_end[0]] = cpu_to_le32(pcimem_end - 1);
>>     if (pcimem64_start) {
>>         ssdt_ptr[acpi_pci64_valid[0]] = 1;
>>         *(u64*)&ssdt_ptr[acpi_pci64_start[0]] = cpu_to_le64(pcimem64_start);
>>         *(u64*)&ssdt_ptr[acpi_pci64_end[0]] = cpu_to_le64(pcimem64_end - 1);
>>         *(u64*)&ssdt_ptr[acpi_pci64_length[0]] = cpu_to_le64(
>>             pcimem64_end - pcimem64_start);
>>     } else {
>>         ssdt_ptr[acpi_pci64_valid[0]] = 0;
>>     }
>>
>> Storing fixup instructions for these fields in the linker script
>> shouldn't be hard I think.
> 
> I don't think SeaBIOS should continue to do the above once the tables
> are moved to QEMU.  QEMU has all the info SeaBIOS has, so it can
> generate the tables correctly on its own.

The loader script provided by qemu has fixup instructions, which is
needed to fixup pointers to other acpi tables.  The idea is to use that
mechanism to also allow th firmware to fixup addresses like pmbase in
the qemu-generated tables.

cheers,
  Gerd





More information about the SeaBIOS mailing list