92 lines
2.8 KiB
Diff
92 lines
2.8 KiB
Diff
|
|
From ca210a4a8fe97dd56baa184671bb48bff9a54ecb Mon Sep 17 00:00:00 2001
|
||
|
|
From: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
|
Date: Wed, 5 Jun 2024 16:30:28 +0800
|
||
|
|
Subject: [PATCH] backends/host_iommu_device: Introduce HostIOMMUDeviceCaps
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
HostIOMMUDeviceCaps's elements map to the host IOMMU's capabilities.
|
||
|
|
Different platform IOMMU can support different elements.
|
||
|
|
|
||
|
|
Currently only two elements, type and aw_bits, type hints the host
|
||
|
|
platform IOMMU type, i.e., INTEL vtd, ARM smmu, etc; aw_bits hints
|
||
|
|
host IOMMU address width.
|
||
|
|
|
||
|
|
Introduce .get_cap() handler to check if HOST_IOMMU_DEVICE_CAP_XXX
|
||
|
|
is supported.
|
||
|
|
|
||
|
|
Suggested-by: Cédric Le Goater <clg@redhat.com>
|
||
|
|
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
---
|
||
|
|
include/sysemu/host_iommu_device.h | 38 ++++++++++++++++++++++++++++++
|
||
|
|
1 file changed, 38 insertions(+)
|
||
|
|
|
||
|
|
diff --git a/include/sysemu/host_iommu_device.h b/include/sysemu/host_iommu_device.h
|
||
|
|
index db47a16189..a57873958b 100644
|
||
|
|
--- a/include/sysemu/host_iommu_device.h
|
||
|
|
+++ b/include/sysemu/host_iommu_device.h
|
||
|
|
@@ -15,6 +15,18 @@
|
||
|
|
#include "qom/object.h"
|
||
|
|
#include "qapi/error.h"
|
||
|
|
|
||
|
|
+/**
|
||
|
|
+ * struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
|
||
|
|
+ *
|
||
|
|
+ * @type: host platform IOMMU type.
|
||
|
|
+ *
|
||
|
|
+ * @aw_bits: host IOMMU address width. 0xff if no limitation.
|
||
|
|
+ */
|
||
|
|
+typedef struct HostIOMMUDeviceCaps {
|
||
|
|
+ uint32_t type;
|
||
|
|
+ uint8_t aw_bits;
|
||
|
|
+} HostIOMMUDeviceCaps;
|
||
|
|
+
|
||
|
|
#define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
|
||
|
|
OBJECT_DECLARE_TYPE(HostIOMMUDevice, HostIOMMUDeviceClass, HOST_IOMMU_DEVICE)
|
||
|
|
|
||
|
|
@@ -22,6 +34,7 @@ struct HostIOMMUDevice {
|
||
|
|
Object parent_obj;
|
||
|
|
|
||
|
|
char *name;
|
||
|
|
+ HostIOMMUDeviceCaps caps;
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
@@ -49,5 +62,30 @@ struct HostIOMMUDeviceClass {
|
||
|
|
* Returns: true on success, false on failure.
|
||
|
|
*/
|
||
|
|
bool (*realize)(HostIOMMUDevice *hiod, void *opaque, Error **errp);
|
||
|
|
+ /**
|
||
|
|
+ * @get_cap: check if a host IOMMU device capability is supported.
|
||
|
|
+ *
|
||
|
|
+ * Optional callback, if not implemented, hint not supporting query
|
||
|
|
+ * of @cap.
|
||
|
|
+ *
|
||
|
|
+ * @hiod: pointer to a host IOMMU device instance.
|
||
|
|
+ *
|
||
|
|
+ * @cap: capability to check.
|
||
|
|
+ *
|
||
|
|
+ * @errp: pass an Error out when fails to query capability.
|
||
|
|
+ *
|
||
|
|
+ * Returns: <0 on failure, 0 if a @cap is unsupported, or else
|
||
|
|
+ * 1 or some positive value for some special @cap,
|
||
|
|
+ * i.e., HOST_IOMMU_DEVICE_CAP_AW_BITS.
|
||
|
|
+ */
|
||
|
|
+ int (*get_cap)(HostIOMMUDevice *hiod, int cap, Error **errp);
|
||
|
|
};
|
||
|
|
+
|
||
|
|
+/*
|
||
|
|
+ * Host IOMMU device capability list.
|
||
|
|
+ */
|
||
|
|
+#define HOST_IOMMU_DEVICE_CAP_IOMMU_TYPE 0
|
||
|
|
+#define HOST_IOMMU_DEVICE_CAP_AW_BITS 1
|
||
|
|
+
|
||
|
|
+#define HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX 64
|
||
|
|
#endif
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|