CMDQ-Virtualization (CMDQV) is a hardware extension to SMMUv3 that enables
virtualization of multiple command queues (VCMDQs).
CMDQV support is a specialization of the IOMMUFD backed accelerated
SMMUv3 path. Introduce an ops interface to factor CMDQV specific
initialization and CMDQV vIOMMU/vEVENTQ allocation behavior out of
the base implementation. The ops pointer and associated state are
stored in the accelerated SMMUv3 state.
No functional change
Signed-off-by: Shameer Kolothum <skolothumtho@nvidia.com>
---
hw/arm/smmuv3-accel.h | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h
index c9c10e55c3..ca087240e5 100644
--- a/hw/arm/smmuv3-accel.h
+++ b/hw/arm/smmuv3-accel.h
@@ -16,6 +16,23 @@
#endif
#include CONFIG_DEVICES
+/*
+ * CMDQ-Virtualization (CMDQV) hardware support, extends the SMMUv3 to
+ * support multiple VCMDQs with virtualization capabilities.
+ * CMDQV specific behavior is factored behind this ops interface.
+ */
+typedef struct SMMUv3AccelCmdqvOps {
+ bool (*init)(SMMUv3State *s, Error **errp);
+ bool (*alloc_viommu)(SMMUv3State *s,
+ HostIOMMUDeviceIOMMUFD *idev,
+ uint32_t *out_viommu_id,
+ Error **errp);
+ void (*free_viommu)(SMMUv3State *s);
+ bool (*alloc_veventq)(SMMUv3State *s, Error **errp);
+ void (*free_veventq)(SMMUv3State *s);
+ void (*reset)(SMMUv3State *s);
+} SMMUv3AccelCmdqvOps;
+
/*
* Represents an accelerated SMMU instance backed by an iommufd vIOMMU object.
* Holds bypass and abort proxy HWPT IDs used for device attachment.
@@ -28,6 +45,8 @@ typedef struct SMMUv3AccelState {
uint32_t bypass_hwpt_id;
uint32_t abort_hwpt_id;
QLIST_HEAD(, SMMUv3AccelDevice) device_list;
+ const SMMUv3AccelCmdqvOps *cmdqv_ops;
+ void *cmdqv;
} SMMUv3AccelState;
typedef struct SMMUS1Hwpt {
--
2.43.0