@samitouri / QOSamiQemu / commits / d20af87fda

hw/loongarch/virt: Define versioned virt machine

Add versioned virt machine started from QEMU 11.1 Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>

Bibo Mao committed Apr 1, 2026 at 09:57 UTC d20af87fdaa93672ca951a14131209147346040a
1 file changed +37
hw/loongarch/virt.c
+37
@@ -1535,9 +1535,41 @@ static void virt_class_init(ObjectClass *oc, const void *data)
1535 "for PCI MMIO");
1536 }
1537
1538 +#define DEFINE_VIRT_MACHINE_VERSION(latest, ...) \
1539 + static void MACHINE_VER_SYM(class_init, virt, __VA_ARGS__)( \
1540 + ObjectClass *oc, \
1541 + const void *data) \
1542 + { \
1543 + MachineClass *mc = MACHINE_CLASS(oc); \
1544 + MACHINE_VER_SYM(options, virt, __VA_ARGS__)(mc); \
1545 + mc->desc = "QEMU " MACHINE_VER_STR(__VA_ARGS__) " LoongArch Virtual Machine"; \
1546 + MACHINE_VER_DEPRECATION(__VA_ARGS__); \
1547 + if (latest) { \
1548 + mc->alias = "virt"; \
1549 + } \
1550 + } \
1551 + static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) = \
1552 + { \
1553 + .name = MACHINE_VER_TYPE_NAME("virt", __VA_ARGS__), \
1554 + .parent = TYPE_LOONGARCH_VIRT_MACHINE, \
1555 + .class_init = MACHINE_VER_SYM(class_init, virt, __VA_ARGS__), \
1556 + }; \
1557 + static void MACHINE_VER_SYM(register, virt, __VA_ARGS__)(void) \
1558 + { \
1559 + MACHINE_VER_DELETION(__VA_ARGS__); \
1560 + type_register_static(&MACHINE_VER_SYM(info, virt, __VA_ARGS__)); \
1561 + } \
1562 + type_init(MACHINE_VER_SYM(register, virt, __VA_ARGS__));
1563 +
1564 +#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \
1565 + DEFINE_VIRT_MACHINE_VERSION(true, major, minor)
1566 +#define DEFINE_VIRT_MACHINE(major, minor) \
1567 + DEFINE_VIRT_MACHINE_VERSION(false, major, minor)
1568 +
1569 static const TypeInfo virt_machine_info = {
1570 .name = TYPE_LOONGARCH_VIRT_MACHINE,
1571 .parent = TYPE_MACHINE,
1572 + .abstract = true,
1573 .instance_size = sizeof(LoongArchVirtMachineState),
1574 .class_init = virt_class_init,
1575 .instance_init = virt_initfn,
@@ -1553,3 +1585,8 @@ static void machvirt_machine_init(void)
1585 }
1586
1587 type_init(machvirt_machine_init);
1588 +
1589 +static void virt_machine_11_1_options(MachineClass *mc)
1590 +{
1591 +}
1592 +DEFINE_VIRT_MACHINE_AS_LATEST(11, 1)