mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 02:24:38 +00:00
backends/iommufd: Add get_pasid_info() callback
The get_pasid_info callback retrieves PASID capability information when the HostIOMMUDevice backend supports it. Currently, only the Linux IOMMUFD backend provides this information. This will be used by a subsequent patch to synthesize a PASID capability for vfio-pci devices behind a vIOMMU that supports PASID. Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Tested-by: Eric Auger <eric.auger@redhat.com> Tested-by: Zhangfei Gao <zhangfei.gao@linaro.org> Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Shameer Kolothum <skolothumtho@nvidia.com> Reviewed-by: Yi Liu <yi.l.liu@intel.com> Message-id: 20260126104342.253965-34-skolothumtho@nvidia.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
committed by
Peter Maydell
parent
550beca3d7
commit
22afd9d865
@@ -539,11 +539,28 @@ static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
static bool hiod_iommufd_get_pasid_info(HostIOMMUDevice *hiod,
|
||||
PasidInfo *pasid_info)
|
||||
{
|
||||
HostIOMMUDeviceCaps *caps = &hiod->caps;
|
||||
|
||||
if (!caps->max_pasid_log2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_assert(pasid_info);
|
||||
pasid_info->exec_perm = (caps->hw_caps & IOMMU_HW_CAP_PCI_PASID_EXEC);
|
||||
pasid_info->priv_mod = (caps->hw_caps & IOMMU_HW_CAP_PCI_PASID_PRIV);
|
||||
pasid_info->max_pasid_log2 = caps->max_pasid_log2;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void hiod_iommufd_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostIOMMUDeviceClass *hioc = HOST_IOMMU_DEVICE_CLASS(oc);
|
||||
|
||||
hioc->get_cap = hiod_iommufd_get_cap;
|
||||
hioc->get_pasid_info = hiod_iommufd_get_pasid_info;
|
||||
};
|
||||
|
||||
static const TypeInfo types[] = {
|
||||
|
||||
@@ -59,6 +59,12 @@ struct HostIOMMUDevice {
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct PasidInfo {
|
||||
bool exec_perm;
|
||||
bool priv_mod;
|
||||
uint8_t max_pasid_log2;
|
||||
} PasidInfo;
|
||||
|
||||
/**
|
||||
* struct HostIOMMUDeviceClass - The base class for all host IOMMU devices.
|
||||
*
|
||||
@@ -116,6 +122,17 @@ struct HostIOMMUDeviceClass {
|
||||
* @hiod: handle to the host IOMMU device
|
||||
*/
|
||||
uint64_t (*get_page_size_mask)(HostIOMMUDevice *hiod);
|
||||
/**
|
||||
* @get_pasid_info: Return the PASID information associated with the
|
||||
* @hiod Host IOMMU device.
|
||||
*
|
||||
* @hiod: handle to the host IOMMU device
|
||||
*
|
||||
* @pasid_info: If success, returns the PASID related information.
|
||||
*
|
||||
* Returns: true on success, false on failure.
|
||||
*/
|
||||
bool (*get_pasid_info)(HostIOMMUDevice *hiod, PasidInfo *pasid_info);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user