@samitouri / QOSamiQemu / commits / 40838c8251

hw/riscv: Add macros and globals for simplifying machine definitions

Adds macros and global interfaces for defining machines available only in qemu-system-riscv32, qemu-system-riscv64, or both. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Anton Johansson <anjo@rev.ng> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20260520-hw-riscv-cpu-int-v3-3-d1123ea63d9c@rev.ng> [PMD: Constify InterfaceInfo] Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Anton Johansson committed Apr 30, 2025 at 13:44 UTC 40838c8251953a8f4a97af9f1dcc03a5eb0def41
2 files changed +44 -1
include/hw/riscv/machines-qom.h
+26
@@ -17,4 +17,30 @@
17 #define TYPE_TARGET_RISCV64_MACHINE \
18 "target-info-riscv64-machine"
19
20 +/*
21 + * Interfaces specifying whether a given QOM object is available in
22 + * qemu-system-riscv32, qemu-system-riscv64, or both.
23 + */
24 +
25 +extern const InterfaceInfo riscv32_machine_interfaces[];
26 +extern const InterfaceInfo riscv64_machine_interfaces[];
27 +extern const InterfaceInfo riscv32_64_machine_interfaces[];
28 +
29 +/*
30 + * Helper macros for defining machines available in qemu-system-riscv32,
31 + * qemu-system-riscv64, or both.
32 + */
33 +
34 +#define DEFINE_MACHINE_RISCV32(namestr, machine_initfn) \
35 + DEFINE_MACHINE_WITH_INTERFACE_ARRAY(namestr, machine_initfn, \
36 + riscv32_machine_interfaces)
37 +
38 +#define DEFINE_MACHINE_RISCV64(namestr, machine_initfn) \
39 + DEFINE_MACHINE_WITH_INTERFACE_ARRAY(namestr, machine_initfn, \
40 + riscv64_machine_interfaces)
41 +
42 +#define DEFINE_MACHINE_RISCV32_64(namestr, machine_initfn) \
43 + DEFINE_MACHINE_WITH_INTERFACE_ARRAY(namestr, machine_initfn, \
44 + riscv32_64_machine_interfaces)
45 +
46 #endif
target/riscv/machine.c
+18 -1
@@ -22,7 +22,8 @@
22 #include "system/kvm.h"
23 #include "migration/cpu.h"
24 #include "exec/icount.h"
25 -#include "debug.h"
25 +#include "target/riscv/debug.h"
26 +#include "hw/riscv/machines-qom.h"
27
28 static bool pmp_needed(void *opaque)
29 {
@@ -522,3 +523,19 @@ const VMStateDescription vmstate_riscv_cpu = {
523 NULL
524 }
525 };
526 +
527 +const InterfaceInfo riscv32_machine_interfaces[] = {
528 + { TYPE_TARGET_RISCV32_MACHINE },
529 + { }
530 +};
531 +
532 +const InterfaceInfo riscv64_machine_interfaces[] = {
533 + { TYPE_TARGET_RISCV64_MACHINE },
534 + { }
535 +};
536 +
537 +const InterfaceInfo riscv32_64_machine_interfaces[] = {
538 + { TYPE_TARGET_RISCV32_MACHINE },
539 + { TYPE_TARGET_RISCV64_MACHINE },
540 + { }
541 +};