mirror of https://github.com/xemu-project/xemu.git
pc: Move option_rom_has_mr/rom_file_has_mr globals to MachineClass
This way, these settings can be simply set on the corresponding machine_options() function, instead of requiring code in pc_compat_*() functions. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
This commit is contained in:
parent
cdedce0564
commit
71ae9e94d9
|
@ -51,12 +51,10 @@
|
||||||
#include "hw/nvram/fw_cfg.h"
|
#include "hw/nvram/fw_cfg.h"
|
||||||
#include "exec/memory.h"
|
#include "exec/memory.h"
|
||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
|
#include "hw/boards.h"
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
bool option_rom_has_mr = false;
|
|
||||||
bool rom_file_has_mr = true;
|
|
||||||
|
|
||||||
static int roms_loaded;
|
static int roms_loaded;
|
||||||
|
|
||||||
/* return the size or -1 if error */
|
/* return the size or -1 if error */
|
||||||
|
@ -754,6 +752,7 @@ int rom_add_file(const char *file, const char *fw_dir,
|
||||||
hwaddr addr, int32_t bootindex,
|
hwaddr addr, int32_t bootindex,
|
||||||
bool option_rom)
|
bool option_rom)
|
||||||
{
|
{
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||||
Rom *rom;
|
Rom *rom;
|
||||||
int rc, fd = -1;
|
int rc, fd = -1;
|
||||||
char devpath[100];
|
char devpath[100];
|
||||||
|
@ -810,7 +809,7 @@ int rom_add_file(const char *file, const char *fw_dir,
|
||||||
basename);
|
basename);
|
||||||
snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name);
|
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);
|
data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
|
||||||
} else {
|
} else {
|
||||||
data = rom->data;
|
data = rom->data;
|
||||||
|
@ -838,6 +837,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||||
size_t max_len, hwaddr addr, const char *fw_file_name,
|
size_t max_len, hwaddr addr, const char *fw_file_name,
|
||||||
FWCfgReadCallback fw_callback, void *callback_opaque)
|
FWCfgReadCallback fw_callback, void *callback_opaque)
|
||||||
{
|
{
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||||
Rom *rom;
|
Rom *rom;
|
||||||
MemoryRegion *mr = NULL;
|
MemoryRegion *mr = NULL;
|
||||||
|
|
||||||
|
@ -855,7 +855,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||||
|
|
||||||
snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name);
|
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);
|
data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
|
||||||
mr = rom->mr;
|
mr = rom->mr;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -342,6 +342,7 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
/* Default 128 MB as guest ram size */
|
/* Default 128 MB as guest ram size */
|
||||||
mc->default_ram_size = 128 * M_BYTE;
|
mc->default_ram_size = 128 * M_BYTE;
|
||||||
|
mc->rom_file_has_mr = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void machine_class_base_init(ObjectClass *oc, void *data)
|
static void machine_class_base_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -320,14 +320,12 @@ static void pc_compat_2_0(MachineState *machine)
|
||||||
static void pc_compat_1_7(MachineState *machine)
|
static void pc_compat_1_7(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_2_0(machine);
|
pc_compat_2_0(machine);
|
||||||
option_rom_has_mr = true;
|
|
||||||
x86_cpu_change_kvm_default("x2apic", NULL);
|
x86_cpu_change_kvm_default("x2apic", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_6(MachineState *machine)
|
static void pc_compat_1_6(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_1_7(machine);
|
pc_compat_1_7(machine);
|
||||||
rom_file_has_mr = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_5(MachineState *machine)
|
static void pc_compat_1_5(MachineState *machine)
|
||||||
|
@ -361,8 +359,6 @@ static void pc_compat_0_13(MachineState *machine)
|
||||||
|
|
||||||
static void pc_init_isa(MachineState *machine)
|
static void pc_init_isa(MachineState *machine)
|
||||||
{
|
{
|
||||||
option_rom_has_mr = true;
|
|
||||||
rom_file_has_mr = false;
|
|
||||||
if (!machine->cpu_model) {
|
if (!machine->cpu_model) {
|
||||||
machine->cpu_model = "486";
|
machine->cpu_model = "486";
|
||||||
}
|
}
|
||||||
|
@ -527,6 +523,7 @@ static void pc_i440fx_1_7_machine_options(MachineClass *m)
|
||||||
pc_i440fx_2_0_machine_options(m);
|
pc_i440fx_2_0_machine_options(m);
|
||||||
m->hw_version = "1.7.0";
|
m->hw_version = "1.7.0";
|
||||||
m->default_machine_opts = NULL;
|
m->default_machine_opts = NULL;
|
||||||
|
m->option_rom_has_mr = true;
|
||||||
SET_MACHINE_COMPAT(m, PC_COMPAT_1_7);
|
SET_MACHINE_COMPAT(m, PC_COMPAT_1_7);
|
||||||
pcmc->smbios_defaults = false;
|
pcmc->smbios_defaults = false;
|
||||||
pcmc->gigabyte_align = false;
|
pcmc->gigabyte_align = false;
|
||||||
|
@ -542,6 +539,7 @@ static void pc_i440fx_1_6_machine_options(MachineClass *m)
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||||
pc_i440fx_1_7_machine_options(m);
|
pc_i440fx_1_7_machine_options(m);
|
||||||
m->hw_version = "1.6.0";
|
m->hw_version = "1.6.0";
|
||||||
|
m->rom_file_has_mr = false;
|
||||||
SET_MACHINE_COMPAT(m, PC_COMPAT_1_6);
|
SET_MACHINE_COMPAT(m, PC_COMPAT_1_6);
|
||||||
pcmc->has_acpi_build = false;
|
pcmc->has_acpi_build = false;
|
||||||
}
|
}
|
||||||
|
@ -1026,6 +1024,8 @@ static void isapc_machine_options(MachineClass *m)
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||||
m->desc = "ISA-only PC";
|
m->desc = "ISA-only PC";
|
||||||
m->max_cpus = 1;
|
m->max_cpus = 1;
|
||||||
|
m->option_rom_has_mr = true;
|
||||||
|
m->rom_file_has_mr = false;
|
||||||
pcmc->pci_enabled = false;
|
pcmc->pci_enabled = false;
|
||||||
pcmc->has_acpi_build = false;
|
pcmc->has_acpi_build = false;
|
||||||
pcmc->smbios_defaults = false;
|
pcmc->smbios_defaults = false;
|
||||||
|
|
|
@ -304,14 +304,12 @@ static void pc_compat_2_0(MachineState *machine)
|
||||||
static void pc_compat_1_7(MachineState *machine)
|
static void pc_compat_1_7(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_2_0(machine);
|
pc_compat_2_0(machine);
|
||||||
option_rom_has_mr = true;
|
|
||||||
x86_cpu_change_kvm_default("x2apic", NULL);
|
x86_cpu_change_kvm_default("x2apic", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_6(MachineState *machine)
|
static void pc_compat_1_6(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_1_7(machine);
|
pc_compat_1_7(machine);
|
||||||
rom_file_has_mr = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_5(MachineState *machine)
|
static void pc_compat_1_5(MachineState *machine)
|
||||||
|
@ -434,6 +432,7 @@ static void pc_q35_1_7_machine_options(MachineClass *m)
|
||||||
pc_q35_2_0_machine_options(m);
|
pc_q35_2_0_machine_options(m);
|
||||||
m->hw_version = "1.7.0";
|
m->hw_version = "1.7.0";
|
||||||
m->default_machine_opts = NULL;
|
m->default_machine_opts = NULL;
|
||||||
|
m->option_rom_has_mr = true;
|
||||||
SET_MACHINE_COMPAT(m, PC_COMPAT_1_7);
|
SET_MACHINE_COMPAT(m, PC_COMPAT_1_7);
|
||||||
pcmc->smbios_defaults = false;
|
pcmc->smbios_defaults = false;
|
||||||
pcmc->gigabyte_align = false;
|
pcmc->gigabyte_align = false;
|
||||||
|
@ -448,6 +447,7 @@ static void pc_q35_1_6_machine_options(MachineClass *m)
|
||||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||||
pc_q35_machine_options(m);
|
pc_q35_machine_options(m);
|
||||||
m->hw_version = "1.6.0";
|
m->hw_version = "1.6.0";
|
||||||
|
m->rom_file_has_mr = false;
|
||||||
SET_MACHINE_COMPAT(m, PC_COMPAT_1_6);
|
SET_MACHINE_COMPAT(m, PC_COMPAT_1_6);
|
||||||
pcmc->has_acpi_build = false;
|
pcmc->has_acpi_build = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,6 +93,8 @@ struct MachineClass {
|
||||||
GlobalProperty *compat_props;
|
GlobalProperty *compat_props;
|
||||||
const char *hw_version;
|
const char *hw_version;
|
||||||
ram_addr_t default_ram_size;
|
ram_addr_t default_ram_size;
|
||||||
|
bool option_rom_has_mr;
|
||||||
|
bool rom_file_has_mr;
|
||||||
|
|
||||||
HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
|
HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
|
||||||
DeviceState *dev);
|
DeviceState *dev);
|
||||||
|
|
Loading…
Reference in New Issue