diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index a69856f55a..c126e10fa4 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2301,9 +2301,53 @@ static const TypeInfo spapr_machine_info = { }, }; +/* + * pseries-2.5 + */ +static void spapr_machine_2_5_class_init(ObjectClass *oc, void *data) +{ + MachineClass *mc = MACHINE_CLASS(oc); + sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc); + + mc->desc = "pSeries Logical Partition (PAPR compliant) v2.5"; + mc->alias = "pseries"; + mc->is_default = 1; + smc->dr_lmb_enabled = true; +} + +static const TypeInfo spapr_machine_2_5_info = { + .name = MACHINE_TYPE_NAME("pseries-2.5"), + .parent = TYPE_SPAPR_MACHINE, + .class_init = spapr_machine_2_5_class_init, +}; + +/* + * pseries-2.4 + */ #define SPAPR_COMPAT_2_4 \ HW_COMPAT_2_4 +static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data) +{ + static GlobalProperty compat_props[] = { + SPAPR_COMPAT_2_4 + { /* end of list */ } + }; + MachineClass *mc = MACHINE_CLASS(oc); + + mc->desc = "pSeries Logical Partition (PAPR compliant) v2.4"; + mc->compat_props = compat_props; +} + +static const TypeInfo spapr_machine_2_4_info = { + .name = MACHINE_TYPE_NAME("pseries-2.4"), + .parent = TYPE_SPAPR_MACHINE, + .class_init = spapr_machine_2_4_class_init, +}; + +/* + * pseries-2.3 + */ #define SPAPR_COMPAT_2_3 \ SPAPR_COMPAT_2_4 \ HW_COMPAT_2_3 \ @@ -2313,6 +2357,41 @@ static const TypeInfo spapr_machine_info = { .value = "off",\ }, +static void spapr_compat_2_3(Object *obj) +{ + savevm_skip_section_footers(); + global_state_set_optional(); +} + +static void spapr_machine_2_3_instance_init(Object *obj) +{ + spapr_compat_2_3(obj); + spapr_machine_initfn(obj); +} + +static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data) +{ + static GlobalProperty compat_props[] = { + SPAPR_COMPAT_2_3 + { /* end of list */ } + }; + MachineClass *mc = MACHINE_CLASS(oc); + + mc->desc = "pSeries Logical Partition (PAPR compliant) v2.3"; + mc->compat_props = compat_props; +} + +static const TypeInfo spapr_machine_2_3_info = { + .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, +}; + +/* + * pseries-2.2 + */ + #define SPAPR_COMPAT_2_2 \ SPAPR_COMPAT_2_3 \ HW_COMPAT_2_2 \ @@ -2322,38 +2401,48 @@ static const TypeInfo spapr_machine_info = { .value = "0x20000000",\ }, -#define SPAPR_COMPAT_2_1 \ - SPAPR_COMPAT_2_2 \ - HW_COMPAT_2_1 - -static void spapr_compat_2_3(Object *obj) -{ - savevm_skip_section_footers(); - global_state_set_optional(); -} - static void spapr_compat_2_2(Object *obj) { spapr_compat_2_3(obj); } -static void spapr_compat_2_1(Object *obj) -{ - spapr_compat_2_2(obj); -} - -static void spapr_machine_2_3_instance_init(Object *obj) -{ - spapr_compat_2_3(obj); - spapr_machine_initfn(obj); -} - static void spapr_machine_2_2_instance_init(Object *obj) { spapr_compat_2_2(obj); spapr_machine_initfn(obj); } +static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data) +{ + static GlobalProperty compat_props[] = { + SPAPR_COMPAT_2_2 + { /* end of list */ } + }; + MachineClass *mc = MACHINE_CLASS(oc); + + mc->desc = "pSeries Logical Partition (PAPR compliant) v2.2"; + mc->compat_props = compat_props; +} + +static const TypeInfo spapr_machine_2_2_info = { + .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, +}; + +/* + * pseries-2.1 + */ +#define SPAPR_COMPAT_2_1 \ + SPAPR_COMPAT_2_2 \ + HW_COMPAT_2_1 + +static void spapr_compat_2_1(Object *obj) +{ + spapr_compat_2_2(obj); +} + static void spapr_machine_2_1_instance_init(Object *obj) { spapr_compat_2_1(obj); @@ -2379,79 +2468,6 @@ static const TypeInfo spapr_machine_2_1_info = { .instance_init = spapr_machine_2_1_instance_init, }; -static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data) -{ - static GlobalProperty compat_props[] = { - SPAPR_COMPAT_2_2 - { /* end of list */ } - }; - MachineClass *mc = MACHINE_CLASS(oc); - - mc->desc = "pSeries Logical Partition (PAPR compliant) v2.2"; - mc->compat_props = compat_props; -} - -static const TypeInfo spapr_machine_2_2_info = { - .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, -}; - -static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data) -{ - static GlobalProperty compat_props[] = { - SPAPR_COMPAT_2_3 - { /* end of list */ } - }; - MachineClass *mc = MACHINE_CLASS(oc); - - mc->desc = "pSeries Logical Partition (PAPR compliant) v2.3"; - mc->compat_props = compat_props; -} - -static const TypeInfo spapr_machine_2_3_info = { - .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, -}; - -static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data) -{ - static GlobalProperty compat_props[] = { - SPAPR_COMPAT_2_4 - { /* end of list */ } - }; - MachineClass *mc = MACHINE_CLASS(oc); - - mc->desc = "pSeries Logical Partition (PAPR compliant) v2.4"; - mc->compat_props = compat_props; -} - -static const TypeInfo spapr_machine_2_4_info = { - .name = MACHINE_TYPE_NAME("pseries-2.4"), - .parent = TYPE_SPAPR_MACHINE, - .class_init = spapr_machine_2_4_class_init, -}; - -static void spapr_machine_2_5_class_init(ObjectClass *oc, void *data) -{ - MachineClass *mc = MACHINE_CLASS(oc); - sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc); - - mc->desc = "pSeries Logical Partition (PAPR compliant) v2.5"; - mc->alias = "pseries"; - mc->is_default = 1; - smc->dr_lmb_enabled = true; -} - -static const TypeInfo spapr_machine_2_5_info = { - .name = MACHINE_TYPE_NAME("pseries-2.5"), - .parent = TYPE_SPAPR_MACHINE, - .class_init = spapr_machine_2_5_class_init, -}; - static void spapr_machine_register_types(void) { type_register_static(&spapr_machine_info);