[SeaBIOS] [PATCH 5/6] update dsdt ressources at runtime

Kevin O'Connor kevin at koconnor.net
Fri May 18 05:07:39 CEST 2012


On Tue, May 15, 2012 at 12:46:25PM +0200, Gerd Hoffmann wrote:
> Write the pci window location to memory and add a pointer to the SSDT
> (BDAT region).  Turn \\SB.PCI0._CRS into a method which looks up the
> information there and updates the ressources accordingly.
> 
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
[...]
> diff --git a/src/acpi.c b/src/acpi.c
> index 30888b9..a13298d 100644
> --- a/src/acpi.c
> +++ b/src/acpi.c
> @@ -415,7 +415,8 @@ build_ssdt(void)
>      int length = ((1+3+4)
>                    + (acpi_cpus * SD_SIZEOF)
>                    + (1+2+5+(12*acpi_cpus))
> -                  + (6+2+1+(1*acpi_cpus)));
> +                  + (6+2+1+(1*acpi_cpus))
> +                  + 17);
>      u8 *ssdt = malloc_high(sizeof(struct acpi_table_header) + length);
>      if (! ssdt) {
>          warn_noalloc();
> @@ -477,6 +478,31 @@ build_ssdt(void)
>      for (i=0; i<acpi_cpus; i++)
>          *(ssdt_ptr++) = (i < CountCPUs) ? 0x01 : 0x00;
>  
> +    // store pci io windows: start, end, length
> +    // this way we don't have to do the math in the dsdt
> +    u64 *pcimem = malloc_high(sizeof(*pcimem) * 6);
> +    pcimem[0] = pcimem_start;
> +    pcimem[1] = pcimem_end - 1;
> +    pcimem[2] = pcimem_end - pcimem_start - 1;
> +    pcimem[3] = pcimem64_start;
> +    pcimem[4] = pcimem64_end - 1;
> +    pcimem[5] = pcimem64_end - pcimem64_start - 1;

I think we should really define a struct here instead of an array -
that should make it more obvious what's going on.

-Kevin



More information about the SeaBIOS mailing list