From 4715d42efe8632b0f9d2594a80e917de45e4ef88 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 25 Aug 2015 20:00:45 +0200 Subject: [PATCH 01/21] qom: Do not reuse errp after a possible error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The argument for an Error **errp parameter must point to a null pointer. If it doesn't, and an error happens, error_set() fails its assertion. Instead of foo(foos, errp); bar(bars, errp); you need to do something like Error *err = NULL; foo(foos, &err); if (err) { error_propagate(errp, err); goto out; } bar(bars, errp); out: Screwed up in commit 0e55884 (v1.3.0): property_get_bool(). Screwed up in commit 1f21772 (v2.1.0): object_property_get_enum() and object_property_get_uint16List(). Screwed up in commit a8e3fbe (v2.4.0): property_get_enum(), property_set_enum(). Found by inspection, no actual crashes observed. Fix them up. Cc: Anthony Liguori Cc: Hu Tao Cc: Daniel P. Berrange Signed-off-by: Markus Armbruster Reviewed-by: Daniel P. Berrange Cc: qemu-stable@nongnu.org Signed-off-by: Andreas Färber --- qom/object.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/qom/object.c b/qom/object.c index b7b05d3ffb..f28d703826 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1098,6 +1098,7 @@ typedef struct EnumProperty { int object_property_get_enum(Object *obj, const char *name, const char *typename, Error **errp) { + Error *err = NULL; StringOutputVisitor *sov; StringInputVisitor *siv; char *str; @@ -1119,7 +1120,12 @@ int object_property_get_enum(Object *obj, const char *name, enumprop = prop->opaque; sov = string_output_visitor_new(false); - object_property_get(obj, string_output_get_visitor(sov), name, errp); + object_property_get(obj, string_output_get_visitor(sov), name, &err); + if (err) { + error_propagate(errp, err); + string_output_visitor_cleanup(sov); + return 0; + } str = string_output_get_string(sov); siv = string_input_visitor_new(str); string_output_visitor_cleanup(sov); @@ -1135,21 +1141,27 @@ int object_property_get_enum(Object *obj, const char *name, void object_property_get_uint16List(Object *obj, const char *name, uint16List **list, Error **errp) { + Error *err = NULL; StringOutputVisitor *ov; StringInputVisitor *iv; char *str; ov = string_output_visitor_new(false); object_property_get(obj, string_output_get_visitor(ov), - name, errp); + name, &err); + if (err) { + error_propagate(errp, err); + goto out; + } str = string_output_get_string(ov); iv = string_input_visitor_new(str); visit_type_uint16List(string_input_get_visitor(iv), list, NULL, errp); g_free(str); - string_output_visitor_cleanup(ov); string_input_visitor_cleanup(iv); +out: + string_output_visitor_cleanup(ov); } void object_property_parse(Object *obj, const char *string, @@ -1665,8 +1677,14 @@ static void property_get_bool(Object *obj, Visitor *v, void *opaque, { BoolProperty *prop = opaque; bool value; + Error *err = NULL; + + value = prop->get(obj, &err); + if (err) { + error_propagate(errp, err); + return; + } - value = prop->get(obj, errp); visit_type_bool(v, &value, name, errp); } @@ -1720,8 +1738,14 @@ static void property_get_enum(Object *obj, Visitor *v, void *opaque, { EnumProperty *prop = opaque; int value; + Error *err = NULL; + + value = prop->get(obj, &err); + if (err) { + error_propagate(errp, err); + return; + } - value = prop->get(obj, errp); visit_type_enum(v, &value, prop->strings, NULL, name, errp); } @@ -1730,8 +1754,13 @@ static void property_set_enum(Object *obj, Visitor *v, void *opaque, { EnumProperty *prop = opaque; int value; + Error *err = NULL; - visit_type_enum(v, &value, prop->strings, NULL, name, errp); + visit_type_enum(v, &value, prop->strings, NULL, name, &err); + if (err) { + error_propagate(errp, err); + return; + } prop->set(obj, value, errp); } From e1c8237df5395f6a453f18109bd9dd33fb2a397c Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 25 Aug 2015 20:00:46 +0200 Subject: [PATCH 02/21] qom: Fix invalid error check in property_get_str() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a function returns a null pointer on error and only on error, you can do if (!foo(foos, errp)) { ... handle error ... } instead of the more cumbersome Error *err = NULL; if (!foo(foos, &err)) { error_propagate(errp, err); ... handle error ... } A StringProperty's getter, however, may return null on success! We then fail to call visit_type_str(). Screwed up in 6a146eb, v1.1. Fails tests/qom-test in my current, heavily hacked QAPI branch. No reproducer for master known (but I didn't look hard). Cc: Anthony Liguori Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Cc: qemu-stable@nongnu.org Signed-off-by: Andreas Färber --- qom/object.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/qom/object.c b/qom/object.c index f28d703826..48053281ef 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1612,12 +1612,16 @@ static void property_get_str(Object *obj, Visitor *v, void *opaque, { StringProperty *prop = opaque; char *value; + Error *err = NULL; - value = prop->get(obj, errp); - if (value) { - visit_type_str(v, &value, name, errp); - g_free(value); + value = prop->get(obj, &err); + if (err) { + error_propagate(errp, err); + return; } + + visit_type_str(v, &value, name, errp); + g_free(value); } static void property_set_str(Object *obj, Visitor *v, void *opaque, From 6c76b37742d4db8176af37b667b5420727e79e2c Mon Sep 17 00:00:00 2001 From: Pavel Fedin Date: Fri, 31 Jul 2015 15:23:22 +0300 Subject: [PATCH 03/21] qdev: Do not use slow [*] expansion for GPIO creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Expansion of [*] suffix is very slow because index expansion is done using trial and error strategy, starting every time from zero and retrying with the next index until insertion succeeds. With large number of already added properties this process takes huge amount of time (O(n^2) complexity). Some architectures (like ARM) use very large amount of IRQ pins in interrupt controller models. This flaw makes machine startup extremely slow (~20 seconds for ARM64 with 32 CPUs). This patch decreases this time down to ~10 seconds. Also in qdev_init_gpio_out_named() memset() is now called only once for the whole array instead of per-cell cleaning Signed-off-by: Pavel Fedin Reviewed-by: Daniel P. Berrange Signed-off-by: Andreas Färber --- hw/core/qdev.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index a24493a48d..4ab04aa31e 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -417,17 +417,21 @@ void qdev_init_gpio_in_named(DeviceState *dev, qemu_irq_handler handler, { int i; NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name); - char *propname = g_strdup_printf("%s[*]", name ? name : "unnamed-gpio-in"); assert(gpio_list->num_out == 0 || !name); gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler, dev, n); + if (!name) { + name = "unnamed-gpio-in"; + } for (i = gpio_list->num_in; i < gpio_list->num_in + n; i++) { + gchar *propname = g_strdup_printf("%s[%u]", name, i); + object_property_add_child(OBJECT(dev), propname, OBJECT(gpio_list->in[i]), &error_abort); + g_free(propname); } - g_free(propname); gpio_list->num_in += n; } @@ -442,20 +446,25 @@ void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins, { int i; NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name); - char *propname = g_strdup_printf("%s[*]", name ? name : "unnamed-gpio-out"); assert(gpio_list->num_in == 0 || !name); - gpio_list->num_out += n; + if (!name) { + name = "unnamed-gpio-out"; + } + memset(pins, 0, sizeof(*pins) * n); for (i = 0; i < n; ++i) { - memset(&pins[i], 0, sizeof(*pins)); + gchar *propname = g_strdup_printf("%s[%u]", name, + gpio_list->num_out + i); + object_property_add_link(OBJECT(dev), propname, TYPE_IRQ, (Object **)&pins[i], object_property_allow_set_link, OBJ_PROP_LINK_UNREF_ON_RELEASE, &error_abort); + g_free(propname); } - g_free(propname); + gpio_list->num_out += n; } void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n) From c84a8f01b2a5d8bf98c447796d4a747333a5b1fd Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:27 -0700 Subject: [PATCH 04/21] machine: MACHINE_TYPE_NAME macro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The macro will be useful to ensure the machine class names follow the right format to make machine class lookup by class name work correctly. Signed-off-by: Eduardo Habkost Reviewed-by: Marcel Apfelbaum Reviewed-by: David Gibson Signed-off-by: Andreas Färber --- include/hw/boards.h | 6 ++++++ vl.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/hw/boards.h b/include/hw/boards.h index 566a5cad13..586f939a57 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -40,6 +40,12 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner, int qemu_register_machine(QEMUMachine *m); #define TYPE_MACHINE_SUFFIX "-machine" + +/* Machine class name that needs to be used for class-name-based machine + * type lookup to work. + */ +#define MACHINE_TYPE_NAME(machinename) (machinename TYPE_MACHINE_SUFFIX) + #define TYPE_MACHINE "machine" #undef MACHINE /* BSD defines it and QEMU does not use it */ #define MACHINE(obj) \ diff --git a/vl.c b/vl.c index 3c6480dadf..3c6c9b01b2 100644 --- a/vl.c +++ b/vl.c @@ -1452,7 +1452,7 @@ static void qemu_machine_class_init(ObjectClass *oc, void *data) int qemu_register_machine(QEMUMachine *m) { - char *name = g_strconcat(m->name, TYPE_MACHINE_SUFFIX, NULL); + char *name = g_strdup_printf(MACHINE_TYPE_NAME("%s"), m->name); TypeInfo ti = { .name = name, .parent = TYPE_MACHINE, From 54477b07fb81ab4a55c263f3449bc07469db30fb Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:28 -0700 Subject: [PATCH 05/21] vexpress: Don't set name on abstract class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The MachineClass::name field won't be ever be used on TYPE_VEXPRESS, as it is an abstract class and the machine class lookup code explicitly skips abstract classes. We can remove it to make the code simpler. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson Signed-off-by: Andreas Färber --- hw/arm/vexpress.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index da8301a294..e7ac3a5187 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -747,7 +747,6 @@ static void vexpress_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = TYPE_VEXPRESS_MACHINE; mc->desc = "ARM Versatile Express"; mc->init = vexpress_common_init; mc->block_default_type = IF_SCSI; From fc603d29e96a2982f1b02123f83176f00a660b40 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:29 -0700 Subject: [PATCH 06/21] vexpress: Rename machine classes to use MACHINE_TYPE_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine class names should use the "-machine" suffix to allow class-name-based machine class lookup to work. Rename the vexpress machine classes using the MACHINE_TYPE_NAME macro. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson [AF: Introduce VEXPRESS_*_MACHINE_NAME] Signed-off-by: Andreas Färber --- hw/arm/vexpress.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index e7ac3a5187..2bcd312453 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -168,8 +168,10 @@ typedef struct { } VexpressMachineState; #define TYPE_VEXPRESS_MACHINE "vexpress" -#define TYPE_VEXPRESS_A9_MACHINE "vexpress-a9" -#define TYPE_VEXPRESS_A15_MACHINE "vexpress-a15" +#define VEXPRESS_A9_MACHINE_NAME "vexpress-a9" +#define VEXPRESS_A15_MACHINE_NAME "vexpress-a15" +#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A9_MACHINE_NAME) +#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A15_MACHINE_NAME) #define VEXPRESS_MACHINE(obj) \ OBJECT_CHECK(VexpressMachineState, (obj), TYPE_VEXPRESS_MACHINE) #define VEXPRESS_MACHINE_GET_CLASS(obj) \ @@ -758,7 +760,7 @@ static void vexpress_a9_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc); - mc->name = TYPE_VEXPRESS_A9_MACHINE; + mc->name = VEXPRESS_A9_MACHINE_NAME; mc->desc = "ARM Versatile Express for Cortex-A9"; vmc->daughterboard = &a9_daughterboard; @@ -769,7 +771,7 @@ static void vexpress_a15_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc); - mc->name = TYPE_VEXPRESS_A15_MACHINE; + mc->name = VEXPRESS_A15_MACHINE_NAME; mc->desc = "ARM Versatile Express for Cortex-A15"; vmc->daughterboard = &a15_daughterboard; From 64d3459c8586c8821970cbc99450340278507cfe Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:30 -0700 Subject: [PATCH 07/21] arm: Rename virt machine class to use MACHINE_TYPE_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine class names should use the "-machine" suffix to allow class-name-based machine class lookup to work. Rename the arm virt machine class using the MACHINE_TYPE_NAME macro. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson Signed-off-by: Andreas Färber --- hw/arm/virt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index e9324f56bd..fba259529b 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -83,7 +83,8 @@ typedef struct { bool highmem; } VirtMachineState; -#define TYPE_VIRT_MACHINE "virt" +#define VIRT_MACHINE_NAME "virt" +#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME) #define VIRT_MACHINE(obj) \ OBJECT_CHECK(VirtMachineState, (obj), TYPE_VIRT_MACHINE) #define VIRT_MACHINE_GET_CLASS(obj) \ @@ -1073,7 +1074,7 @@ static void virt_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = TYPE_VIRT_MACHINE; + mc->name = VIRT_MACHINE_NAME; mc->desc = "ARM Virtual Machine", mc->init = machvirt_init; mc->max_cpus = 8; From b9f072d01f81786f577c24d4f45050e63872cb13 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:31 -0700 Subject: [PATCH 08/21] pseries: Rename machine class names to use MACHINE_TYPE_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine class names should use the "-machine" suffix to allow class-name-based machine class lookup to work. Rename the the pseries machine classes using the MACHINE_TYPE_NAME macro. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson Signed-off-by: Andreas Färber --- hw/ppc/spapr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index bf0c64f2d4..012b6ede3c 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1925,7 +1925,7 @@ static void spapr_machine_2_1_class_init(ObjectClass *oc, void *data) } static const TypeInfo spapr_machine_2_1_info = { - .name = TYPE_SPAPR_MACHINE "2.1", + .name = MACHINE_TYPE_NAME("pseries-2.1"), .parent = TYPE_SPAPR_MACHINE, .class_init = spapr_machine_2_1_class_init, .instance_init = spapr_machine_2_1_instance_init, @@ -1945,7 +1945,7 @@ static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data) } static const TypeInfo spapr_machine_2_2_info = { - .name = TYPE_SPAPR_MACHINE "2.2", + .name = MACHINE_TYPE_NAME("pseries-2.2"), .parent = TYPE_SPAPR_MACHINE, .class_init = spapr_machine_2_2_class_init, .instance_init = spapr_machine_2_2_instance_init, @@ -1965,7 +1965,7 @@ static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data) } static const TypeInfo spapr_machine_2_3_info = { - .name = TYPE_SPAPR_MACHINE "2.3", + .name = MACHINE_TYPE_NAME("pseries-2.3"), .parent = TYPE_SPAPR_MACHINE, .class_init = spapr_machine_2_3_class_init, .instance_init = spapr_machine_2_3_instance_init, @@ -1982,7 +1982,7 @@ static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data) } static const TypeInfo spapr_machine_2_4_info = { - .name = TYPE_SPAPR_MACHINE "2.4", + .name = MACHINE_TYPE_NAME("pseries-2.4"), .parent = TYPE_SPAPR_MACHINE, .class_init = spapr_machine_2_4_class_init, }; From 4c264d4b3d352d55663bd81667b5d177af1e871e Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:32 -0700 Subject: [PATCH 09/21] s390-virtio: Rename machine class name to use MACHINE_TYPE_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine class names should use the "-machine" suffix to allow class-name-based machine class lookup to work. Rename the s390-virtio machine class using the MACHINE_TYPE_NAME macro. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson Acked-by: Cornelia Huck Signed-off-by: Andreas Färber --- hw/s390x/s390-virtio.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c index e4000c92e1..a1eca0958c 100644 --- a/hw/s390x/s390-virtio.c +++ b/hw/s390x/s390-virtio.c @@ -54,7 +54,8 @@ #define MAX_BLK_DEVS 10 #define ZIPL_FILENAME "s390-zipl.rom" -#define TYPE_S390_MACHINE "s390-machine" +#define S390_MACHINE "s390-virtio" +#define TYPE_S390_MACHINE MACHINE_TYPE_NAME(S390_MACHINE) #define S390_TOD_CLOCK_VALUE_MISSING 0x00 #define S390_TOD_CLOCK_VALUE_PRESENT 0x01 @@ -318,7 +319,7 @@ static void s390_machine_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); NMIClass *nc = NMI_CLASS(oc); - mc->name = "s390-virtio"; + mc->name = S390_MACHINE; mc->alias = "s390"; mc->desc = "VirtIO based S390 machine"; mc->init = s390_init; From af62e639fcc190f09c51e8b73dc6492b30ae2111 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:33 -0700 Subject: [PATCH 10/21] s390: Rename s390-ccw-virtio-2.4 class name to use MACHINE_TYPE_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine class names should use the "-machine" suffix to allow class-name-based machine class lookup to work. Rename the s390-ccw-virtio-2.4 machine class using the MACHINE_TYPE_NAME macro. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson [AF/ehabkost: Updated for 2.5 machine] Signed-off-by: Andreas Färber --- hw/s390x/s390-virtio-ccw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 0e30c0f124..e738b5b06a 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -258,7 +258,7 @@ static void ccw_machine_2_4_class_init(ObjectClass *oc, void *data) } static const TypeInfo ccw_machine_2_4_info = { - .name = TYPE_S390_CCW_MACHINE "2.4", + .name = MACHINE_TYPE_NAME("s390-ccw-virtio-2.4"), .parent = TYPE_S390_CCW_MACHINE, .class_init = ccw_machine_2_4_class_init, }; @@ -274,7 +274,7 @@ static void ccw_machine_2_5_class_init(ObjectClass *oc, void *data) } static const TypeInfo ccw_machine_2_5_info = { - .name = TYPE_S390_CCW_MACHINE "2.5", + .name = MACHINE_TYPE_NAME("s390-ccw-virtio-2.5"), .parent = TYPE_S390_CCW_MACHINE, .class_init = ccw_machine_2_5_class_init, }; From c0f365186b30f97ef221489834e7ae146fc22db8 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:34 -0700 Subject: [PATCH 11/21] mac99: Use MACHINE_TYPE_NAME to encode class name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It will result in exactly the same class name, but it will make the code consistent with the other classes. Signed-off-by: Eduardo Habkost Reviewed-by: David Gibson Signed-off-by: Andreas Färber --- hw/ppc/mac_newworld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 3c82be2e18..31c40c9ff0 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -517,7 +517,7 @@ static void core99_machine_class_init(ObjectClass *oc, void *data) } static const TypeInfo core99_machine_info = { - .name = "mac99-machine", + .name = MACHINE_TYPE_NAME("mac99"), .parent = TYPE_MACHINE, .class_init = core99_machine_class_init, }; From dcb3d601115eed77aef543fe3a920adc17544e06 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:35 -0700 Subject: [PATCH 12/21] machine: Ensure all TYPE_MACHINE subclasses have the right suffix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that all non-abstract TYPE_MACHINE subclasses have the -machine suffix, add an assert to ensure this will be always true. Signed-off-by: Eduardo Habkost Reviewed-by: Marcel Apfelbaum Signed-off-by: Andreas Färber --- hw/core/machine.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 51ed6b2e05..3c1f248e80 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -316,6 +316,14 @@ static void machine_class_init(ObjectClass *oc, void *data) mc->default_ram_size = 128 * M_BYTE; } +static void machine_class_base_init(ObjectClass *oc, void *data) +{ + if (!object_class_is_abstract(oc)) { + const char *cname = object_class_get_name(oc); + assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX)); + } +} + static void machine_initfn(Object *obj) { MachineState *ms = MACHINE(obj); @@ -492,6 +500,7 @@ static const TypeInfo machine_info = { .abstract = true, .class_size = sizeof(MachineClass), .class_init = machine_class_init, + .class_base_init = machine_class_base_init, .instance_size = sizeof(MachineState), .instance_init = machine_initfn, .instance_finalize = machine_finalize, From 98cec76a7076c4a38e16f1a9de170a7942b3be54 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 20 Aug 2015 14:54:36 -0700 Subject: [PATCH 13/21] machine: Set MachineClass::name automatically MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now all TYPE_MACHINE subclasses use MACHINE_TYPE_NAME to generate the class name. So instead of requiring each subclass to set MachineClass::name manually, we can now set it automatically at the TYPE_MACHINE class_base_init() function. Signed-off-by: Eduardo Habkost Reviewed-by: Marcel Apfelbaum [AF/ehabkost: Updated for s390-ccw machines] [AF: Cleanup of intermediate virt and vexpress name handling] Signed-off-by: Andreas Färber --- hw/arm/vexpress.c | 8 ++------ hw/arm/virt.c | 4 +--- hw/core/machine.c | 3 +++ hw/ppc/mac_newworld.c | 1 - hw/ppc/spapr.c | 4 ---- hw/s390x/s390-virtio-ccw.c | 2 -- hw/s390x/s390-virtio.c | 1 - vl.c | 1 - 8 files changed, 6 insertions(+), 18 deletions(-) diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 2bcd312453..058abbde3f 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -168,10 +168,8 @@ typedef struct { } VexpressMachineState; #define TYPE_VEXPRESS_MACHINE "vexpress" -#define VEXPRESS_A9_MACHINE_NAME "vexpress-a9" -#define VEXPRESS_A15_MACHINE_NAME "vexpress-a15" -#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A9_MACHINE_NAME) -#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A15_MACHINE_NAME) +#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME("vexpress-a9") +#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME("vexpress-a15") #define VEXPRESS_MACHINE(obj) \ OBJECT_CHECK(VexpressMachineState, (obj), TYPE_VEXPRESS_MACHINE) #define VEXPRESS_MACHINE_GET_CLASS(obj) \ @@ -760,7 +758,6 @@ static void vexpress_a9_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc); - mc->name = VEXPRESS_A9_MACHINE_NAME; mc->desc = "ARM Versatile Express for Cortex-A9"; vmc->daughterboard = &a9_daughterboard; @@ -771,7 +768,6 @@ static void vexpress_a15_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc); - mc->name = VEXPRESS_A15_MACHINE_NAME; mc->desc = "ARM Versatile Express for Cortex-A15"; vmc->daughterboard = &a15_daughterboard; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index fba259529b..6bf0d6d591 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -83,8 +83,7 @@ typedef struct { bool highmem; } VirtMachineState; -#define VIRT_MACHINE_NAME "virt" -#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME) +#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt") #define VIRT_MACHINE(obj) \ OBJECT_CHECK(VirtMachineState, (obj), TYPE_VIRT_MACHINE) #define VIRT_MACHINE_GET_CLASS(obj) \ @@ -1074,7 +1073,6 @@ static void virt_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = VIRT_MACHINE_NAME; mc->desc = "ARM Virtual Machine", mc->init = machvirt_init; mc->max_cpus = 8; diff --git a/hw/core/machine.c b/hw/core/machine.c index 3c1f248e80..f4db340468 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -319,8 +319,11 @@ static void machine_class_init(ObjectClass *oc, void *data) static void machine_class_base_init(ObjectClass *oc, void *data) { if (!object_class_is_abstract(oc)) { + MachineClass *mc = MACHINE_CLASS(oc); const char *cname = object_class_get_name(oc); assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX)); + mc->name = g_strndup(cname, + strlen(cname) - strlen(TYPE_MACHINE_SUFFIX)); } } diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 31c40c9ff0..e1c5ed76bd 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -508,7 +508,6 @@ static void core99_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = "mac99"; mc->desc = "Mac99 based PowerMAC"; mc->init = ppc_core99_init; mc->max_cpus = MAX_CPUS; diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 012b6ede3c..05926a3eb2 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1919,7 +1919,6 @@ static void spapr_machine_2_1_class_init(ObjectClass *oc, void *data) { /* end of list */ } }; - mc->name = "pseries-2.1"; mc->desc = "pSeries Logical Partition (PAPR compliant) v2.1"; mc->compat_props = compat_props; } @@ -1939,7 +1938,6 @@ static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data) }; MachineClass *mc = MACHINE_CLASS(oc); - mc->name = "pseries-2.2"; mc->desc = "pSeries Logical Partition (PAPR compliant) v2.2"; mc->compat_props = compat_props; } @@ -1959,7 +1957,6 @@ static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data) }; MachineClass *mc = MACHINE_CLASS(oc); - mc->name = "pseries-2.3"; mc->desc = "pSeries Logical Partition (PAPR compliant) v2.3"; mc->compat_props = compat_props; } @@ -1975,7 +1972,6 @@ static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = "pseries-2.4"; mc->desc = "pSeries Logical Partition (PAPR compliant) v2.4"; mc->alias = "pseries"; mc->is_default = 1; diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index e738b5b06a..36f78b417c 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -252,7 +252,6 @@ static void ccw_machine_2_4_class_init(ObjectClass *oc, void *data) { /* end of list */ } }; - mc->name = "s390-ccw-virtio-2.4"; mc->desc = "VirtIO-ccw based S390 machine v2.4"; mc->compat_props = compat_props; } @@ -267,7 +266,6 @@ static void ccw_machine_2_5_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->name = "s390-ccw-virtio-2.5"; mc->alias = "s390-ccw-virtio"; mc->desc = "VirtIO-ccw based S390 machine v2.5"; mc->is_default = 1; diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c index a1eca0958c..bc013eb3d4 100644 --- a/hw/s390x/s390-virtio.c +++ b/hw/s390x/s390-virtio.c @@ -319,7 +319,6 @@ static void s390_machine_class_init(ObjectClass *oc, void *data) MachineClass *mc = MACHINE_CLASS(oc); NMIClass *nc = NMI_CLASS(oc); - mc->name = S390_MACHINE; mc->alias = "s390"; mc->desc = "VirtIO based S390 machine"; mc->init = s390_init; diff --git a/vl.c b/vl.c index 3c6c9b01b2..3b926351f1 100644 --- a/vl.c +++ b/vl.c @@ -1437,7 +1437,6 @@ static void qemu_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); QEMUMachine *qm = data; - mc->name = qm->name; mc->desc = qm->desc; mc->init = qm->init; mc->kvm_type = qm->kvm_type; From 6aadcc71354bc683fdedd8a3d369095d23095e1c Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:03 -0300 Subject: [PATCH 14/21] exynos4: Use EXYNOS4210_NCPUS instead of max_cpus on error message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code is checking smp_cpus against EXYNOS4210_NCPUS, not against max_cpus, so use EXYNOS4210_NCPUS in the error message for consistency. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/arm/exynos4_boards.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index d644db1ef9..3f88c4a330 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -100,8 +100,7 @@ static Exynos4210State *exynos4_boards_init_common(MachineState *machine, if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) { fprintf(stderr, "%s board supports only %d CPU cores. Ignoring smp_cpus" " value.\n", - exynos4_machines[board_type].name, - exynos4_machines[board_type].max_cpus); + exynos4_machines[board_type].name, EXYNOS4210_NCPUS); } exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type]; From ca17776088e41dabdc3bb07334dbc73d631e30e3 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:04 -0300 Subject: [PATCH 15/21] exynos4: Use MachineClass instead of exynos4_machines array MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We don't need a QEMUMachine array to query max_cpus, if we can get the corresponding MachineClass. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/arm/exynos4_boards.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index 3f88c4a330..312a0142f0 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -97,10 +97,12 @@ static void lan9215_init(uint32_t base, qemu_irq irq) static Exynos4210State *exynos4_boards_init_common(MachineState *machine, Exynos4BoardType board_type) { + MachineClass *mc = MACHINE_GET_CLASS(machine); + if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) { fprintf(stderr, "%s board supports only %d CPU cores. Ignoring smp_cpus" " value.\n", - exynos4_machines[board_type].name, EXYNOS4210_NCPUS); + mc->name, EXYNOS4210_NCPUS); } exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type]; From 97c6671cf16640f997fc8c54ef456bbad125b635 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:05 -0300 Subject: [PATCH 16/21] exynos4: Declare each QEMUMachine as a separate variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will make the code follow the same pattern used for other machines, and will make it easier to automatically convert the code to be QOM-based. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/arm/exynos4_boards.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index 312a0142f0..35fc7c4cf4 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -74,8 +74,6 @@ static struct arm_boot_info exynos4_board_binfo = { .write_secondary_boot = exynos4210_write_secondary, }; -static QEMUMachine exynos4_machines[EXYNOS4_NUM_OF_BOARDS]; - static void lan9215_init(uint32_t base, qemu_irq irq) { DeviceState *dev; @@ -146,25 +144,24 @@ static void smdkc210_init(MachineState *machine) arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo); } -static QEMUMachine exynos4_machines[EXYNOS4_NUM_OF_BOARDS] = { - [EXYNOS4_BOARD_NURI] = { - .name = "nuri", - .desc = "Samsung NURI board (Exynos4210)", - .init = nuri_init, - .max_cpus = EXYNOS4210_NCPUS, - }, - [EXYNOS4_BOARD_SMDKC210] = { - .name = "smdkc210", - .desc = "Samsung SMDKC210 board (Exynos4210)", - .init = smdkc210_init, - .max_cpus = EXYNOS4210_NCPUS, - }, +static QEMUMachine exynos4_machine_nuri = { + .name = "nuri", + .desc = "Samsung NURI board (Exynos4210)", + .init = nuri_init, + .max_cpus = EXYNOS4210_NCPUS, +}; + +static QEMUMachine exynos4_machine_smdkc210 = { + .name = "smdkc210", + .desc = "Samsung SMDKC210 board (Exynos4210)", + .init = smdkc210_init, + .max_cpus = EXYNOS4210_NCPUS, }; static void exynos4_machine_init(void) { - qemu_register_machine(&exynos4_machines[EXYNOS4_BOARD_NURI]); - qemu_register_machine(&exynos4_machines[EXYNOS4_BOARD_SMDKC210]); + qemu_register_machine(&exynos4_machine_nuri); + qemu_register_machine(&exynos4_machine_smdkc210); } machine_init(exynos4_machine_init); From ed0b6de343448d1014b53bcf541041373322fa1c Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:06 -0300 Subject: [PATCH 17/21] machine: DEFINE_MACHINE() macro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The macro will allow easy registration of a TYPE_MACHINE subclass, using only the machine name and a MachineClass initialization function as parameter. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- include/hw/boards.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/hw/boards.h b/include/hw/boards.h index 586f939a57..4fe2ce5235 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -159,4 +159,21 @@ struct MachineState { AccelState *accelerator; }; +#define DEFINE_MACHINE(namestr, machine_initfn) \ + static void machine_initfn##_class_init(ObjectClass *oc, void *data) \ + { \ + MachineClass *mc = MACHINE_CLASS(oc); \ + machine_initfn(mc); \ + } \ + static const TypeInfo machine_initfn##_typeinfo = { \ + .name = MACHINE_TYPE_NAME(namestr), \ + .parent = TYPE_MACHINE, \ + .class_init = machine_initfn##_class_init, \ + }; \ + static void machine_initfn##_register_types(void) \ + { \ + type_register_static(&machine_initfn##_typeinfo); \ + } \ + machine_init(machine_initfn##_register_types) + #endif From f309ae852c67833c3cac11747474fbb013529382 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:07 -0300 Subject: [PATCH 18/21] mac_world: Break long line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Coding style change only. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/ppc/mac_oldworld.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 1e4b55a5cf..4c5fe4640c 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -365,7 +365,8 @@ static QEMUMachine heathrow_machine = { #ifndef TARGET_PPC64 .is_default = 1, #endif - .default_boot_order = "cd", /* TOFIX "cad" when Mac floppy is implemented */ + /* TOFIX "cad" when Mac floppy is implemented */ + .default_boot_order = "cd", .kvm_type = heathrow_kvm_type, }; From e264d29de28c5b0be3d063307ce9fb613b427cc3 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:08 -0300 Subject: [PATCH 19/21] Use DEFINE_MACHINE() to register all machines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Convert all machines to use DEFINE_MACHINE() instead of QEMUMachine automatically using a script. Signed-off-by: Eduardo Habkost [AF: Style cleanups, convert imx25_pdk machine] Signed-off-by: Andreas Färber --- hw/alpha/dp264.c | 17 +-- hw/arm/collie.c | 13 +- hw/arm/cubieboard.c | 14 +- hw/arm/digic_boards.c | 13 +- hw/arm/exynos4_boards.c | 32 ++--- hw/arm/gumstix.c | 28 ++-- hw/arm/highbank.c | 36 +++-- hw/arm/imx25_pdk.c | 13 +- hw/arm/integratorcp.c | 13 +- hw/arm/kzm.c | 13 +- hw/arm/mainstone.c | 13 +- hw/arm/musicpal.c | 13 +- hw/arm/netduino2.c | 13 +- hw/arm/nseries.c | 32 ++--- hw/arm/omap_sx1.c | 28 ++-- hw/arm/palm.c | 13 +- hw/arm/realview.c | 68 +++++----- hw/arm/spitz.c | 58 ++++---- hw/arm/stellaris.c | 28 ++-- hw/arm/tosa.c | 13 +- hw/arm/versatilepb.c | 32 ++--- hw/arm/xilinx_zynq.c | 19 +-- hw/arm/xlnx-ep108.c | 13 +- hw/arm/z2.c | 13 +- hw/core/null-machine.c | 16 +-- hw/cris/axis_dev88.c | 15 +- hw/lm32/lm32_boards.c | 32 ++--- hw/lm32/milkymist.c | 15 +- hw/m68k/an5206.c | 13 +- hw/m68k/dummy_m68k.c | 13 +- hw/m68k/mcf5208.c | 15 +- hw/microblaze/petalogix_ml605_mmu.c | 15 +- hw/microblaze/petalogix_s3adsp1800_mmu.c | 15 +- hw/mips/mips_fulong2e.c | 13 +- hw/mips/mips_jazz.c | 32 ++--- hw/mips/mips_malta.c | 22 ++- hw/mips/mips_mipssim.c | 13 +- hw/mips/mips_r4k.c | 13 +- hw/moxie/moxiesim.c | 15 +- hw/openrisc/openrisc_sim.c | 17 +-- hw/ppc/e500plat.c | 17 +-- hw/ppc/mac_oldworld.c | 23 ++-- hw/ppc/mpc8544ds.c | 15 +- hw/ppc/ppc405_boards.c | 26 ++-- hw/ppc/ppc440_bamboo.c | 13 +- hw/ppc/prep.c | 17 +-- hw/ppc/virtex_ml507.c | 13 +- hw/sh4/r2d.c | 13 +- hw/sh4/shix.c | 15 +- hw/sparc/leon3.c | 13 +- hw/sparc/sun4m.c | 166 ++++++++++++----------- hw/sparc64/sun4u.c | 58 ++++---- hw/tricore/tricore_testboard.c | 15 +- hw/unicore32/puv3.c | 15 +- hw/xenpv/xen_machine_pv.c | 17 +-- hw/xtensa/sim.c | 17 +-- hw/xtensa/xtfpga.c | 66 +++++---- 57 files changed, 543 insertions(+), 798 deletions(-) diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c index f86e7bb830..27bdaa1ad6 100644 --- a/hw/alpha/dp264.c +++ b/hw/alpha/dp264.c @@ -168,17 +168,12 @@ static void clipper_init(MachineState *machine) } } -static QEMUMachine clipper_machine = { - .name = "clipper", - .desc = "Alpha DP264/CLIPPER", - .init = clipper_init, - .max_cpus = 4, - .is_default = 1, -}; - -static void clipper_machine_init(void) +static void clipper_machine_init(MachineClass *mc) { - qemu_register_machine(&clipper_machine); + mc->desc = "Alpha DP264/CLIPPER"; + mc->init = clipper_init; + mc->max_cpus = 4; + mc->is_default = 1; } -machine_init(clipper_machine_init); +DEFINE_MACHINE("clipper", clipper_machine_init) diff --git a/hw/arm/collie.c b/hw/arm/collie.c index 6c9b82fc54..4e6541e4e1 100644 --- a/hw/arm/collie.c +++ b/hw/arm/collie.c @@ -58,15 +58,10 @@ static void collie_init(MachineState *machine) arm_load_kernel(s->cpu, &collie_binfo); } -static QEMUMachine collie_machine = { - .name = "collie", - .desc = "Collie PDA (SA-1110)", - .init = collie_init, -}; - -static void collie_machine_init(void) +static void collie_machine_init(MachineClass *mc) { - qemu_register_machine(&collie_machine); + mc->desc = "Collie PDA (SA-1110)"; + mc->init = collie_init; } -machine_init(collie_machine_init) +DEFINE_MACHINE("collie", collie_machine_init) diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c index 1582250eb7..bf068cd3cc 100644 --- a/hw/arm/cubieboard.c +++ b/hw/arm/cubieboard.c @@ -74,16 +74,10 @@ static void cubieboard_init(MachineState *machine) arm_load_kernel(&s->a10->cpu, &cubieboard_binfo); } -static QEMUMachine cubieboard_machine = { - .name = "cubieboard", - .desc = "cubietech cubieboard", - .init = cubieboard_init, -}; - - -static void cubieboard_machine_init(void) +static void cubieboard_machine_init(MachineClass *mc) { - qemu_register_machine(&cubieboard_machine); + mc->desc = "cubietech cubieboard"; + mc->init = cubieboard_init; } -machine_init(cubieboard_machine_init) +DEFINE_MACHINE("cubieboard", cubieboard_machine_init) diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c index f8ba9e5958..710045adca 100644 --- a/hw/arm/digic_boards.c +++ b/hw/arm/digic_boards.c @@ -148,15 +148,10 @@ static void canon_a1100_init(MachineState *machine) digic4_board_init(&digic4_board_canon_a1100); } -static QEMUMachine canon_a1100 = { - .name = "canon-a1100", - .desc = "Canon PowerShot A1100 IS", - .init = &canon_a1100_init, -}; - -static void digic_register_machines(void) +static void canon_a1100_machine_init(MachineClass *mc) { - qemu_register_machine(&canon_a1100); + mc->desc = "Canon PowerShot A1100 IS"; + mc->init = &canon_a1100_init; } -machine_init(digic_register_machines) +DEFINE_MACHINE("canon-a1100", canon_a1100_machine_init) diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index 35fc7c4cf4..fadf372b9c 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -144,24 +144,20 @@ static void smdkc210_init(MachineState *machine) arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo); } -static QEMUMachine exynos4_machine_nuri = { - .name = "nuri", - .desc = "Samsung NURI board (Exynos4210)", - .init = nuri_init, - .max_cpus = EXYNOS4210_NCPUS, -}; - -static QEMUMachine exynos4_machine_smdkc210 = { - .name = "smdkc210", - .desc = "Samsung SMDKC210 board (Exynos4210)", - .init = smdkc210_init, - .max_cpus = EXYNOS4210_NCPUS, -}; - -static void exynos4_machine_init(void) +static void exynos4_machine_nuri_machine_init(MachineClass *mc) { - qemu_register_machine(&exynos4_machine_nuri); - qemu_register_machine(&exynos4_machine_smdkc210); + mc->desc = "Samsung NURI board (Exynos4210)"; + mc->init = nuri_init; + mc->max_cpus = EXYNOS4210_NCPUS; } -machine_init(exynos4_machine_init); +DEFINE_MACHINE("nuri", exynos4_machine_nuri_machine_init) + +static void exynos4_machine_smdkc210_machine_init(MachineClass *mc) +{ + mc->desc = "Samsung SMDKC210 board (Exynos4210)"; + mc->init = smdkc210_init; + mc->max_cpus = EXYNOS4210_NCPUS; +} + +DEFINE_MACHINE("smdkc210", exynos4_machine_smdkc210_machine_init) diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c index 8103278b15..6dc98c86b4 100644 --- a/hw/arm/gumstix.c +++ b/hw/arm/gumstix.c @@ -121,22 +121,18 @@ static void verdex_init(MachineState *machine) qdev_get_gpio_in(cpu->gpio, 99)); } -static QEMUMachine connex_machine = { - .name = "connex", - .desc = "Gumstix Connex (PXA255)", - .init = connex_init, -}; - -static QEMUMachine verdex_machine = { - .name = "verdex", - .desc = "Gumstix Verdex (PXA270)", - .init = verdex_init, -}; - -static void gumstix_machine_init(void) +static void connex_machine_init(MachineClass *mc) { - qemu_register_machine(&connex_machine); - qemu_register_machine(&verdex_machine); + mc->desc = "Gumstix Connex (PXA255)"; + mc->init = connex_init; } -machine_init(gumstix_machine_init); +DEFINE_MACHINE("connex", connex_machine_init) + +static void verdex_machine_init(MachineClass *mc) +{ + mc->desc = "Gumstix Verdex (PXA270)"; + mc->init = verdex_init; +} + +DEFINE_MACHINE("verdex", verdex_machine_init) diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index 960bc39430..9b2887ef6f 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -391,26 +391,22 @@ static void midway_init(MachineState *machine) calxeda_init(machine, CALXEDA_MIDWAY); } -static QEMUMachine highbank_machine = { - .name = "highbank", - .desc = "Calxeda Highbank (ECX-1000)", - .init = highbank_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, -}; - -static QEMUMachine midway_machine = { - .name = "midway", - .desc = "Calxeda Midway (ECX-2000)", - .init = midway_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, -}; - -static void calxeda_machines_init(void) +static void highbank_machine_init(MachineClass *mc) { - qemu_register_machine(&highbank_machine); - qemu_register_machine(&midway_machine); + mc->desc = "Calxeda Highbank (ECX-1000)"; + mc->init = highbank_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; } -machine_init(calxeda_machines_init); +DEFINE_MACHINE("highbank", highbank_machine_init) + +static void midway_machine_init(MachineClass *mc) +{ + mc->desc = "Calxeda Midway (ECX-2000)"; + mc->init = midway_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("midway", midway_machine_init) diff --git a/hw/arm/imx25_pdk.c b/hw/arm/imx25_pdk.c index c34667f068..425011475a 100644 --- a/hw/arm/imx25_pdk.c +++ b/hw/arm/imx25_pdk.c @@ -145,15 +145,10 @@ static void imx25_pdk_init(MachineState *machine) } } -static QEMUMachine imx25_pdk_machine = { - .name = "imx25_pdk", - .desc = "ARM i.MX25 PDK board (ARM926)", - .init = imx25_pdk_init, -}; - -static void imx25_pdk_machine_init(void) +static void imx25_pdk_machine_init(MachineClass *mc) { - qemu_register_machine(&imx25_pdk_machine); + mc->desc = "ARM i.MX25 PDK board (ARM926)"; + mc->init = imx25_pdk_init; } -machine_init(imx25_pdk_machine_init) +DEFINE_MACHINE("imx25_pdk", imx25_pdk_machine_init) diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index d87d36ff57..421bde9a1c 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -619,18 +619,13 @@ static void integratorcp_init(MachineState *machine) arm_load_kernel(cpu, &integrator_binfo); } -static QEMUMachine integratorcp_machine = { - .name = "integratorcp", - .desc = "ARM Integrator/CP (ARM926EJ-S)", - .init = integratorcp_init, -}; - -static void integratorcp_machine_init(void) +static void integratorcp_machine_init(MachineClass *mc) { - qemu_register_machine(&integratorcp_machine); + mc->desc = "ARM Integrator/CP (ARM926EJ-S)"; + mc->init = integratorcp_init; } -machine_init(integratorcp_machine_init); +DEFINE_MACHINE("integratorcp", integratorcp_machine_init) static Property core_properties[] = { DEFINE_PROP_UINT32("memsz", IntegratorCMState, memsz, 0), diff --git a/hw/arm/kzm.c b/hw/arm/kzm.c index 241b1d7819..eff6f4681d 100644 --- a/hw/arm/kzm.c +++ b/hw/arm/kzm.c @@ -139,15 +139,10 @@ static void kzm_init(MachineState *machine) } } -static QEMUMachine kzm_machine = { - .name = "kzm", - .desc = "ARM KZM Emulation Baseboard (ARM1136)", - .init = kzm_init, -}; - -static void kzm_machine_init(void) +static void kzm_machine_init(MachineClass *mc) { - qemu_register_machine(&kzm_machine); + mc->desc = "ARM KZM Emulation Baseboard (ARM1136)"; + mc->init = kzm_init; } -machine_init(kzm_machine_init) +DEFINE_MACHINE("kzm", kzm_machine_init) diff --git a/hw/arm/mainstone.c b/hw/arm/mainstone.c index 03e9fa5a84..e434cb6ab0 100644 --- a/hw/arm/mainstone.c +++ b/hw/arm/mainstone.c @@ -188,15 +188,10 @@ static void mainstone_init(MachineState *machine) mainstone_common_init(get_system_memory(), machine, mainstone, 0x196); } -static QEMUMachine mainstone2_machine = { - .name = "mainstone", - .desc = "Mainstone II (PXA27x)", - .init = mainstone_init, -}; - -static void mainstone_machine_init(void) +static void mainstone2_machine_init(MachineClass *mc) { - qemu_register_machine(&mainstone2_machine); + mc->desc = "Mainstone II (PXA27x)"; + mc->init = mainstone_init; } -machine_init(mainstone_machine_init); +DEFINE_MACHINE("mainstone", mainstone2_machine_init) diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 5cff3d4117..b534bb9041 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -1709,18 +1709,13 @@ static void musicpal_init(MachineState *machine) arm_load_kernel(cpu, &musicpal_binfo); } -static QEMUMachine musicpal_machine = { - .name = "musicpal", - .desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)", - .init = musicpal_init, -}; - -static void musicpal_machine_init(void) +static void musicpal_machine_init(MachineClass *mc) { - qemu_register_machine(&musicpal_machine); + mc->desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)"; + mc->init = musicpal_init; } -machine_init(musicpal_machine_init); +DEFINE_MACHINE("musicpal", musicpal_machine_init) static void mv88w8618_wlan_class_init(ObjectClass *klass, void *data) { diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c index 8f26780ef0..a3b9e82ff4 100644 --- a/hw/arm/netduino2.c +++ b/hw/arm/netduino2.c @@ -43,15 +43,10 @@ static void netduino2_init(MachineState *machine) } } -static QEMUMachine netduino2_machine = { - .name = "netduino2", - .desc = "Netduino 2 Machine", - .init = netduino2_init, -}; - -static void netduino2_machine_init(void) +static void netduino2_machine_init(MachineClass *mc) { - qemu_register_machine(&netduino2_machine); + mc->desc = "Netduino 2 Machine"; + mc->init = netduino2_init; } -machine_init(netduino2_machine_init); +DEFINE_MACHINE("netduino2", netduino2_machine_init) diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c index a659e8525d..af28449367 100644 --- a/hw/arm/nseries.c +++ b/hw/arm/nseries.c @@ -1413,24 +1413,20 @@ static void n810_init(MachineState *machine) n8x0_init(machine, &n810_binfo, 810); } -static QEMUMachine n800_machine = { - .name = "n800", - .desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)", - .init = n800_init, - .default_boot_order = "", -}; - -static QEMUMachine n810_machine = { - .name = "n810", - .desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)", - .init = n810_init, - .default_boot_order = "", -}; - -static void nseries_machine_init(void) +static void n800_machine_init(MachineClass *mc) { - qemu_register_machine(&n800_machine); - qemu_register_machine(&n810_machine); + mc->desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)"; + mc->init = n800_init; + mc->default_boot_order = ""; } -machine_init(nseries_machine_init); +DEFINE_MACHINE("n800", n800_machine_init) + +static void n810_machine_init(MachineClass *mc) +{ + mc->desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)"; + mc->init = n810_init; + mc->default_boot_order = ""; +} + +DEFINE_MACHINE("n810", n810_machine_init) diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c index 4de88f31b1..68924fc663 100644 --- a/hw/arm/omap_sx1.c +++ b/hw/arm/omap_sx1.c @@ -217,22 +217,18 @@ static void sx1_init_v2(MachineState *machine) sx1_init(machine, 2); } -static QEMUMachine sx1_machine_v2 = { - .name = "sx1", - .desc = "Siemens SX1 (OMAP310) V2", - .init = sx1_init_v2, -}; - -static QEMUMachine sx1_machine_v1 = { - .name = "sx1-v1", - .desc = "Siemens SX1 (OMAP310) V1", - .init = sx1_init_v1, -}; - -static void sx1_machine_init(void) +static void sx1_machine_v2_machine_init(MachineClass *mc) { - qemu_register_machine(&sx1_machine_v2); - qemu_register_machine(&sx1_machine_v1); + mc->desc = "Siemens SX1 (OMAP310) V2"; + mc->init = sx1_init_v2; } -machine_init(sx1_machine_init); +DEFINE_MACHINE("sx1", sx1_machine_v2_machine_init) + +static void sx1_machine_v1_machine_init(MachineClass *mc) +{ + mc->desc = "Siemens SX1 (OMAP310) V1"; + mc->init = sx1_init_v1; +} + +DEFINE_MACHINE("sx1-v1", sx1_machine_v1_machine_init) diff --git a/hw/arm/palm.c b/hw/arm/palm.c index 1f84dbff18..82ec99d936 100644 --- a/hw/arm/palm.c +++ b/hw/arm/palm.c @@ -269,15 +269,10 @@ static void palmte_init(MachineState *machine) arm_load_kernel(mpu->cpu, &palmte_binfo); } -static QEMUMachine palmte_machine = { - .name = "cheetah", - .desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)", - .init = palmte_init, -}; - -static void palmte_machine_init(void) +static void palmte_machine_init(MachineClass *mc) { - qemu_register_machine(&palmte_machine); + mc->desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)"; + mc->init = palmte_init; } -machine_init(palmte_machine_init); +DEFINE_MACHINE("cheetah", palmte_machine_init) diff --git a/hw/arm/realview.c b/hw/arm/realview.c index 23779ec274..6c838178f7 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -399,41 +399,39 @@ static void realview_pbx_a9_init(MachineState *machine) realview_init(machine, BOARD_PBX_A9); } -static QEMUMachine realview_eb_machine = { - .name = "realview-eb", - .desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)", - .init = realview_eb_init, - .block_default_type = IF_SCSI, -}; - -static QEMUMachine realview_eb_mpcore_machine = { - .name = "realview-eb-mpcore", - .desc = "ARM RealView Emulation Baseboard (ARM11MPCore)", - .init = realview_eb_mpcore_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, -}; - -static QEMUMachine realview_pb_a8_machine = { - .name = "realview-pb-a8", - .desc = "ARM RealView Platform Baseboard for Cortex-A8", - .init = realview_pb_a8_init, -}; - -static QEMUMachine realview_pbx_a9_machine = { - .name = "realview-pbx-a9", - .desc = "ARM RealView Platform Baseboard Explore for Cortex-A9", - .init = realview_pbx_a9_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, -}; - -static void realview_machine_init(void) +static void realview_eb_machine_init(MachineClass *mc) { - qemu_register_machine(&realview_eb_machine); - qemu_register_machine(&realview_eb_mpcore_machine); - qemu_register_machine(&realview_pb_a8_machine); - qemu_register_machine(&realview_pbx_a9_machine); + mc->desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)"; + mc->init = realview_eb_init; + mc->block_default_type = IF_SCSI; } -machine_init(realview_machine_init); +DEFINE_MACHINE("realview-eb", realview_eb_machine_init) + +static void realview_eb_mpcore_machine_init(MachineClass *mc) +{ + mc->desc = "ARM RealView Emulation Baseboard (ARM11MPCore)"; + mc->init = realview_eb_mpcore_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("realview-eb-mpcore", realview_eb_mpcore_machine_init) + +static void realview_pb_a8_machine_init(MachineClass *mc) +{ + mc->desc = "ARM RealView Platform Baseboard for Cortex-A8"; + mc->init = realview_pb_a8_init; +} + +DEFINE_MACHINE("realview-pb-a8", realview_pb_a8_machine_init) + +static void realview_pbx_a9_machine_init(MachineClass *mc) +{ + mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9"; + mc->init = realview_pbx_a9_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("realview-pbx-a9", realview_pbx_a9_machine_init) diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c index 6c2cbcb203..0f59489804 100644 --- a/hw/arm/spitz.c +++ b/hw/arm/spitz.c @@ -972,39 +972,37 @@ static void terrier_init(MachineState *machine) spitz_common_init(machine, terrier, 0x33f); } -static QEMUMachine akitapda_machine = { - .name = "akita", - .desc = "Akita PDA (PXA270)", - .init = akita_init, -}; - -static QEMUMachine spitzpda_machine = { - .name = "spitz", - .desc = "Spitz PDA (PXA270)", - .init = spitz_init, -}; - -static QEMUMachine borzoipda_machine = { - .name = "borzoi", - .desc = "Borzoi PDA (PXA270)", - .init = borzoi_init, -}; - -static QEMUMachine terrierpda_machine = { - .name = "terrier", - .desc = "Terrier PDA (PXA270)", - .init = terrier_init, -}; - -static void spitz_machine_init(void) +static void akitapda_machine_init(MachineClass *mc) { - qemu_register_machine(&akitapda_machine); - qemu_register_machine(&spitzpda_machine); - qemu_register_machine(&borzoipda_machine); - qemu_register_machine(&terrierpda_machine); + mc->desc = "Akita PDA (PXA270)"; + mc->init = akita_init; } -machine_init(spitz_machine_init); +DEFINE_MACHINE("akita", akitapda_machine_init) + +static void spitzpda_machine_init(MachineClass *mc) +{ + mc->desc = "Spitz PDA (PXA270)"; + mc->init = spitz_init; +} + +DEFINE_MACHINE("spitz", spitzpda_machine_init) + +static void borzoipda_machine_init(MachineClass *mc) +{ + mc->desc = "Borzoi PDA (PXA270)"; + mc->init = borzoi_init; +} + +DEFINE_MACHINE("borzoi", borzoipda_machine_init) + +static void terrierpda_machine_init(MachineClass *mc) +{ + mc->desc = "Terrier PDA (PXA270)"; + mc->init = terrier_init; +} + +DEFINE_MACHINE("terrier", terrierpda_machine_init) static bool is_version_0(void *opaque, int version_id) { diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index a76f051704..a97d9e3ef2 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -1366,25 +1366,21 @@ static void lm3s6965evb_init(MachineState *machine) stellaris_init(kernel_filename, cpu_model, &stellaris_boards[1]); } -static QEMUMachine lm3s811evb_machine = { - .name = "lm3s811evb", - .desc = "Stellaris LM3S811EVB", - .init = lm3s811evb_init, -}; - -static QEMUMachine lm3s6965evb_machine = { - .name = "lm3s6965evb", - .desc = "Stellaris LM3S6965EVB", - .init = lm3s6965evb_init, -}; - -static void stellaris_machine_init(void) +static void lm3s811evb_machine_init(MachineClass *mc) { - qemu_register_machine(&lm3s811evb_machine); - qemu_register_machine(&lm3s6965evb_machine); + mc->desc = "Stellaris LM3S811EVB"; + mc->init = lm3s811evb_init; } -machine_init(stellaris_machine_init); +DEFINE_MACHINE("lm3s811evb", lm3s811evb_machine_init) + +static void lm3s6965evb_machine_init(MachineClass *mc) +{ + mc->desc = "Stellaris LM3S6965EVB"; + mc->init = lm3s6965evb_init; +} + +DEFINE_MACHINE("lm3s6965evb", lm3s6965evb_machine_init) static void stellaris_i2c_class_init(ObjectClass *klass, void *data) { diff --git a/hw/arm/tosa.c b/hw/arm/tosa.c index 2c216e9c5d..51d0b89687 100644 --- a/hw/arm/tosa.c +++ b/hw/arm/tosa.c @@ -252,18 +252,13 @@ static void tosa_init(MachineState *machine) sl_bootparam_write(SL_PXA_PARAM_BASE); } -static QEMUMachine tosapda_machine = { - .name = "tosa", - .desc = "Tosa PDA (PXA255)", - .init = tosa_init, -}; - -static void tosapda_machine_init(void) +static void tosapda_machine_init(MachineClass *mc) { - qemu_register_machine(&tosapda_machine); + mc->desc = "Tosa PDA (PXA255)"; + mc->init = tosa_init; } -machine_init(tosapda_machine_init); +DEFINE_MACHINE("tosa", tosapda_machine_init) static void tosa_dac_class_init(ObjectClass *klass, void *data) { diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 6c69f4eaa8..54281f4e3c 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -391,27 +391,23 @@ static void vab_init(MachineState *machine) versatile_init(machine, 0x25e); } -static QEMUMachine versatilepb_machine = { - .name = "versatilepb", - .desc = "ARM Versatile/PB (ARM926EJ-S)", - .init = vpb_init, - .block_default_type = IF_SCSI, -}; - -static QEMUMachine versatileab_machine = { - .name = "versatileab", - .desc = "ARM Versatile/AB (ARM926EJ-S)", - .init = vab_init, - .block_default_type = IF_SCSI, -}; - -static void versatile_machine_init(void) +static void versatilepb_machine_init(MachineClass *mc) { - qemu_register_machine(&versatilepb_machine); - qemu_register_machine(&versatileab_machine); + mc->desc = "ARM Versatile/PB (ARM926EJ-S)"; + mc->init = vpb_init; + mc->block_default_type = IF_SCSI; } -machine_init(versatile_machine_init); +DEFINE_MACHINE("versatilepb", versatilepb_machine_init) + +static void versatileab_machine_init(MachineClass *mc) +{ + mc->desc = "ARM Versatile/AB (ARM926EJ-S)"; + mc->init = vab_init; + mc->block_default_type = IF_SCSI; +} + +DEFINE_MACHINE("versatileab", versatileab_machine_init) static void vpb_sic_class_init(ObjectClass *klass, void *data) { diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index 37dc0b0865..9f89483d6a 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -255,18 +255,13 @@ static void zynq_init(MachineState *machine) arm_load_kernel(ARM_CPU(first_cpu), &zynq_binfo); } -static QEMUMachine zynq_machine = { - .name = "xilinx-zynq-a9", - .desc = "Xilinx Zynq Platform Baseboard for Cortex-A9", - .init = zynq_init, - .block_default_type = IF_SCSI, - .max_cpus = 1, - .no_sdcard = 1, -}; - -static void zynq_machine_init(void) +static void zynq_machine_init(MachineClass *mc) { - qemu_register_machine(&zynq_machine); + mc->desc = "Xilinx Zynq Platform Baseboard for Cortex-A9"; + mc->init = zynq_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 1; + mc->no_sdcard = 1; } -machine_init(zynq_machine_init); +DEFINE_MACHINE("xilinx-zynq-a9", zynq_machine_init) diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c index f94da86cba..2899698443 100644 --- a/hw/arm/xlnx-ep108.c +++ b/hw/arm/xlnx-ep108.c @@ -68,15 +68,10 @@ static void xlnx_ep108_init(MachineState *machine) arm_load_kernel(s->soc.boot_cpu_ptr, &xlnx_ep108_binfo); } -static QEMUMachine xlnx_ep108_machine = { - .name = "xlnx-ep108", - .desc = "Xilinx ZynqMP EP108 board", - .init = xlnx_ep108_init, -}; - -static void xlnx_ep108_machine_init(void) +static void xlnx_ep108_machine_init(MachineClass *mc) { - qemu_register_machine(&xlnx_ep108_machine); + mc->desc = "Xilinx ZynqMP EP108 board"; + mc->init = xlnx_ep108_init; } -machine_init(xlnx_ep108_machine_init); +DEFINE_MACHINE("xlnx-ep108", xlnx_ep108_machine_init) diff --git a/hw/arm/z2.c b/hw/arm/z2.c index 17355479a1..b44eb76fcc 100644 --- a/hw/arm/z2.c +++ b/hw/arm/z2.c @@ -372,15 +372,10 @@ static void z2_init(MachineState *machine) arm_load_kernel(mpu->cpu, &z2_binfo); } -static QEMUMachine z2_machine = { - .name = "z2", - .desc = "Zipit Z2 (PXA27x)", - .init = z2_init, -}; - -static void z2_machine_init(void) +static void z2_machine_init(MachineClass *mc) { - qemu_register_machine(&z2_machine); + mc->desc = "Zipit Z2 (PXA27x)"; + mc->init = z2_init; } -machine_init(z2_machine_init); +DEFINE_MACHINE("z2", z2_machine_init) diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c index 1ec7c3bbe0..f36fbf2318 100644 --- a/hw/core/null-machine.c +++ b/hw/core/null-machine.c @@ -19,17 +19,11 @@ static void machine_none_init(MachineState *machine) { } -static QEMUMachine machine_none = { - .name = "none", - .desc = "empty machine", - .init = machine_none_init, - .max_cpus = 0, -}; - -static void register_machines(void) +static void machine_none_machine_init(MachineClass *mc) { - qemu_register_machine(&machine_none); + mc->desc = "empty machine"; + mc->init = machine_none_init; + mc->max_cpus = 0; } -machine_init(register_machines); - +DEFINE_MACHINE("none", machine_none_machine_init) diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c index d9484493b5..de880d173b 100644 --- a/hw/cris/axis_dev88.c +++ b/hw/cris/axis_dev88.c @@ -351,16 +351,11 @@ void axisdev88_init(MachineState *machine) } } -static QEMUMachine axisdev88_machine = { - .name = "axis-dev88", - .desc = "AXIS devboard 88", - .init = axisdev88_init, - .is_default = 1, -}; - -static void axisdev88_machine_init(void) +static void axisdev88_machine_init(MachineClass *mc) { - qemu_register_machine(&axisdev88_machine); + mc->desc = "AXIS devboard 88"; + mc->init = axisdev88_init; + mc->is_default = 1; } -machine_init(axisdev88_machine_init); +DEFINE_MACHINE("axis-dev88", axisdev88_machine_init) diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c index 70f48d3b1d..04d2066299 100644 --- a/hw/lm32/lm32_boards.c +++ b/hw/lm32/lm32_boards.c @@ -292,24 +292,20 @@ static void lm32_uclinux_init(MachineState *machine) qemu_register_reset(main_cpu_reset, reset_info); } -static QEMUMachine lm32_evr_machine = { - .name = "lm32-evr", - .desc = "LatticeMico32 EVR32 eval system", - .init = lm32_evr_init, - .is_default = 1, -}; - -static QEMUMachine lm32_uclinux_machine = { - .name = "lm32-uclinux", - .desc = "lm32 platform for uClinux and u-boot by Theobroma Systems", - .init = lm32_uclinux_init, - .is_default = 0, -}; - -static void lm32_machine_init(void) +static void lm32_evr_machine_init(MachineClass *mc) { - qemu_register_machine(&lm32_uclinux_machine); - qemu_register_machine(&lm32_evr_machine); + mc->desc = "LatticeMico32 EVR32 eval system"; + mc->init = lm32_evr_init; + mc->is_default = 1; } -machine_init(lm32_machine_init); +DEFINE_MACHINE("lm32-evr", lm32_evr_machine_init) + +static void lm32_uclinux_machine_init(MachineClass *mc) +{ + mc->desc = "lm32 platform for uClinux and u-boot by Theobroma Systems"; + mc->init = lm32_uclinux_init; + mc->is_default = 0; +} + +DEFINE_MACHINE("lm32-uclinux", lm32_uclinux_machine_init) diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c index e755f5b24f..cb308500b4 100644 --- a/hw/lm32/milkymist.c +++ b/hw/lm32/milkymist.c @@ -209,16 +209,11 @@ milkymist_init(MachineState *machine) qemu_register_reset(main_cpu_reset, reset_info); } -static QEMUMachine milkymist_machine = { - .name = "milkymist", - .desc = "Milkymist One", - .init = milkymist_init, - .is_default = 0, -}; - -static void milkymist_machine_init(void) +static void milkymist_machine_init(MachineClass *mc) { - qemu_register_machine(&milkymist_machine); + mc->desc = "Milkymist One"; + mc->init = milkymist_init; + mc->is_default = 0; } -machine_init(milkymist_machine_init); +DEFINE_MACHINE("milkymist", milkymist_machine_init) diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index b18dc7f7ea..aa49cd5c42 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -89,15 +89,10 @@ static void an5206_init(MachineState *machine) env->pc = entry; } -static QEMUMachine an5206_machine = { - .name = "an5206", - .desc = "Arnewsh 5206", - .init = an5206_init, -}; - -static void an5206_machine_init(void) +static void an5206_machine_init(MachineClass *mc) { - qemu_register_machine(&an5206_machine); + mc->desc = "Arnewsh 5206"; + mc->init = an5206_init; } -machine_init(an5206_machine_init); +DEFINE_MACHINE("an5206", an5206_machine_init) diff --git a/hw/m68k/dummy_m68k.c b/hw/m68k/dummy_m68k.c index 5b77d930e4..d4f2073e37 100644 --- a/hw/m68k/dummy_m68k.c +++ b/hw/m68k/dummy_m68k.c @@ -72,15 +72,10 @@ static void dummy_m68k_init(MachineState *machine) env->pc = entry; } -static QEMUMachine dummy_m68k_machine = { - .name = "dummy", - .desc = "Dummy board", - .init = dummy_m68k_init, -}; - -static void dummy_m68k_machine_init(void) +static void dummy_m68k_machine_init(MachineClass *mc) { - qemu_register_machine(&dummy_m68k_machine); + mc->desc = "Dummy board"; + mc->init = dummy_m68k_init; } -machine_init(dummy_m68k_machine_init); +DEFINE_MACHINE("dummy", dummy_m68k_machine_init) diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index c38ffb8be3..c3365eb21d 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -294,16 +294,11 @@ static void mcf5208evb_init(MachineState *machine) env->pc = entry; } -static QEMUMachine mcf5208evb_machine = { - .name = "mcf5208evb", - .desc = "MCF5206EVB", - .init = mcf5208evb_init, - .is_default = 1, -}; - -static void mcf5208evb_machine_init(void) +static void mcf5208evb_machine_init(MachineClass *mc) { - qemu_register_machine(&mcf5208evb_machine); + mc->desc = "MCF5206EVB"; + mc->init = mcf5208evb_init; + mc->is_default = 1; } -machine_init(mcf5208evb_machine_init); +DEFINE_MACHINE("mcf5208evb", mcf5208evb_machine_init) diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index d75b053c3c..462060f093 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -206,16 +206,11 @@ petalogix_ml605_init(MachineState *machine) } -static QEMUMachine petalogix_ml605_machine = { - .name = "petalogix-ml605", - .desc = "PetaLogix linux refdesign for xilinx ml605 little endian", - .init = petalogix_ml605_init, - .is_default = 0, -}; - -static void petalogix_ml605_machine_init(void) +static void petalogix_ml605_machine_init(MachineClass *mc) { - qemu_register_machine(&petalogix_ml605_machine); + mc->desc = "PetaLogix linux refdesign for xilinx ml605 little endian"; + mc->init = petalogix_ml605_init; + mc->is_default = 0; } -machine_init(petalogix_ml605_machine_init); +DEFINE_MACHINE("petalogix-ml605", petalogix_ml605_machine_init) diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c index 701b435368..33811561bb 100644 --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c @@ -124,16 +124,11 @@ petalogix_s3adsp1800_init(MachineState *machine) NULL); } -static QEMUMachine petalogix_s3adsp1800_machine = { - .name = "petalogix-s3adsp1800", - .desc = "PetaLogix linux refdesign for xilinx Spartan 3ADSP1800", - .init = petalogix_s3adsp1800_init, - .is_default = 1, -}; - -static void petalogix_s3adsp1800_machine_init(void) +static void petalogix_s3adsp1800_machine_init(MachineClass *mc) { - qemu_register_machine(&petalogix_s3adsp1800_machine); + mc->desc = "PetaLogix linux refdesign for xilinx Spartan 3ADSP1800"; + mc->init = petalogix_s3adsp1800_init; + mc->is_default = 1; } -machine_init(petalogix_s3adsp1800_machine_init); +DEFINE_MACHINE("petalogix-s3adsp1800", petalogix_s3adsp1800_machine_init) diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c index b8a11e49e9..e44521ffa9 100644 --- a/hw/mips/mips_fulong2e.c +++ b/hw/mips/mips_fulong2e.c @@ -381,15 +381,10 @@ static void mips_fulong2e_init(MachineState *machine) network_init(pci_bus); } -static QEMUMachine mips_fulong2e_machine = { - .name = "fulong2e", - .desc = "Fulong 2e mini pc", - .init = mips_fulong2e_init, -}; - -static void mips_fulong2e_machine_init(void) +static void mips_fulong2e_machine_init(MachineClass *mc) { - qemu_register_machine(&mips_fulong2e_machine); + mc->desc = "Fulong 2e mini pc"; + mc->init = mips_fulong2e_init; } -machine_init(mips_fulong2e_machine_init); +DEFINE_MACHINE("fulong2e", mips_fulong2e_machine_init) diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c index f944c4c705..d3627ba9b6 100644 --- a/hw/mips/mips_jazz.c +++ b/hw/mips/mips_jazz.c @@ -349,24 +349,20 @@ void mips_pica61_init(MachineState *machine) mips_jazz_init(machine, JAZZ_PICA61); } -static QEMUMachine mips_magnum_machine = { - .name = "magnum", - .desc = "MIPS Magnum", - .init = mips_magnum_init, - .block_default_type = IF_SCSI, -}; - -static QEMUMachine mips_pica61_machine = { - .name = "pica61", - .desc = "Acer Pica 61", - .init = mips_pica61_init, - .block_default_type = IF_SCSI, -}; - -static void mips_jazz_machine_init(void) +static void mips_magnum_machine_init(MachineClass *mc) { - qemu_register_machine(&mips_magnum_machine); - qemu_register_machine(&mips_pica61_machine); + mc->desc = "MIPS Magnum"; + mc->init = mips_magnum_init; + mc->block_default_type = IF_SCSI; } -machine_init(mips_jazz_machine_init); +DEFINE_MACHINE("magnum", mips_magnum_machine_init) + +static void mips_pica61_machine_init(MachineClass *mc) +{ + mc->desc = "Acer Pica 61"; + mc->init = mips_pica61_init; + mc->block_default_type = IF_SCSI; +} + +DEFINE_MACHINE("pica61", mips_pica61_machine_init) diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index 1004e37548..bb864fe908 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -1205,23 +1205,19 @@ static const TypeInfo mips_malta_device = { .class_init = mips_malta_class_init, }; -static QEMUMachine mips_malta_machine = { - .name = "malta", - .desc = "MIPS Malta Core LV", - .init = mips_malta_init, - .max_cpus = 16, - .is_default = 1, -}; +static void mips_malta_machine_init(MachineClass *mc) +{ + mc->desc = "MIPS Malta Core LV"; + mc->init = mips_malta_init; + mc->max_cpus = 16; + mc->is_default = 1; +} + +DEFINE_MACHINE("malta", mips_malta_machine_init) static void mips_malta_register_types(void) { type_register_static(&mips_malta_device); } -static void mips_malta_machine_init(void) -{ - qemu_register_machine(&mips_malta_machine); -} - type_init(mips_malta_register_types) -machine_init(mips_malta_machine_init); diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c index 063151ffcc..e65131266c 100644 --- a/hw/mips/mips_mipssim.c +++ b/hw/mips/mips_mipssim.c @@ -231,15 +231,10 @@ mips_mipssim_init(MachineState *machine) mipsnet_init(0x4200, env->irq[2], &nd_table[0]); } -static QEMUMachine mips_mipssim_machine = { - .name = "mipssim", - .desc = "MIPS MIPSsim platform", - .init = mips_mipssim_init, -}; - -static void mips_mipssim_machine_init(void) +static void mips_mipssim_machine_init(MachineClass *mc) { - qemu_register_machine(&mips_mipssim_machine); + mc->desc = "MIPS MIPSsim platform"; + mc->init = mips_mipssim_init; } -machine_init(mips_mipssim_machine_init); +DEFINE_MACHINE("mipssim", mips_mipssim_machine_init) diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c index c9612271e9..97628fc5fe 100644 --- a/hw/mips/mips_r4k.c +++ b/hw/mips/mips_r4k.c @@ -298,15 +298,10 @@ void mips_r4k_init(MachineState *machine) isa_create_simple(isa_bus, "i8042"); } -static QEMUMachine mips_machine = { - .name = "mips", - .desc = "mips r4k platform", - .init = mips_r4k_init, -}; - -static void mips_machine_init(void) +static void mips_machine_init(MachineClass *mc) { - qemu_register_machine(&mips_machine); + mc->desc = "mips r4k platform"; + mc->init = mips_r4k_init; } -machine_init(mips_machine_init); +DEFINE_MACHINE("mips", mips_machine_init) diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c index 5e69e11514..a3d1a1ba2a 100644 --- a/hw/moxie/moxiesim.c +++ b/hw/moxie/moxiesim.c @@ -146,16 +146,11 @@ static void moxiesim_init(MachineState *machine) } } -static QEMUMachine moxiesim_machine = { - .name = "moxiesim", - .desc = "Moxie simulator platform", - .init = moxiesim_init, - .is_default = 1, -}; - -static void moxie_machine_init(void) +static void moxiesim_machine_init(MachineClass *mc) { - qemu_register_machine(&moxiesim_machine); + mc->desc = "Moxie simulator platform"; + mc->init = moxiesim_init; + mc->is_default = 1; } -machine_init(moxie_machine_init) +DEFINE_MACHINE("moxiesim", moxiesim_machine_init) diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index 09285bd2e6..5f267850e0 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -132,17 +132,12 @@ static void openrisc_sim_init(MachineState *machine) cpu_openrisc_load_kernel(ram_size, kernel_filename, cpu); } -static QEMUMachine openrisc_sim_machine = { - .name = "or32-sim", - .desc = "or32 simulation", - .init = openrisc_sim_init, - .max_cpus = 1, - .is_default = 1, -}; - -static void openrisc_sim_machine_init(void) +static void openrisc_sim_machine_init(MachineClass *mc) { - qemu_register_machine(&openrisc_sim_machine); + mc->desc = "or32 simulation"; + mc->init = openrisc_sim_init; + mc->max_cpus = 1; + mc->is_default = 1; } -machine_init(openrisc_sim_machine_init); +DEFINE_MACHINE("or32-sim", openrisc_sim_machine_init) diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index 14b14eaa7d..384b6e84d1 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -57,17 +57,12 @@ static void e500plat_init(MachineState *machine) ppce500_init(machine, ¶ms); } -static QEMUMachine e500plat_machine = { - .name = "ppce500", - .desc = "generic paravirt e500 platform", - .init = e500plat_init, - .max_cpus = 32, - .has_dynamic_sysbus = true, -}; - -static void e500plat_machine_init(void) +static void e500plat_machine_init(MachineClass *mc) { - qemu_register_machine(&e500plat_machine); + mc->desc = "generic paravirt e500 platform"; + mc->init = e500plat_init; + mc->max_cpus = 32; + mc->has_dynamic_sysbus = true; } -machine_init(e500plat_machine_init); +DEFINE_MACHINE("ppce500", e500plat_machine_init) diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 4c5fe4640c..5cba2cb145 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -357,22 +357,17 @@ static int heathrow_kvm_type(const char *arg) return 2; } -static QEMUMachine heathrow_machine = { - .name = "g3beige", - .desc = "Heathrow based PowerMAC", - .init = ppc_heathrow_init, - .max_cpus = MAX_CPUS, +static void heathrow_machine_init(MachineClass *mc) +{ + mc->desc = "Heathrow based PowerMAC"; + mc->init = ppc_heathrow_init; + mc->max_cpus = MAX_CPUS; #ifndef TARGET_PPC64 - .is_default = 1, + mc->is_default = 1; #endif /* TOFIX "cad" when Mac floppy is implemented */ - .default_boot_order = "cd", - .kvm_type = heathrow_kvm_type, -}; - -static void heathrow_machine_init(void) -{ - qemu_register_machine(&heathrow_machine); + mc->default_boot_order = "cd"; + mc->kvm_type = heathrow_kvm_type; } -machine_init(heathrow_machine_init); +DEFINE_MACHINE("g3beige", heathrow_machine_init) diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c index 3a3b141e43..0afbd34d69 100644 --- a/hw/ppc/mpc8544ds.c +++ b/hw/ppc/mpc8544ds.c @@ -50,16 +50,11 @@ static void mpc8544ds_init(MachineState *machine) } -static QEMUMachine ppce500_machine = { - .name = "mpc8544ds", - .desc = "mpc8544ds", - .init = mpc8544ds_init, - .max_cpus = 15, -}; - -static void ppce500_machine_init(void) +static void ppce500_machine_init(MachineClass *mc) { - qemu_register_machine(&ppce500_machine); + mc->desc = "mpc8544ds"; + mc->init = mpc8544ds_init; + mc->max_cpus = 15; } -machine_init(ppce500_machine_init); +DEFINE_MACHINE("mpc8544ds", ppce500_machine_init) diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c index 53897257f0..56980bf0c1 100644 --- a/hw/ppc/ppc405_boards.c +++ b/hw/ppc/ppc405_boards.c @@ -369,11 +369,13 @@ static void ref405ep_init(MachineState *machine) #endif } -static QEMUMachine ref405ep_machine = { - .name = "ref405ep", - .desc = "ref405ep", - .init = ref405ep_init, -}; +static void ref405ep_machine_init(MachineClass *mc) +{ + mc->desc = "ref405ep"; + mc->init = ref405ep_init; +} + +DEFINE_MACHINE("ref405ep", ref405ep_machine_init) /*****************************************************************************/ /* AMCC Taihu evaluation board */ @@ -665,16 +667,10 @@ static void taihu_405ep_init(MachineState *machine) #endif } -static QEMUMachine taihu_machine = { - .name = "taihu", - .desc = "taihu", - .init = taihu_405ep_init, -}; - -static void ppc405_machine_init(void) +static void taihu_machine_init(MachineClass *mc) { - qemu_register_machine(&ref405ep_machine); - qemu_register_machine(&taihu_machine); + mc->desc = "taihu"; + mc->init = taihu_405ep_init; } -machine_init(ppc405_machine_init); +DEFINE_MACHINE("taihu", taihu_machine_init) diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 032fa803db..4726832bfc 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -293,15 +293,10 @@ static void bamboo_init(MachineState *machine) kvmppc_init(); } -static QEMUMachine bamboo_machine = { - .name = "bamboo", - .desc = "bamboo", - .init = bamboo_init, -}; - -static void bamboo_machine_init(void) +static void bamboo_machine_init(MachineClass *mc) { - qemu_register_machine(&bamboo_machine); + mc->desc = "bamboo"; + mc->init = bamboo_init; } -machine_init(bamboo_machine_init); +DEFINE_MACHINE("bamboo", bamboo_machine_init) diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 81f0838cd9..9d6d70a16c 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -687,17 +687,12 @@ static void ppc_prep_init(MachineState *machine) graphic_width, graphic_height, graphic_depth); } -static QEMUMachine prep_machine = { - .name = "prep", - .desc = "PowerPC PREP platform", - .init = ppc_prep_init, - .max_cpus = MAX_CPUS, - .default_boot_order = "cad", -}; - -static void prep_machine_init(void) +static void prep_machine_init(MachineClass *mc) { - qemu_register_machine(&prep_machine); + mc->desc = "PowerPC PREP platform"; + mc->init = ppc_prep_init; + mc->max_cpus = MAX_CPUS; + mc->default_boot_order = "cad"; } -machine_init(prep_machine_init); +DEFINE_MACHINE("prep", prep_machine_init) diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index de86f7c64c..457d762a1c 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -297,15 +297,10 @@ static void virtex_init(MachineState *machine) env->load_info = &boot_info; } -static QEMUMachine virtex_machine = { - .name = "virtex-ml507", - .desc = "Xilinx Virtex ML507 reference design", - .init = virtex_init, -}; - -static void virtex_machine_init(void) +static void virtex_machine_init(MachineClass *mc) { - qemu_register_machine(&virtex_machine); + mc->desc = "Xilinx Virtex ML507 reference design"; + mc->init = virtex_init; } -machine_init(virtex_machine_init); +DEFINE_MACHINE("virtex-ml507", virtex_machine_init) diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 481bd927bd..c1ff9a0cff 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -354,15 +354,10 @@ static void r2d_init(MachineState *machine) SDRAM_BASE + BOOT_PARAMS_OFFSET); } -static QEMUMachine r2d_machine = { - .name = "r2d", - .desc = "r2d-plus board", - .init = r2d_init, -}; - -static void r2d_machine_init(void) +static void r2d_machine_init(MachineClass *mc) { - qemu_register_machine(&r2d_machine); + mc->desc = "r2d-plus board"; + mc->init = r2d_init; } -machine_init(r2d_machine_init); +DEFINE_MACHINE("r2d", r2d_machine_init) diff --git a/hw/sh4/shix.c b/hw/sh4/shix.c index 59bcc23d22..d508be9588 100644 --- a/hw/sh4/shix.c +++ b/hw/sh4/shix.c @@ -87,16 +87,11 @@ static void shix_init(MachineState *machine) tc58128_init(s, "shix_linux_nand.bin", NULL); } -static QEMUMachine shix_machine = { - .name = "shix", - .desc = "shix card", - .init = shix_init, - .is_default = 1, -}; - -static void shix_machine_init(void) +static void shix_machine_init(MachineClass *mc) { - qemu_register_machine(&shix_machine); + mc->desc = "shix card"; + mc->init = shix_init; + mc->is_default = 1; } -machine_init(shix_machine_init); +DEFINE_MACHINE("shix", shix_machine_init) diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index dd01842f70..ee73fea8a4 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -216,15 +216,10 @@ static void leon3_generic_hw_init(MachineState *machine) } } -static QEMUMachine leon3_generic_machine = { - .name = "leon3_generic", - .desc = "Leon-3 generic", - .init = leon3_generic_hw_init, -}; - -static void leon3_machine_init(void) +static void leon3_generic_machine_init(MachineClass *mc) { - qemu_register_machine(&leon3_generic_machine); + mc->desc = "Leon-3 generic"; + mc->init = leon3_generic_hw_init; } -machine_init(leon3_machine_init); +DEFINE_MACHINE("leon3_generic", leon3_generic_machine_init) diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index dfb04f93e9..092e250cd7 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -1420,81 +1420,99 @@ static void sbook_init(MachineState *machine) sun4m_hw_init(&sun4m_hwdefs[8], machine); } -static QEMUMachine ss5_machine = { - .name = "SS-5", - .desc = "Sun4m platform, SPARCstation 5", - .init = ss5_init, - .block_default_type = IF_SCSI, - .is_default = 1, - .default_boot_order = "c", -}; +static void ss5_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation 5"; + mc->init = ss5_init; + mc->block_default_type = IF_SCSI; + mc->is_default = 1; + mc->default_boot_order = "c"; +} -static QEMUMachine ss10_machine = { - .name = "SS-10", - .desc = "Sun4m platform, SPARCstation 10", - .init = ss10_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, - .default_boot_order = "c", -}; +DEFINE_MACHINE("SS-5", ss5_machine_init) -static QEMUMachine ss600mp_machine = { - .name = "SS-600MP", - .desc = "Sun4m platform, SPARCserver 600MP", - .init = ss600mp_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, - .default_boot_order = "c", -}; +static void ss10_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation 10"; + mc->init = ss10_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; + mc->default_boot_order = "c"; +} -static QEMUMachine ss20_machine = { - .name = "SS-20", - .desc = "Sun4m platform, SPARCstation 20", - .init = ss20_init, - .block_default_type = IF_SCSI, - .max_cpus = 4, - .default_boot_order = "c", -}; +DEFINE_MACHINE("SS-10", ss10_machine_init) -static QEMUMachine voyager_machine = { - .name = "Voyager", - .desc = "Sun4m platform, SPARCstation Voyager", - .init = vger_init, - .block_default_type = IF_SCSI, - .default_boot_order = "c", -}; +static void ss600mp_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCserver 600MP"; + mc->init = ss600mp_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; + mc->default_boot_order = "c"; +} -static QEMUMachine ss_lx_machine = { - .name = "LX", - .desc = "Sun4m platform, SPARCstation LX", - .init = ss_lx_init, - .block_default_type = IF_SCSI, - .default_boot_order = "c", -}; +DEFINE_MACHINE("SS-600MP", ss600mp_machine_init) -static QEMUMachine ss4_machine = { - .name = "SS-4", - .desc = "Sun4m platform, SPARCstation 4", - .init = ss4_init, - .block_default_type = IF_SCSI, - .default_boot_order = "c", -}; +static void ss20_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation 20"; + mc->init = ss20_init; + mc->block_default_type = IF_SCSI; + mc->max_cpus = 4; + mc->default_boot_order = "c"; +} -static QEMUMachine scls_machine = { - .name = "SPARCClassic", - .desc = "Sun4m platform, SPARCClassic", - .init = scls_init, - .block_default_type = IF_SCSI, - .default_boot_order = "c", -}; +DEFINE_MACHINE("SS-20", ss20_machine_init) -static QEMUMachine sbook_machine = { - .name = "SPARCbook", - .desc = "Sun4m platform, SPARCbook", - .init = sbook_init, - .block_default_type = IF_SCSI, - .default_boot_order = "c", -}; +static void voyager_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation Voyager"; + mc->init = vger_init; + mc->block_default_type = IF_SCSI; + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("Voyager", voyager_machine_init) + +static void ss_lx_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation LX"; + mc->init = ss_lx_init; + mc->block_default_type = IF_SCSI; + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("LX", ss_lx_machine_init) + +static void ss4_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCstation 4"; + mc->init = ss4_init; + mc->block_default_type = IF_SCSI; + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("SS-4", ss4_machine_init) + +static void scls_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCClassic"; + mc->init = scls_init; + mc->block_default_type = IF_SCSI; + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("SPARCClassic", scls_machine_init) + +static void sbook_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4m platform, SPARCbook"; + mc->init = sbook_init; + mc->block_default_type = IF_SCSI; + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("SPARCbook", sbook_machine_init) static void sun4m_register_types(void) { @@ -1504,18 +1522,4 @@ static void sun4m_register_types(void) type_register_static(&ram_info); } -static void sun4m_machine_init(void) -{ - qemu_register_machine(&ss5_machine); - qemu_register_machine(&ss10_machine); - qemu_register_machine(&ss600mp_machine); - qemu_register_machine(&ss20_machine); - qemu_register_machine(&voyager_machine); - qemu_register_machine(&ss_lx_machine); - qemu_register_machine(&ss4_machine); - qemu_register_machine(&scls_machine); - qemu_register_machine(&sbook_machine); -} - type_init(sun4m_register_types) -machine_init(sun4m_machine_init); diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index e746f47ed4..ab43dc65af 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -965,30 +965,36 @@ static void niagara_init(MachineState *machine) sun4uv_init(get_system_memory(), machine, &hwdefs[2]); } -static QEMUMachine sun4u_machine = { - .name = "sun4u", - .desc = "Sun4u platform", - .init = sun4u_init, - .max_cpus = 1, // XXX for now - .is_default = 1, - .default_boot_order = "c", -}; +static void sun4u_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4u platform"; + mc->init = sun4u_init; + mc->max_cpus = 1; /* XXX for now */ + mc->is_default = 1; + mc->default_boot_order = "c"; +} -static QEMUMachine sun4v_machine = { - .name = "sun4v", - .desc = "Sun4v platform", - .init = sun4v_init, - .max_cpus = 1, // XXX for now - .default_boot_order = "c", -}; +DEFINE_MACHINE("sun4u", sun4u_machine_init) -static QEMUMachine niagara_machine = { - .name = "Niagara", - .desc = "Sun4v platform, Niagara", - .init = niagara_init, - .max_cpus = 1, // XXX for now - .default_boot_order = "c", -}; +static void sun4v_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4v platform"; + mc->init = sun4v_init; + mc->max_cpus = 1; /* XXX for now */ + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("sun4v", sun4v_machine_init) + +static void niagara_machine_init(MachineClass *mc) +{ + mc->desc = "Sun4v platform, Niagara"; + mc->init = niagara_init; + mc->max_cpus = 1; /* XXX for now */ + mc->default_boot_order = "c"; +} + +DEFINE_MACHINE("Niagara", niagara_machine_init) static void sun4u_register_types(void) { @@ -997,12 +1003,4 @@ static void sun4u_register_types(void) type_register_static(&ram_info); } -static void sun4u_machine_init(void) -{ - qemu_register_machine(&sun4u_machine); - qemu_register_machine(&sun4v_machine); - qemu_register_machine(&niagara_machine); -} - type_init(sun4u_register_types) -machine_init(sun4u_machine_init); diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c index ff4d2bd083..8532410756 100644 --- a/hw/tricore/tricore_testboard.c +++ b/hw/tricore/tricore_testboard.c @@ -115,16 +115,11 @@ static void tricoreboard_init(MachineState *machine) tricore_testboard_init(machine, 0x183); } -static QEMUMachine ttb_machine = { - .name = "tricore_testboard", - .desc = "a minimal TriCore board", - .init = tricoreboard_init, - .is_default = 0, -}; - -static void tricore_testboard_machine_init(void) +static void ttb_machine_init(MachineClass *mc) { - qemu_register_machine(&ttb_machine); + mc->desc = "a minimal TriCore board"; + mc->init = tricoreboard_init; + mc->is_default = 0; } -machine_init(tricore_testboard_machine_init); +DEFINE_MACHINE("tricore_testboard", ttb_machine_init) diff --git a/hw/unicore32/puv3.c b/hw/unicore32/puv3.c index 3026d94316..91117b2b94 100644 --- a/hw/unicore32/puv3.c +++ b/hw/unicore32/puv3.c @@ -130,16 +130,11 @@ static void puv3_init(MachineState *machine) puv3_load_kernel(kernel_filename); } -static QEMUMachine puv3_machine = { - .name = "puv3", - .desc = "PKUnity Version-3 based on UniCore32", - .init = puv3_init, - .is_default = 1, -}; - -static void puv3_machine_init(void) +static void puv3_machine_init(MachineClass *mc) { - qemu_register_machine(&puv3_machine); + mc->desc = "PKUnity Version-3 based on UniCore32"; + mc->init = puv3_init; + mc->is_default = 1; } -machine_init(puv3_machine_init) +DEFINE_MACHINE("puv3", puv3_machine_init) diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c index 2e545d2418..23d6ef07ea 100644 --- a/hw/xenpv/xen_machine_pv.c +++ b/hw/xenpv/xen_machine_pv.c @@ -93,17 +93,12 @@ static void xen_init_pv(MachineState *machine) xen_init_display(xen_domid); } -static QEMUMachine xenpv_machine = { - .name = "xenpv", - .desc = "Xen Para-virtualized PC", - .init = xen_init_pv, - .max_cpus = 1, - .default_machine_opts = "accel=xen", -}; - -static void xenpv_machine_init(void) +static void xenpv_machine_init(MachineClass *mc) { - qemu_register_machine(&xenpv_machine); + mc->desc = "Xen Para-virtualized PC"; + mc->init = xen_init_pv; + mc->max_cpus = 1; + mc->default_machine_opts = "accel=xen"; } -machine_init(xenpv_machine_init); +DEFINE_MACHINE("xenpv", xenpv_machine_init) diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c index 3a8140a6b5..aa1cd107ce 100644 --- a/hw/xtensa/sim.c +++ b/hw/xtensa/sim.c @@ -104,17 +104,12 @@ static void xtensa_sim_init(MachineState *machine) } } -static QEMUMachine xtensa_sim_machine = { - .name = "sim", - .desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")", - .is_default = true, - .init = xtensa_sim_init, - .max_cpus = 4, -}; - -static void xtensa_sim_machine_init(void) +static void xtensa_sim_machine_init(MachineClass *mc) { - qemu_register_machine(&xtensa_sim_machine); + mc->desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")"; + mc->is_default = true; + mc->init = xtensa_sim_init; + mc->max_cpus = 4; } -machine_init(xtensa_sim_machine_init); +DEFINE_MACHINE("sim", xtensa_sim_machine_init) diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index 5030ec9f87..d6ddfa1bba 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -428,40 +428,38 @@ static void xtensa_kc705_init(MachineState *machine) lx_init(&kc705_board, machine); } -static QEMUMachine xtensa_lx60_machine = { - .name = "lx60", - .desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")", - .init = xtensa_lx60_init, - .max_cpus = 4, -}; - -static QEMUMachine xtensa_lx200_machine = { - .name = "lx200", - .desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")", - .init = xtensa_lx200_init, - .max_cpus = 4, -}; - -static QEMUMachine xtensa_ml605_machine = { - .name = "ml605", - .desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")", - .init = xtensa_ml605_init, - .max_cpus = 4, -}; - -static QEMUMachine xtensa_kc705_machine = { - .name = "kc705", - .desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")", - .init = xtensa_kc705_init, - .max_cpus = 4, -}; - -static void xtensa_lx_machines_init(void) +static void xtensa_lx60_machine_init(MachineClass *mc) { - qemu_register_machine(&xtensa_lx60_machine); - qemu_register_machine(&xtensa_lx200_machine); - qemu_register_machine(&xtensa_ml605_machine); - qemu_register_machine(&xtensa_kc705_machine); + mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; + mc->init = xtensa_lx60_init; + mc->max_cpus = 4; } -machine_init(xtensa_lx_machines_init); +DEFINE_MACHINE("lx60", xtensa_lx60_machine_init) + +static void xtensa_lx200_machine_init(MachineClass *mc) +{ + mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; + mc->init = xtensa_lx200_init; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("lx200", xtensa_lx200_machine_init) + +static void xtensa_ml605_machine_init(MachineClass *mc) +{ + mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; + mc->init = xtensa_ml605_init; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("ml605", xtensa_ml605_machine_init) + +static void xtensa_kc705_machine_init(MachineClass *mc) +{ + mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; + mc->init = xtensa_kc705_init; + mc->max_cpus = 4; +} + +DEFINE_MACHINE("kc705", xtensa_kc705_machine_init) From 8a661aea0e7f6e776c6ebc9abe339a85b34fea1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Sat, 19 Sep 2015 10:49:44 +0200 Subject: [PATCH 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The script used for converting from QEMUMachine had used one DEFINE_MACHINE() per machine registered. In cases where multiple machines are registered from one source file, avoid the excessive generation of module init functions by reverting this unrolling. Signed-off-by: Andreas Färber --- hw/arm/exynos4_boards.c | 28 +++++++++-- hw/arm/gumstix.c | 28 +++++++++-- hw/arm/highbank.c | 28 +++++++++-- hw/arm/nseries.c | 28 +++++++++-- hw/arm/omap_sx1.c | 28 +++++++++-- hw/arm/realview.c | 50 +++++++++++++++---- hw/arm/spitz.c | 50 +++++++++++++++---- hw/arm/stellaris.c | 28 +++++++++-- hw/arm/versatilepb.c | 28 +++++++++-- hw/lm32/lm32_boards.c | 28 +++++++++-- hw/mips/mips_jazz.c | 28 +++++++++-- hw/ppc/ppc405_boards.c | 28 +++++++++-- hw/sparc/sun4m.c | 104 +++++++++++++++++++++++++++++++++------- hw/sparc64/sun4u.c | 38 ++++++++++++--- hw/xtensa/xtfpga.c | 50 +++++++++++++++---- 15 files changed, 484 insertions(+), 88 deletions(-) diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index fadf372b9c..da82b27bad 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -144,20 +144,40 @@ static void smdkc210_init(MachineState *machine) arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo); } -static void exynos4_machine_nuri_machine_init(MachineClass *mc) +static void nuri_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Samsung NURI board (Exynos4210)"; mc->init = nuri_init; mc->max_cpus = EXYNOS4210_NCPUS; } -DEFINE_MACHINE("nuri", exynos4_machine_nuri_machine_init) +static const TypeInfo nuri_type = { + .name = MACHINE_TYPE_NAME("nuri"), + .parent = TYPE_MACHINE, + .class_init = nuri_class_init, +}; -static void exynos4_machine_smdkc210_machine_init(MachineClass *mc) +static void smdkc210_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Samsung SMDKC210 board (Exynos4210)"; mc->init = smdkc210_init; mc->max_cpus = EXYNOS4210_NCPUS; } -DEFINE_MACHINE("smdkc210", exynos4_machine_smdkc210_machine_init) +static const TypeInfo smdkc210_type = { + .name = MACHINE_TYPE_NAME("smdkc210"), + .parent = TYPE_MACHINE, + .class_init = smdkc210_class_init, +}; + +static void exynos4_machines_init(void) +{ + type_register_static(&nuri_type); + type_register_static(&smdkc210_type); +} + +machine_init(exynos4_machines_init) diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c index 6dc98c86b4..32ad041b20 100644 --- a/hw/arm/gumstix.c +++ b/hw/arm/gumstix.c @@ -121,18 +121,38 @@ static void verdex_init(MachineState *machine) qdev_get_gpio_in(cpu->gpio, 99)); } -static void connex_machine_init(MachineClass *mc) +static void connex_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Gumstix Connex (PXA255)"; mc->init = connex_init; } -DEFINE_MACHINE("connex", connex_machine_init) +static const TypeInfo connex_type = { + .name = MACHINE_TYPE_NAME("connex"), + .parent = TYPE_MACHINE, + .class_init = connex_class_init, +}; -static void verdex_machine_init(MachineClass *mc) +static void verdex_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Gumstix Verdex (PXA270)"; mc->init = verdex_init; } -DEFINE_MACHINE("verdex", verdex_machine_init) +static const TypeInfo verdex_type = { + .name = MACHINE_TYPE_NAME("verdex"), + .parent = TYPE_MACHINE, + .class_init = verdex_class_init, +}; + +static void gumstix_machine_init(void) +{ + type_register_static(&connex_type); + type_register_static(&verdex_type); +} + +machine_init(gumstix_machine_init) diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index 9b2887ef6f..be04b27230 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -391,22 +391,42 @@ static void midway_init(MachineState *machine) calxeda_init(machine, CALXEDA_MIDWAY); } -static void highbank_machine_init(MachineClass *mc) +static void highbank_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Calxeda Highbank (ECX-1000)"; mc->init = highbank_init; mc->block_default_type = IF_SCSI; mc->max_cpus = 4; } -DEFINE_MACHINE("highbank", highbank_machine_init) +static const TypeInfo highbank_type = { + .name = MACHINE_TYPE_NAME("highbank"), + .parent = TYPE_MACHINE, + .class_init = highbank_class_init, +}; -static void midway_machine_init(MachineClass *mc) +static void midway_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Calxeda Midway (ECX-2000)"; mc->init = midway_init; mc->block_default_type = IF_SCSI; mc->max_cpus = 4; } -DEFINE_MACHINE("midway", midway_machine_init) +static const TypeInfo midway_type = { + .name = MACHINE_TYPE_NAME("midway"), + .parent = TYPE_MACHINE, + .class_init = midway_class_init, +}; + +static void calxeda_machines_init(void) +{ + type_register_static(&highbank_type); + type_register_static(&midway_type); +} + +machine_init(calxeda_machines_init) diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c index af28449367..6a6b3e6642 100644 --- a/hw/arm/nseries.c +++ b/hw/arm/nseries.c @@ -1413,20 +1413,40 @@ static void n810_init(MachineState *machine) n8x0_init(machine, &n810_binfo, 810); } -static void n800_machine_init(MachineClass *mc) +static void n800_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)"; mc->init = n800_init; mc->default_boot_order = ""; } -DEFINE_MACHINE("n800", n800_machine_init) +static const TypeInfo n800_type = { + .name = MACHINE_TYPE_NAME("n800"), + .parent = TYPE_MACHINE, + .class_init = n800_class_init, +}; -static void n810_machine_init(MachineClass *mc) +static void n810_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)"; mc->init = n810_init; mc->default_boot_order = ""; } -DEFINE_MACHINE("n810", n810_machine_init) +static const TypeInfo n810_type = { + .name = MACHINE_TYPE_NAME("n810"), + .parent = TYPE_MACHINE, + .class_init = n810_class_init, +}; + +static void nseries_machine_init(void) +{ + type_register_static(&n800_type); + type_register_static(&n810_type); +} + +machine_init(nseries_machine_init) diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c index 68924fc663..8eaf8f3315 100644 --- a/hw/arm/omap_sx1.c +++ b/hw/arm/omap_sx1.c @@ -217,18 +217,38 @@ static void sx1_init_v2(MachineState *machine) sx1_init(machine, 2); } -static void sx1_machine_v2_machine_init(MachineClass *mc) +static void sx1_machine_v2_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Siemens SX1 (OMAP310) V2"; mc->init = sx1_init_v2; } -DEFINE_MACHINE("sx1", sx1_machine_v2_machine_init) +static const TypeInfo sx1_machine_v2_type = { + .name = MACHINE_TYPE_NAME("sx1"), + .parent = TYPE_MACHINE, + .class_init = sx1_machine_v2_class_init, +}; -static void sx1_machine_v1_machine_init(MachineClass *mc) +static void sx1_machine_v1_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Siemens SX1 (OMAP310) V1"; mc->init = sx1_init_v1; } -DEFINE_MACHINE("sx1-v1", sx1_machine_v1_machine_init) +static const TypeInfo sx1_machine_v1_type = { + .name = MACHINE_TYPE_NAME("sx1-v1"), + .parent = TYPE_MACHINE, + .class_init = sx1_machine_v1_class_init, +}; + +static void sx1_machine_init(void) +{ + type_register_static(&sx1_machine_v1_type); + type_register_static(&sx1_machine_v2_type); +} + +machine_init(sx1_machine_init) diff --git a/hw/arm/realview.c b/hw/arm/realview.c index 6c838178f7..e14828db0d 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -399,39 +399,73 @@ static void realview_pbx_a9_init(MachineState *machine) realview_init(machine, BOARD_PBX_A9); } -static void realview_eb_machine_init(MachineClass *mc) +static void realview_eb_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)"; mc->init = realview_eb_init; mc->block_default_type = IF_SCSI; } -DEFINE_MACHINE("realview-eb", realview_eb_machine_init) +static const TypeInfo realview_eb_type = { + .name = MACHINE_TYPE_NAME("realview-eb"), + .parent = TYPE_MACHINE, + .class_init = realview_eb_class_init, +}; -static void realview_eb_mpcore_machine_init(MachineClass *mc) +static void realview_eb_mpcore_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM RealView Emulation Baseboard (ARM11MPCore)"; mc->init = realview_eb_mpcore_init; mc->block_default_type = IF_SCSI; mc->max_cpus = 4; } -DEFINE_MACHINE("realview-eb-mpcore", realview_eb_mpcore_machine_init) +static const TypeInfo realview_eb_mpcore_type = { + .name = MACHINE_TYPE_NAME("realview-eb-mpcore"), + .parent = TYPE_MACHINE, + .class_init = realview_eb_mpcore_class_init, +}; -static void realview_pb_a8_machine_init(MachineClass *mc) +static void realview_pb_a8_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM RealView Platform Baseboard for Cortex-A8"; mc->init = realview_pb_a8_init; } -DEFINE_MACHINE("realview-pb-a8", realview_pb_a8_machine_init) +static const TypeInfo realview_pb_a8_type = { + .name = MACHINE_TYPE_NAME("realview-pb-a8"), + .parent = TYPE_MACHINE, + .class_init = realview_pb_a8_class_init, +}; -static void realview_pbx_a9_machine_init(MachineClass *mc) +static void realview_pbx_a9_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9"; mc->init = realview_pbx_a9_init; mc->block_default_type = IF_SCSI; mc->max_cpus = 4; } -DEFINE_MACHINE("realview-pbx-a9", realview_pbx_a9_machine_init) +static const TypeInfo realview_pbx_a9_type = { + .name = MACHINE_TYPE_NAME("realview-pbx-a9"), + .parent = TYPE_MACHINE, + .class_init = realview_pbx_a9_class_init, +}; + +static void realview_machine_init(void) +{ + type_register_static(&realview_eb_type); + type_register_static(&realview_eb_mpcore_type); + type_register_static(&realview_pb_a8_type); + type_register_static(&realview_pbx_a9_type); +} + +machine_init(realview_machine_init) diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c index 0f59489804..2af03be622 100644 --- a/hw/arm/spitz.c +++ b/hw/arm/spitz.c @@ -972,37 +972,71 @@ static void terrier_init(MachineState *machine) spitz_common_init(machine, terrier, 0x33f); } -static void akitapda_machine_init(MachineClass *mc) +static void akitapda_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Akita PDA (PXA270)"; mc->init = akita_init; } -DEFINE_MACHINE("akita", akitapda_machine_init) +static const TypeInfo akitapda_type = { + .name = MACHINE_TYPE_NAME("akita"), + .parent = TYPE_MACHINE, + .class_init = akitapda_class_init, +}; -static void spitzpda_machine_init(MachineClass *mc) +static void spitzpda_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Spitz PDA (PXA270)"; mc->init = spitz_init; } -DEFINE_MACHINE("spitz", spitzpda_machine_init) +static const TypeInfo spitzpda_type = { + .name = MACHINE_TYPE_NAME("spitz"), + .parent = TYPE_MACHINE, + .class_init = spitzpda_class_init, +}; -static void borzoipda_machine_init(MachineClass *mc) +static void borzoipda_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Borzoi PDA (PXA270)"; mc->init = borzoi_init; } -DEFINE_MACHINE("borzoi", borzoipda_machine_init) +static const TypeInfo borzoipda_type = { + .name = MACHINE_TYPE_NAME("borzoi"), + .parent = TYPE_MACHINE, + .class_init = borzoipda_class_init, +}; -static void terrierpda_machine_init(MachineClass *mc) +static void terrierpda_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Terrier PDA (PXA270)"; mc->init = terrier_init; } -DEFINE_MACHINE("terrier", terrierpda_machine_init) +static const TypeInfo terrierpda_type = { + .name = MACHINE_TYPE_NAME("terrier"), + .parent = TYPE_MACHINE, + .class_init = terrierpda_class_init, +}; + +static void spitz_machine_init(void) +{ + type_register_static(&akitapda_type); + type_register_static(&spitzpda_type); + type_register_static(&borzoipda_type); + type_register_static(&terrierpda_type); +} + +machine_init(spitz_machine_init) static bool is_version_0(void *opaque, int version_id) { diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index a97d9e3ef2..3d6486fcf5 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -1366,21 +1366,41 @@ static void lm3s6965evb_init(MachineState *machine) stellaris_init(kernel_filename, cpu_model, &stellaris_boards[1]); } -static void lm3s811evb_machine_init(MachineClass *mc) +static void lm3s811evb_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Stellaris LM3S811EVB"; mc->init = lm3s811evb_init; } -DEFINE_MACHINE("lm3s811evb", lm3s811evb_machine_init) +static const TypeInfo lm3s811evb_type = { + .name = MACHINE_TYPE_NAME("lm3s811evb"), + .parent = TYPE_MACHINE, + .class_init = lm3s811evb_class_init, +}; -static void lm3s6965evb_machine_init(MachineClass *mc) +static void lm3s6965evb_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Stellaris LM3S6965EVB"; mc->init = lm3s6965evb_init; } -DEFINE_MACHINE("lm3s6965evb", lm3s6965evb_machine_init) +static const TypeInfo lm3s6965evb_type = { + .name = MACHINE_TYPE_NAME("lm3s6965evb"), + .parent = TYPE_MACHINE, + .class_init = lm3s6965evb_class_init, +}; + +static void stellaris_machine_init(void) +{ + type_register_static(&lm3s811evb_type); + type_register_static(&lm3s6965evb_type); +} + +machine_init(stellaris_machine_init) static void stellaris_i2c_class_init(ObjectClass *klass, void *data) { diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 54281f4e3c..912c2908f3 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -391,23 +391,43 @@ static void vab_init(MachineState *machine) versatile_init(machine, 0x25e); } -static void versatilepb_machine_init(MachineClass *mc) +static void versatilepb_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM Versatile/PB (ARM926EJ-S)"; mc->init = vpb_init; mc->block_default_type = IF_SCSI; } -DEFINE_MACHINE("versatilepb", versatilepb_machine_init) +static const TypeInfo versatilepb_type = { + .name = MACHINE_TYPE_NAME("versatilepb"), + .parent = TYPE_MACHINE, + .class_init = versatilepb_class_init, +}; -static void versatileab_machine_init(MachineClass *mc) +static void versatileab_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ARM Versatile/AB (ARM926EJ-S)"; mc->init = vab_init; mc->block_default_type = IF_SCSI; } -DEFINE_MACHINE("versatileab", versatileab_machine_init) +static const TypeInfo versatileab_type = { + .name = MACHINE_TYPE_NAME("versatileab"), + .parent = TYPE_MACHINE, + .class_init = versatileab_class_init, +}; + +static void versatile_machine_init(void) +{ + type_register_static(&versatilepb_type); + type_register_static(&versatileab_type); +} + +machine_init(versatile_machine_init) static void vpb_sic_class_init(ObjectClass *klass, void *data) { diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c index 04d2066299..8e17a82a40 100644 --- a/hw/lm32/lm32_boards.c +++ b/hw/lm32/lm32_boards.c @@ -292,20 +292,40 @@ static void lm32_uclinux_init(MachineState *machine) qemu_register_reset(main_cpu_reset, reset_info); } -static void lm32_evr_machine_init(MachineClass *mc) +static void lm32_evr_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "LatticeMico32 EVR32 eval system"; mc->init = lm32_evr_init; mc->is_default = 1; } -DEFINE_MACHINE("lm32-evr", lm32_evr_machine_init) +static const TypeInfo lm32_evr_type = { + .name = MACHINE_TYPE_NAME("lm32-evr"), + .parent = TYPE_MACHINE, + .class_init = lm32_evr_class_init, +}; -static void lm32_uclinux_machine_init(MachineClass *mc) +static void lm32_uclinux_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "lm32 platform for uClinux and u-boot by Theobroma Systems"; mc->init = lm32_uclinux_init; mc->is_default = 0; } -DEFINE_MACHINE("lm32-uclinux", lm32_uclinux_machine_init) +static const TypeInfo lm32_uclinux_type = { + .name = MACHINE_TYPE_NAME("lm32-uclinux"), + .parent = TYPE_MACHINE, + .class_init = lm32_uclinux_class_init, +}; + +static void lm32_machine_init(void) +{ + type_register_static(&lm32_evr_type); + type_register_static(&lm32_uclinux_type); +} + +machine_init(lm32_machine_init) diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c index d3627ba9b6..1ab885bb3f 100644 --- a/hw/mips/mips_jazz.c +++ b/hw/mips/mips_jazz.c @@ -349,20 +349,40 @@ void mips_pica61_init(MachineState *machine) mips_jazz_init(machine, JAZZ_PICA61); } -static void mips_magnum_machine_init(MachineClass *mc) +static void mips_magnum_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "MIPS Magnum"; mc->init = mips_magnum_init; mc->block_default_type = IF_SCSI; } -DEFINE_MACHINE("magnum", mips_magnum_machine_init) +static const TypeInfo mips_magnum_type = { + .name = MACHINE_TYPE_NAME("magnum"), + .parent = TYPE_MACHINE, + .class_init = mips_magnum_class_init, +}; -static void mips_pica61_machine_init(MachineClass *mc) +static void mips_pica61_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Acer Pica 61"; mc->init = mips_pica61_init; mc->block_default_type = IF_SCSI; } -DEFINE_MACHINE("pica61", mips_pica61_machine_init) +static const TypeInfo mips_pica61_type = { + .name = MACHINE_TYPE_NAME("pica61"), + .parent = TYPE_MACHINE, + .class_init = mips_pica61_class_init, +}; + +static void mips_jazz_machine_init(void) +{ + type_register_static(&mips_magnum_type); + type_register_static(&mips_pica61_type); +} + +machine_init(mips_jazz_machine_init) diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c index 56980bf0c1..ec87587d6d 100644 --- a/hw/ppc/ppc405_boards.c +++ b/hw/ppc/ppc405_boards.c @@ -369,13 +369,19 @@ static void ref405ep_init(MachineState *machine) #endif } -static void ref405ep_machine_init(MachineClass *mc) +static void ref405ep_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ref405ep"; mc->init = ref405ep_init; } -DEFINE_MACHINE("ref405ep", ref405ep_machine_init) +static const TypeInfo ref405ep_type = { + .name = MACHINE_TYPE_NAME("ref405ep"), + .parent = TYPE_MACHINE, + .class_init = ref405ep_class_init, +}; /*****************************************************************************/ /* AMCC Taihu evaluation board */ @@ -667,10 +673,24 @@ static void taihu_405ep_init(MachineState *machine) #endif } -static void taihu_machine_init(MachineClass *mc) +static void taihu_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "taihu"; mc->init = taihu_405ep_init; } -DEFINE_MACHINE("taihu", taihu_machine_init) +static const TypeInfo taihu_type = { + .name = MACHINE_TYPE_NAME("taihu"), + .parent = TYPE_MACHINE, + .class_init = taihu_class_init, +}; + +static void ppc405_machine_init(void) +{ + type_register_static(&ref405ep_type); + type_register_static(&taihu_type); +} + +machine_init(ppc405_machine_init) diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 092e250cd7..9f1917fbe1 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -1420,8 +1420,10 @@ static void sbook_init(MachineState *machine) sun4m_hw_init(&sun4m_hwdefs[8], machine); } -static void ss5_machine_init(MachineClass *mc) +static void ss5_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation 5"; mc->init = ss5_init; mc->block_default_type = IF_SCSI; @@ -1429,10 +1431,16 @@ static void ss5_machine_init(MachineClass *mc) mc->default_boot_order = "c"; } -DEFINE_MACHINE("SS-5", ss5_machine_init) +static const TypeInfo ss5_type = { + .name = MACHINE_TYPE_NAME("SS-5"), + .parent = TYPE_MACHINE, + .class_init = ss5_class_init, +}; -static void ss10_machine_init(MachineClass *mc) +static void ss10_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation 10"; mc->init = ss10_init; mc->block_default_type = IF_SCSI; @@ -1440,10 +1448,16 @@ static void ss10_machine_init(MachineClass *mc) mc->default_boot_order = "c"; } -DEFINE_MACHINE("SS-10", ss10_machine_init) +static const TypeInfo ss10_type = { + .name = MACHINE_TYPE_NAME("SS-10"), + .parent = TYPE_MACHINE, + .class_init = ss10_class_init, +}; -static void ss600mp_machine_init(MachineClass *mc) +static void ss600mp_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCserver 600MP"; mc->init = ss600mp_init; mc->block_default_type = IF_SCSI; @@ -1451,10 +1465,16 @@ static void ss600mp_machine_init(MachineClass *mc) mc->default_boot_order = "c"; } -DEFINE_MACHINE("SS-600MP", ss600mp_machine_init) +static const TypeInfo ss600mp_type = { + .name = MACHINE_TYPE_NAME("SS-600MP"), + .parent = TYPE_MACHINE, + .class_init = ss600mp_class_init, +}; -static void ss20_machine_init(MachineClass *mc) +static void ss20_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation 20"; mc->init = ss20_init; mc->block_default_type = IF_SCSI; @@ -1462,57 +1482,91 @@ static void ss20_machine_init(MachineClass *mc) mc->default_boot_order = "c"; } -DEFINE_MACHINE("SS-20", ss20_machine_init) +static const TypeInfo ss20_type = { + .name = MACHINE_TYPE_NAME("SS-20"), + .parent = TYPE_MACHINE, + .class_init = ss20_class_init, +}; -static void voyager_machine_init(MachineClass *mc) +static void voyager_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation Voyager"; mc->init = vger_init; mc->block_default_type = IF_SCSI; mc->default_boot_order = "c"; } -DEFINE_MACHINE("Voyager", voyager_machine_init) +static const TypeInfo voyager_type = { + .name = MACHINE_TYPE_NAME("Voyager"), + .parent = TYPE_MACHINE, + .class_init = voyager_class_init, +}; -static void ss_lx_machine_init(MachineClass *mc) +static void ss_lx_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation LX"; mc->init = ss_lx_init; mc->block_default_type = IF_SCSI; mc->default_boot_order = "c"; } -DEFINE_MACHINE("LX", ss_lx_machine_init) +static const TypeInfo ss_lx_type = { + .name = MACHINE_TYPE_NAME("LX"), + .parent = TYPE_MACHINE, + .class_init = ss_lx_class_init, +}; -static void ss4_machine_init(MachineClass *mc) +static void ss4_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCstation 4"; mc->init = ss4_init; mc->block_default_type = IF_SCSI; mc->default_boot_order = "c"; } -DEFINE_MACHINE("SS-4", ss4_machine_init) +static const TypeInfo ss4_type = { + .name = MACHINE_TYPE_NAME("SS-4"), + .parent = TYPE_MACHINE, + .class_init = ss4_class_init, +}; -static void scls_machine_init(MachineClass *mc) +static void scls_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCClassic"; mc->init = scls_init; mc->block_default_type = IF_SCSI; mc->default_boot_order = "c"; } -DEFINE_MACHINE("SPARCClassic", scls_machine_init) +static const TypeInfo scls_type = { + .name = MACHINE_TYPE_NAME("SPARCClassic"), + .parent = TYPE_MACHINE, + .class_init = scls_class_init, +}; -static void sbook_machine_init(MachineClass *mc) +static void sbook_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4m platform, SPARCbook"; mc->init = sbook_init; mc->block_default_type = IF_SCSI; mc->default_boot_order = "c"; } -DEFINE_MACHINE("SPARCbook", sbook_machine_init) +static const TypeInfo sbook_type = { + .name = MACHINE_TYPE_NAME("SPARCbook"), + .parent = TYPE_MACHINE, + .class_init = sbook_class_init, +}; static void sun4m_register_types(void) { @@ -1522,4 +1576,18 @@ static void sun4m_register_types(void) type_register_static(&ram_info); } +static void sun4m_machine_init(void) +{ + type_register_static(&ss5_type); + type_register_static(&ss10_type); + type_register_static(&ss600mp_type); + type_register_static(&ss20_type); + type_register_static(&voyager_type); + type_register_static(&ss_lx_type); + type_register_static(&ss4_type); + type_register_static(&scls_type); + type_register_static(&sbook_type); +} + type_init(sun4m_register_types) +machine_init(sun4m_machine_init) diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index ab43dc65af..a6b59572fc 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -965,8 +965,10 @@ static void niagara_init(MachineState *machine) sun4uv_init(get_system_memory(), machine, &hwdefs[2]); } -static void sun4u_machine_init(MachineClass *mc) +static void sun4u_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4u platform"; mc->init = sun4u_init; mc->max_cpus = 1; /* XXX for now */ @@ -974,27 +976,43 @@ static void sun4u_machine_init(MachineClass *mc) mc->default_boot_order = "c"; } -DEFINE_MACHINE("sun4u", sun4u_machine_init) +static const TypeInfo sun4u_type = { + .name = MACHINE_TYPE_NAME("sun4u"), + .parent = TYPE_MACHINE, + .class_init = sun4u_class_init, +}; -static void sun4v_machine_init(MachineClass *mc) +static void sun4v_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4v platform"; mc->init = sun4v_init; mc->max_cpus = 1; /* XXX for now */ mc->default_boot_order = "c"; } -DEFINE_MACHINE("sun4v", sun4v_machine_init) +static const TypeInfo sun4v_type = { + .name = MACHINE_TYPE_NAME("sun4v"), + .parent = TYPE_MACHINE, + .class_init = sun4v_class_init, +}; -static void niagara_machine_init(MachineClass *mc) +static void niagara_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "Sun4v platform, Niagara"; mc->init = niagara_init; mc->max_cpus = 1; /* XXX for now */ mc->default_boot_order = "c"; } -DEFINE_MACHINE("Niagara", niagara_machine_init) +static const TypeInfo niagara_type = { + .name = MACHINE_TYPE_NAME("Niagara"), + .parent = TYPE_MACHINE, + .class_init = niagara_class_init, +}; static void sun4u_register_types(void) { @@ -1003,4 +1021,12 @@ static void sun4u_register_types(void) type_register_static(&ram_info); } +static void sun4u_machine_init(void) +{ + type_register_static(&sun4u_type); + type_register_static(&sun4v_type); + type_register_static(&niagara_type); +} + type_init(sun4u_register_types) +machine_init(sun4u_machine_init) diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index d6ddfa1bba..7aca1cf9da 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -428,38 +428,72 @@ static void xtensa_kc705_init(MachineState *machine) lx_init(&kc705_board, machine); } -static void xtensa_lx60_machine_init(MachineClass *mc) +static void xtensa_lx60_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; mc->init = xtensa_lx60_init; mc->max_cpus = 4; } -DEFINE_MACHINE("lx60", xtensa_lx60_machine_init) +static const TypeInfo xtensa_lx60_type = { + .name = MACHINE_TYPE_NAME("lx60"), + .parent = TYPE_MACHINE, + .class_init = xtensa_lx60_class_init, +}; -static void xtensa_lx200_machine_init(MachineClass *mc) +static void xtensa_lx200_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; mc->init = xtensa_lx200_init; mc->max_cpus = 4; } -DEFINE_MACHINE("lx200", xtensa_lx200_machine_init) +static const TypeInfo xtensa_lx200_type = { + .name = MACHINE_TYPE_NAME("lx200"), + .parent = TYPE_MACHINE, + .class_init = xtensa_lx200_class_init, +}; -static void xtensa_ml605_machine_init(MachineClass *mc) +static void xtensa_ml605_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; mc->init = xtensa_ml605_init; mc->max_cpus = 4; } -DEFINE_MACHINE("ml605", xtensa_ml605_machine_init) +static const TypeInfo xtensa_ml605_type = { + .name = MACHINE_TYPE_NAME("ml605"), + .parent = TYPE_MACHINE, + .class_init = xtensa_ml605_class_init, +}; -static void xtensa_kc705_machine_init(MachineClass *mc) +static void xtensa_kc705_class_init(ObjectClass *oc, void *data) { + MachineClass *mc = MACHINE_CLASS(oc); + mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")"; mc->init = xtensa_kc705_init; mc->max_cpus = 4; } -DEFINE_MACHINE("kc705", xtensa_kc705_machine_init) +static const TypeInfo xtensa_kc705_type = { + .name = MACHINE_TYPE_NAME("kc705"), + .parent = TYPE_MACHINE, + .class_init = xtensa_kc705_class_init, +}; + +static void xtensa_lx_machines_init(void) +{ + type_register_static(&xtensa_lx60_type); + type_register_static(&xtensa_lx200_type); + type_register_static(&xtensa_ml605_type); + type_register_static(&xtensa_kc705_type); +} + +machine_init(xtensa_lx_machines_init) From 3b53e45f43825caaaf4fad6a5b85ce6a9949ff02 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Fri, 4 Sep 2015 15:37:09 -0300 Subject: [PATCH 21/21] machine: Eliminate QEMUMachine and qemu_register_machine() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The struct is not used anymore and can be eliminated. Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- include/hw/boards.h | 27 --------------------------- include/qemu/typedefs.h | 1 - include/sysemu/blockdev.h | 2 +- include/sysemu/sysemu.h | 2 +- vl.c | 36 ------------------------------------ 5 files changed, 2 insertions(+), 66 deletions(-) diff --git a/include/hw/boards.h b/include/hw/boards.h index 4fe2ce5235..3e9a92c055 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -9,36 +9,10 @@ #include "hw/qdev.h" #include "qom/object.h" - -typedef void QEMUMachineInitFunc(MachineState *ms); - -typedef void QEMUMachineResetFunc(void); - -typedef void QEMUMachineHotAddCPUFunc(const int64_t id, Error **errp); - -typedef int QEMUMachineGetKvmtypeFunc(const char *arg); - -struct QEMUMachine { - const char *name; - const char *desc; - QEMUMachineInitFunc *init; - QEMUMachineGetKvmtypeFunc *kvm_type; - BlockInterfaceType block_default_type; - int max_cpus; - unsigned int - no_sdcard:1, - has_dynamic_sysbus:1; - int is_default; - const char *default_machine_opts; - const char *default_boot_order; -}; - void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner, const char *name, uint64_t ram_size); -int qemu_register_machine(QEMUMachine *m); - #define TYPE_MACHINE_SUFFIX "-machine" /* Machine class name that needs to be used for class-name-based machine @@ -69,7 +43,6 @@ bool machine_mem_merge(MachineState *machine); /** * MachineClass: - * @qemu_machine: #QEMUMachine * @get_hotplug_handler: this function is called during bus-less * device hotplug. If defined it returns pointer to an instance * of HotplugHandler object, which handles hotplug operation diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index 97ac727476..ce82c642b5 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -67,7 +67,6 @@ typedef struct Property Property; typedef struct QEMUBH QEMUBH; typedef struct QemuConsole QemuConsole; typedef struct QEMUFile QEMUFile; -typedef struct QEMUMachine QEMUMachine; typedef struct QEMUSGList QEMUSGList; typedef struct QEMUSizedBuffer QEMUSizedBuffer; typedef struct QEMUTimerListGroup QEMUTimerListGroup; diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h index 310415025c..a00be94895 100644 --- a/include/sysemu/blockdev.h +++ b/include/sysemu/blockdev.h @@ -20,7 +20,7 @@ void blockdev_auto_del(BlockBackend *blk); typedef enum { IF_DEFAULT = -1, /* for use with drive_add() only */ /* - * IF_IDE must be zero, because we want QEMUMachine member + * IF_IDE must be zero, because we want MachineClass member * block_default_type to default-initialize to IF_IDE */ IF_IDE = 0, diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 1f6ff8f948..c439975139 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -195,7 +195,7 @@ void device_add_bootindex_property(Object *obj, int32_t *bootindex, void restore_boot_order(void *opaque); void validate_bootdevices(const char *devices, Error **errp); -/* handler to set the boot_device order for a specific type of QEMUMachine */ +/* handler to set the boot_device order for a specific type of MachineClass */ typedef void QEMUBootSetHandler(void *opaque, const char *boot_order, Error **errp); void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque); diff --git a/vl.c b/vl.c index 3b926351f1..e211f6aa36 100644 --- a/vl.c +++ b/vl.c @@ -1429,42 +1429,6 @@ void hmp_usb_del(Monitor *mon, const QDict *qdict) MachineState *current_machine; -/* - * Transitional class registration/init used for converting from - * legacy QEMUMachine to MachineClass. - */ -static void qemu_machine_class_init(ObjectClass *oc, void *data) -{ - MachineClass *mc = MACHINE_CLASS(oc); - QEMUMachine *qm = data; - mc->desc = qm->desc; - mc->init = qm->init; - mc->kvm_type = qm->kvm_type; - mc->block_default_type = qm->block_default_type; - mc->max_cpus = qm->max_cpus; - mc->no_sdcard = qm->no_sdcard; - mc->has_dynamic_sysbus = qm->has_dynamic_sysbus; - mc->is_default = qm->is_default; - mc->default_machine_opts = qm->default_machine_opts; - mc->default_boot_order = qm->default_boot_order; -} - -int qemu_register_machine(QEMUMachine *m) -{ - char *name = g_strdup_printf(MACHINE_TYPE_NAME("%s"), m->name); - TypeInfo ti = { - .name = name, - .parent = TYPE_MACHINE, - .class_init = qemu_machine_class_init, - .class_data = (void *)m, - }; - - type_register(&ti); - g_free(name); - - return 0; -} - static MachineClass *find_machine(const char *name) { GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);