From: Zhenzhong Duan <zhenzhong.duan@intel.com>
To: qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com,
eric.auger@redhat.com, mst@redhat.com, peterx@redhat.com,
jasowang@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com,
joao.m.martins@oracle.com, clement.mathieu--drif@eviden.com,
kevin.tian@intel.com, yi.l.liu@intel.com, chao.p.peng@intel.com,
Zhenzhong Duan <zhenzhong.duan@intel.com>
Subject: [PATCH v5 05/19] backends/host_iommu_device: Introduce HostIOMMUDeviceCaps
Date: Wed, 8 May 2024 17:03:40 +0800 [thread overview]
Message-ID: <20240508090354.1815561-6-zhenzhong.duan@intel.com> (raw)
In-Reply-To: <20240508090354.1815561-1-zhenzhong.duan@intel.com>
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.
Introduce a HostIOMMUDevice API host_iommu_device_get_cap() which
is a wrapper of .get_cap().
Suggested-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
---
include/sysemu/host_iommu_device.h | 40 ++++++++++++++++++++++++++++++
backends/host_iommu_device.c | 12 +++++++++
2 files changed, 52 insertions(+)
diff --git a/include/sysemu/host_iommu_device.h b/include/sysemu/host_iommu_device.h
index 2b58a94d62..ed4cbc967a 100644
--- a/include/sysemu/host_iommu_device.h
+++ b/include/sysemu/host_iommu_device.h
@@ -15,11 +15,25 @@
#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)
struct HostIOMMUDevice {
Object parent_obj;
+
+ HostIOMMUDeviceCaps caps;
};
/**
@@ -47,5 +61,31 @@ 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
+
+
+int host_iommu_device_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp);
#endif
diff --git a/backends/host_iommu_device.c b/backends/host_iommu_device.c
index 41f2fdce20..0fcc201af3 100644
--- a/backends/host_iommu_device.c
+++ b/backends/host_iommu_device.c
@@ -28,3 +28,15 @@ static void host_iommu_device_init(Object *obj)
static void host_iommu_device_finalize(Object *obj)
{
}
+
+/* Wrapper of HostIOMMUDeviceClass:get_cap */
+int host_iommu_device_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
+{
+ HostIOMMUDeviceClass *hiodc = HOST_IOMMU_DEVICE_GET_CLASS(hiod);
+ if (!hiodc->get_cap) {
+ error_setg(errp, ".get_cap() not implemented");
+ return -EINVAL;
+ }
+
+ return hiodc->get_cap(hiod, cap, errp);
+}
--
2.34.1
next prev parent reply other threads:[~2024-05-08 9:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-08 9:03 [PATCH v5 00/19] Add a host IOMMU device abstraction to check with vIOMMU Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 01/19] backends: Introduce HostIOMMUDevice abstract Zhenzhong Duan
2024-05-13 9:29 ` Cédric Le Goater
2024-05-13 10:28 ` Duan, Zhenzhong
2024-05-27 13:15 ` Cédric Le Goater
2024-05-08 9:03 ` [PATCH v5 02/19] vfio/container: Introduce TYPE_HOST_IOMMU_DEVICE_LEGACY_VFIO device Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 03/19] backends/iommufd: Introduce abstract TYPE_HOST_IOMMU_DEVICE_IOMMUFD device Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 04/19] vfio/iommufd: Introduce TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO device Zhenzhong Duan
2024-05-08 9:03 ` Zhenzhong Duan [this message]
2024-05-08 9:03 ` [PATCH v5 06/19] range: Introduce range_get_last_bit() Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 07/19] vfio/container: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 08/19] backends/iommufd: Introduce helper function iommufd_backend_get_device_info() Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 09/19] vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 10/19] vfio/container: Implement HostIOMMUDeviceClass::get_cap() handler Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 11/19] backends/iommufd: " Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 12/19] vfio: Introduce VFIOIOMMUClass::hiod_typename attribute Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 13/19] vfio: Create host IOMMU device instance Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 14/19] hw/pci: Introduce helper function pci_device_get_iommu_bus_devfn() Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 15/19] hw/pci: Introduce pci_device_[set|unset]_iommu_device() Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 16/19] vfio/pci: Pass HostIOMMUDevice to vIOMMU Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 17/19] intel_iommu: Extract out vtd_cap_init() to initialize cap/ecap Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 18/19] intel_iommu: Implement [set|unset]_iommu_device() callbacks Zhenzhong Duan
2024-05-08 9:03 ` [PATCH v5 19/19] intel_iommu: Check compatibility with host IOMMU capabilities Zhenzhong Duan
2024-05-27 13:18 ` Cédric Le Goater
2024-05-28 3:00 ` Duan, Zhenzhong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240508090354.1815561-6-zhenzhong.duan@intel.com \
--to=zhenzhong.duan@intel.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@intel.com \
--cc=clement.mathieu--drif@eviden.com \
--cc=clg@redhat.com \
--cc=eric.auger@redhat.com \
--cc=jasowang@redhat.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.com \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=nicolinc@nvidia.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).