This way, these settings can be simply set on the class_init function, instead of requiring a separate machine init function just to set global variables.
Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- hw/core/loader.c | 12 +++++++----- hw/core/machine.c | 1 + hw/i386/pc_piix.c | 8 ++++---- hw/i386/pc_q35.c | 4 ++-- include/hw/boards.h | 2 ++ 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index 2bf6b8f..d1d1e72 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -51,12 +51,10 @@ #include "hw/nvram/fw_cfg.h" #include "exec/memory.h" #include "exec/address-spaces.h" +#include "hw/boards.h" #include <zlib.h> -bool option_rom_has_mr = false; -bool rom_file_has_mr = true; - static int roms_loaded; /* return the size or -1 if error */ @@ -646,6 +644,8 @@ int rom_add_file(const char *file, const char *fw_dir, hwaddr addr, int32_t bootindex, bool option_rom) { + MachineState *machine = current_machine; + MachineClass *mc = MACHINE_GET_CLASS(machine); Rom *rom; int rc, fd = -1; char devpath[100]; @@ -696,7 +696,7 @@ int rom_add_file(const char *file, const char *fw_dir, basename); snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); - if ((!option_rom || option_rom_has_mr) && rom_file_has_mr) { + if ((!option_rom || mc->option_rom_has_mr) && mc->rom_file_has_mr) { data = rom_set_mr(rom, OBJECT(fw_cfg), devpath); } else { data = rom->data; @@ -724,6 +724,8 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, hwaddr addr, const char *fw_file_name, FWCfgReadCallback fw_callback, void *callback_opaque) { + MachineState *machine = current_machine; + MachineClass *mc = MACHINE_GET_CLASS(machine); Rom *rom; void *data = NULL; @@ -740,7 +742,7 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); - if (rom_file_has_mr) { + if (mc->rom_file_has_mr) { data = rom_set_mr(rom, OBJECT(fw_cfg), devpath); } else { data = rom->data; diff --git a/hw/core/machine.c b/hw/core/machine.c index 3eeb0a9..648e7fc 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -312,6 +312,7 @@ static void machine_class_base_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); /* compat_props can't be simply memcpy()ed */ mc->compat_props = g_list_copy(mc->compat_props); + mc->rom_file_has_mr = true; } static const TypeInfo machine_info = { diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 2de8ec3..e14b78e 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -294,14 +294,12 @@ static void pc_compat_2_0(MachineState *machine) static void pc_compat_1_7(MachineState *machine) { pc_compat_2_0(machine); - option_rom_has_mr = true; x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC); } static void pc_compat_1_6(MachineState *machine) { pc_compat_1_7(machine); - rom_file_has_mr = false; } static void pc_compat_1_5(MachineState *machine) @@ -387,8 +385,6 @@ static void pc_init_pci_no_kvmclock(MachineState *machine) static void pc_init_isa(MachineState *machine) { - option_rom_has_mr = true; - rom_file_has_mr = false; x86_cpu_compat_disable_kvm_features(FEAT_KVM, KVM_FEATURE_PV_EOI); enable_compat_apic_id_mode(); pc_init1(machine); @@ -493,6 +489,7 @@ static void pc_i440fx_machine_v1_7_class_init(ObjectClass *oc, void *data) mc->default_machine_opts = NULL; mc->init = pc_init_pci_1_7; mc->name = "pc-i440fx-1.7"; + mc->option_rom_has_mr = true; machine_class_add_compat_props(mc, compat_props); pcmc->smbios_defaults = false; pcmc->gigabyte_align = false; @@ -516,6 +513,7 @@ static void pc_i440fx_machine_v1_6_class_init(ObjectClass *oc, void *data) pc_i440fx_machine_v1_7_class_init(oc, data); mc->init = pc_init_pci_1_6; mc->name = "pc-i440fx-1.6"; + mc->rom_file_has_mr = false; machine_class_add_compat_props(mc, compat_props); pcmc->has_acpi_build = false; } @@ -974,6 +972,8 @@ static void isapc_machine_class_init(ObjectClass *oc, void *data) mc->hot_add_cpu = NULL; mc->name = "isapc"; mc->default_cpu_model = "486"; + mc->option_rom_has_mr = true; + mc->rom_file_has_mr = false; machine_class_add_compat_props(mc, compat_props); pcmc->pci_enabled = false; pcmc->has_acpi_build = false; diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index d6f2053..0a637cb 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -271,14 +271,12 @@ static void pc_compat_2_0(MachineState *machine) static void pc_compat_1_7(MachineState *machine) { pc_compat_2_0(machine); - option_rom_has_mr = true; x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC); } static void pc_compat_1_6(MachineState *machine) { pc_compat_1_7(machine); - rom_file_has_mr = false; } static void pc_compat_1_5(MachineState *machine) @@ -388,6 +386,7 @@ static void pc_q35_machine_v1_7_class_init(ObjectClass *oc, void *data) pc_q35_machine_v2_0_class_init(oc, data); mc->default_machine_opts = NULL; mc->init = pc_q35_init_1_7; + mc->option_rom_has_mr = true; machine_class_add_compat_props(mc, compat_props); mc->name = "pc-q35-1.7"; pcmc->smbios_defaults = false; @@ -410,6 +409,7 @@ static void pc_q35_machine_v1_6_class_init(ObjectClass *oc, void *data) }; pc_q35_machine_v1_7_class_init(oc, data); mc->init = pc_q35_init_1_6; + mc->rom_file_has_mr = false; machine_class_add_compat_props(mc, compat_props); mc->name = "pc-q35-1.6"; pcmc->has_acpi_build = false; diff --git a/include/hw/boards.h b/include/hw/boards.h index ca78f46..c50fcc3 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -103,6 +103,8 @@ struct MachineClass { GList *compat_props; const char *hw_version; const char *default_cpu_model; + bool option_rom_has_mr; + bool rom_file_has_mr; HotplugHandler *(*get_hotplug_handler)(MachineState *machine, DeviceState *dev); -- 1.9.3