In the next commits, We'll replace the logic to filter QOM types per
target from a static one (based on INTERFACES) to a runtime one, based
on is_available() function, that can be overriden per class.

Introduce the new interface we'll use for that.

Signed-off-by: Pierrick Bouvier <[email protected]>
---
 include/qemu/target-info-qom.h | 15 +++++++++++++++
 target-info-qom.c              |  5 +++++
 2 files changed, 20 insertions(+)

diff --git a/include/qemu/target-info-qom.h b/include/qemu/target-info-qom.h
index 91be415ed33..83eb537333b 100644
--- a/include/qemu/target-info-qom.h
+++ b/include/qemu/target-info-qom.h
@@ -14,6 +14,21 @@
 
 #define TYPE_TARGET_INFO "target-info"
 
+#define TYPE_TARGET_SPECIFIC "target-specific"
+
+typedef struct TargetSpecific TargetSpecific;
+
+typedef struct TargetSpecificClass {
+    InterfaceClass parent_class;
+
+    bool (*is_available)(void);
+} TargetSpecificClass;
+
+#define TARGET_SPECIFIC(obj) \
+    INTERFACE_CHECK(TargetSpecific, (obj), TYPE_TARGET_SPECIFIC)
+DECLARE_CLASS_CHECKERS(TargetSpecificClass, TARGET_SPECIFIC,
+                       TYPE_TARGET_SPECIFIC)
+
 typedef struct TargetInfoQom {
     Object parent_obj;
 } TargetInfoQom;
diff --git a/target-info-qom.c b/target-info-qom.c
index 7958a5cc685..1388691657c 100644
--- a/target-info-qom.c
+++ b/target-info-qom.c
@@ -16,6 +16,11 @@
 #include "hw/riscv/machines-qom.h"
 
 static const TypeInfo target_info_types[] = {
+    {
+        .name           = TYPE_TARGET_SPECIFIC,
+        .parent         = TYPE_INTERFACE,
+        .class_size     = sizeof(TargetSpecificClass),
+    },
     {
         .name           = TYPE_TARGET_ARM_MACHINE,
         .parent         = TYPE_INTERFACE,
-- 
2.43.0


Reply via email to