On 2/6/26 3:48 PM, Shameer Kolothum wrote:
> 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;
effectively looks duplucate, check !cmdqv_ops ?
Eric
> } SMMUv3AccelState;
>
> typedef struct SMMUS1Hwpt {