On Wed, Oct 30, 2013 at 01:56:40PM +0100, arm...@redhat.com wrote: > From: Markus Armbruster <arm...@redhat.com> > > Currently, we get SeaBIOS defaults: manufacturer Bochs, product Bochs, > no version. Best SeaBIOS can do, but we can provide better defaults: > manufacturer QEMU, product & version taken from QEMUMachine desc and > name. > > Take care to do this only for new machine types, of course. > > Signed-off-by: Markus Armbruster <arm...@redhat.com>
I feel applying this one would be a mistake. Machine desc is for human readers. For example, it currently says "Standard PC (Q35 + ICH9, 2009)" but if we add a variant with IDE compatibility mode we will likely want to tweak it to say "Standard PC (Q35 + ICH9/AHCI mode, 2009)" and add another one saying ""Standard PC (Q35 + ICH9/compat mode, 2009)". In other words we want the ability to tweak description retroactively, and exposing it to guest will break this ability. So we really need a new field not tied to the human description. > --- > hw/i386/pc_piix.c | 9 +++++++++ > hw/i386/pc_q35.c | 7 +++++++ > hw/i386/smbios.c | 14 ++++++++++++++ > include/hw/i386/smbios.h | 2 ++ > 4 files changed, 32 insertions(+) > > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index c6042c7..417ad33 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -28,6 +28,7 @@ > #include "hw/loader.h" > #include "hw/i386/pc.h" > #include "hw/i386/apic.h" > +#include "hw/i386/smbios.h" > #include "hw/pci/pci.h" > #include "hw/pci/pci_ids.h" > #include "hw/usb.h" > @@ -59,6 +60,7 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; > > static bool has_pvpanic; > static bool has_pci_info = true; > +static bool smbios_type1_defaults = true; > > /* PC hardware initialisation */ > static void pc_init1(QEMUMachineInitArgs *args, > @@ -124,6 +126,10 @@ static void pc_init1(QEMUMachineInitArgs *args, > guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); > guest_info->has_pci_info = has_pci_info; > guest_info->isapc_ram_fw = !pci_enabled; > + if (smbios_type1_defaults) { > + smbios_set_type1_defaults("QEMU", args->machine->desc, > + args->machine->name); > + } > > /* allocate ram and load rom/bios */ > if (!xen_enabled()) { > @@ -240,6 +246,7 @@ static void pc_compat_1_6(QEMUMachineInitArgs *args) > { > has_pci_info = false; > rom_file_in_ram = false; > + smbios_type1_defaults = false; > } > > static void pc_compat_1_5(QEMUMachineInitArgs *args) > @@ -304,6 +311,7 @@ static void pc_init_pci_1_2(QEMUMachineInitArgs *args) > static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args) > { > has_pci_info = false; > + smbios_type1_defaults = false; > disable_kvm_pv_eoi(); > enable_compat_apic_id_mode(); > pc_init1(args, 1, 0); > @@ -312,6 +320,7 @@ static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs > *args) > static void pc_init_isa(QEMUMachineInitArgs *args) > { > has_pci_info = false; > + smbios_type1_defaults = false; > if (!args->cpu_model) { > args->cpu_model = "486"; > } > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index ca84e1c..9e3213f 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -39,6 +39,7 @@ > #include "hw/pci-host/q35.h" > #include "exec/address-spaces.h" > #include "hw/i386/ich9.h" > +#include "hw/i386/smbios.h" > #include "hw/ide/pci.h" > #include "hw/ide/ahci.h" > #include "hw/usb.h" > @@ -49,6 +50,7 @@ > > static bool has_pvpanic; > static bool has_pci_info = true; > +static bool smbios_type1_defaults = true; > > /* PC hardware initialisation */ > static void pc_q35_init(QEMUMachineInitArgs *args) > @@ -111,6 +113,10 @@ static void pc_q35_init(QEMUMachineInitArgs *args) > guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); > guest_info->has_pci_info = has_pci_info; > guest_info->isapc_ram_fw = false; > + if (smbios_type1_defaults) { > + smbios_set_type1_defaults("QEMU", args->machine->desc, > + args->machine->name); > + } > > /* allocate ram and load rom/bios */ > if (!xen_enabled()) { > @@ -224,6 +230,7 @@ static void pc_compat_1_6(QEMUMachineInitArgs *args) > { > has_pci_info = false; > rom_file_in_ram = false; > + smbios_type1_defaults = false; > } > > static void pc_compat_1_5(QEMUMachineInitArgs *args) > diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c > index d3f1ee6..e8f41ad 100644 > --- a/hw/i386/smbios.c > +++ b/hw/i386/smbios.c > @@ -256,6 +256,20 @@ static void smbios_build_type_1_fields(void) > } > } > > +void smbios_set_type1_defaults(const char *manufacturer, > + const char *product, const char *version) > +{ > + if (!type1.manufacturer) { > + type1.manufacturer = manufacturer; > + } > + if (!type1.product) { > + type1.product = product; > + } > + if (!type1.version) { > + type1.version = version; > + } > +} > + > uint8_t *smbios_get_table(size_t *length) > { > if (!smbios_immutable) { > diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h > index b08ec71..18fb970 100644 > --- a/include/hw/i386/smbios.h > +++ b/include/hw/i386/smbios.h > @@ -16,6 +16,8 @@ > #include "qemu/option.h" > > void smbios_entry_add(QemuOpts *opts); > +void smbios_set_type1_defaults(const char *manufacturer, > + const char *product, const char *version); > uint8_t *smbios_get_table(size_t *length); > > /* > -- > 1.8.1.4