machine: DEFINE_MACHINE() macro
authorEduardo Habkost <ehabkost@redhat.com>
Fri, 4 Sep 2015 18:37:06 +0000 (15:37 -0300)
committerAndreas Färber <afaerber@suse.de>
Sat, 19 Sep 2015 14:40:06 +0000 (16:40 +0200)
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 <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
include/hw/boards.h

index 586f939a5730a6a296aaa507238ad86de76d7266..4fe2ce523535c8a239ab761b09f9cc3e2b520101 100644 (file)
@@ -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