qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 20/21] q35: automatically load the q35 dsdt t


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2 20/21] q35: automatically load the q35 dsdt table
Date: Tue, 09 Oct 2012 10:29:40 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

Il 09/10/2012 10:02, Paolo Bonzini ha scritto:
> Il 09/10/2012 05:30, Jason Baron ha scritto:
>> From: Jason Baron <address@hidden>
>>
>> Automatically, locate the required q35 dsdt table on load. Otherwise we error
>> out. This could be done in the bios, but its harder to produce a good error
>> message.
> 
> Not just for q35, so the commit message is wrong, but the patch is
> otherwise good.
> 
> We should import the source code for the DSDT from SeaBIOS, and support
> building it + installing it.  You made this a hard failure, so it has to
> be done before this patch goes in, doesn't it?

Ah, having reviewed the SeaBIOS series I now see that you're keeping the
code in SeaBIOS but installing it alongside bios.bin.  This makes sense
since, at least for backwards compatibility, the PIIX DSDT will remain
in bios.bin for a while.

However, you still need to patch QEMU's roms/Makefile to copy the .aml
files to pc-bios, and the Makefile to install it (in both cases, just
grep for bios.bin).

Paolo

> 
> Paolo
> 
>> Signed-off-by: Jason Baron <address@hidden>
>> ---
>>  hw/pc.c      |   19 +++++++++++++++++++
>>  hw/pc.h      |    2 ++
>>  hw/pc_piix.c |    7 +++++++
>>  hw/pc_q35.c  |    7 +++++++
>>  4 files changed, 35 insertions(+), 0 deletions(-)
>>
>> diff --git a/hw/pc.c b/hw/pc.c
>> index f5fbd0c..4ee41a1 100644
>> --- a/hw/pc.c
>> +++ b/hw/pc.c
>> @@ -1172,3 +1172,22 @@ void ioapic_init_gsi(GSIState *gsi_state, const char 
>> *parent_name)
>>          gsi_state->ioapic_irq[i] = qdev_get_gpio_in(dev, i);
>>      }
>>  }
>> +
>> +int find_and_load_dsdt(const char *dsdt_name)
>> +{
>> +    char *filename;
>> +    char buf[1024];
>> +
>> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dsdt_name);
>> +    if (!filename) {
>> +        return -1;
>> +    }
>> +    snprintf(buf, 1024, "file=%s", filename);
>> +    g_free(filename);
>> +    if (acpi_table_add(buf) < 0) {
>> +        fprintf(stderr, "Wrong acpi table provided\n");
>> +        return -1;
>> +    }
>> +
>> +    return 0;
>> +}
>> diff --git a/hw/pc.h b/hw/pc.h
>> index 125c1fd..5e93ae1 100644
>> --- a/hw/pc.h
>> +++ b/hw/pc.h
>> @@ -227,5 +227,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory);
>>  #define E820_UNUSABLE   5
>>  
>>  int e820_add_entry(uint64_t, uint64_t, uint32_t);
>> +int find_and_load_dsdt(const char *dsdt_name);
>> +
>>  
>>  #endif
>> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
>> index e133630..06bb40e 100644
>> --- a/hw/pc_piix.c
>> +++ b/hw/pc_piix.c
>> @@ -126,6 +126,13 @@ static void pc_init1(MemoryRegion *system_memory,
>>      MemoryRegion *rom_memory;
>>      void *fw_cfg = NULL;
>>  
>> +    /* let's first see if we can find the proper dsdt */
>> +    if (find_and_load_dsdt("acpi-dsdt.aml")) {
>> +        fprintf(stderr, "Couldn't find piix dsdt table!\n"
>> +                        "Try updating your bios.\n");
>> +        exit(1);
>> +    }
>> +
>>      pc_cpus_init(cpu_model);
>>  
>>      if (kvmclock_enabled) {
>> diff --git a/hw/pc_q35.c b/hw/pc_q35.c
>> index 48083bb..1f96af0 100644
>> --- a/hw/pc_q35.c
>> +++ b/hw/pc_q35.c
>> @@ -356,6 +356,13 @@ static void pc_q35_init(ram_addr_t ram_size,
>>      qemu_irq *i8259;
>>      int i;
>>  
>> +    /* let's first see if we can find the proper dsdt */
>> +    if (find_and_load_dsdt("q35-acpi-dsdt.aml")) {
>> +        fprintf(stderr, "Couldn't find q35 dsdt table!\n"
>> +                        "Try updating your bios.\n");
>> +        exit(1);
>> +    }
>> +
>>      pc_cpus_init(cpu_model);
>>  
>>      kvmclock_create();
>>
> 
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]