From 465bca89479c55998c37b7617be1fc07c32c3c9a Mon Sep 17 00:00:00 2001 From: Juan Quintela <quintela@redhat.com> Date: Tue, 22 Dec 2009 17:05:55 -0200 Subject: [PATCH 08/16] Add support for DeviceVersion to machine type RH-Author: Juan Quintela <quintela@redhat.com> Message-id: <659cbb6827f21439c2db864451fe92540f22c13c.1261501421.git.quintela@redhat.com> Patchwork-id: 5892 O-Subject: [PATCH 03/11] Add support for DeviceVersion to machine type Bugzilla: 541731 RH-Acked-by: Markus Armbruster <armbru@redhat.com> RH-Acked-by: Dor Laor <dlaor@redhat.com> RH-Acked-by: Michael S. Tsirkin <mst@redhat.com> RH-Acked-by: Marcelo Tosatti <mtosatti@redhat.com> We add support for having an array of (device, version) at the machine descritpion. if version is SAVEVM_DISABLE it means that this device should be disabled. We also add machine_device_version(name, version) to search version for this device name at the device description. If this device don't exist inthe machine description, "version" is returned. Signed-off-by: Juan Quintela <quintela@redhat.com> --- qemu/hw/boards.h | 6 ++++++ qemu/hw/hw.h | 5 +++++ qemu/hw/pc.c | 13 +++++++++++++ 3 files changed, 24 insertions(+), 0 deletions(-) Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- qemu/hw/boards.h | 6 ++++++ qemu/hw/hw.h | 5 +++++ qemu/hw/pc.c | 13 +++++++++++++ 3 files changed, 24 insertions(+), 0 deletions(-) diff --git a/qemu/hw/boards.h b/qemu/hw/boards.h index 6211c8b..9e146ce 100644 --- a/qemu/hw/boards.h +++ b/qemu/hw/boards.h @@ -10,6 +10,11 @@ typedef void QEMUMachineInitFunc(ram_addr_t ram_size, int vga_ram_size, const char *initrd_filename, const char *cpu_model); +typedef struct DeviceVersion { + const char *name; + const int version_id; +} DeviceVersion; + typedef struct QEMUMachine { const char *name; const char *desc; @@ -20,6 +25,7 @@ typedef struct QEMUMachine { int use_scsi; int max_cpus; struct QEMUMachine *next; + DeviceVersion *devices; } QEMUMachine; int qemu_register_machine(QEMUMachine *m); diff --git a/qemu/hw/hw.h b/qemu/hw/hw.h index 3809f57..9ffa432 100644 --- a/qemu/hw/hw.h +++ b/qemu/hw/hw.h @@ -232,6 +232,11 @@ typedef void SaveStateHandler(QEMUFile *f, void *opaque, int version_id); typedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque); typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); +/* Used to disable a savevm section */ +#define SAVEVM_DISABLED -1 + +int machine_device_version(const char *name, int version_id); + int register_savevm(const char *idstr, int instance_id, int version_id, diff --git a/qemu/hw/pc.c b/qemu/hw/pc.c index 1a7e896..af29c9a 100644 --- a/qemu/hw/pc.c +++ b/qemu/hw/pc.c @@ -1264,6 +1264,19 @@ void cmos_set_s3_resume(void) rtc_set_memory(rtc_state, 0xF, 0xFE); } +int machine_device_version(const char *name, int version_id) +{ + DeviceVersion *device = current_machine->devices; + + while (device && device->name) { + if (!strcmp(name, device->name)) { + return device->version_id; + } + device++; + } + return version_id; +} + QEMUMachine pc_machine = { .name = "pc", .desc = "Standard PC", -- 1.6.3.rc4.29.g8146