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 <[email protected]> --- 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
