vfio/iommufd: Implement HostIOMMUDeviceClass::realize() handler
It calls iommufd_backend_get_device_info() to get host IOMMU related information and translate it into HostIOMMUDeviceCaps for query with .get_cap(). For aw_bits, use the same way as legacy backend by calling vfio_device_get_aw_bits() which is common for different vendor IOMMU. Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
42965386ea
commit
9305895201
@ -619,6 +619,35 @@ static void vfio_iommu_iommufd_class_init(ObjectClass *klass, void *data)
|
|||||||
vioc->pci_hot_reset = iommufd_cdev_pci_hot_reset;
|
vioc->pci_hot_reset = iommufd_cdev_pci_hot_reset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
VFIODevice *vdev = opaque;
|
||||||
|
HostIOMMUDeviceCaps *caps = &hiod->caps;
|
||||||
|
enum iommu_hw_info_type type;
|
||||||
|
union {
|
||||||
|
struct iommu_hw_info_vtd vtd;
|
||||||
|
} data;
|
||||||
|
|
||||||
|
if (!iommufd_backend_get_device_info(vdev->iommufd, vdev->devid,
|
||||||
|
&type, &data, sizeof(data), errp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
hiod->name = g_strdup(vdev->name);
|
||||||
|
caps->type = type;
|
||||||
|
caps->aw_bits = vfio_device_get_aw_bits(vdev);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hiod_iommufd_vfio_class_init(ObjectClass *oc, void *data)
|
||||||
|
{
|
||||||
|
HostIOMMUDeviceClass *hiodc = HOST_IOMMU_DEVICE_CLASS(oc);
|
||||||
|
|
||||||
|
hiodc->realize = hiod_iommufd_vfio_realize;
|
||||||
|
};
|
||||||
|
|
||||||
static const TypeInfo types[] = {
|
static const TypeInfo types[] = {
|
||||||
{
|
{
|
||||||
.name = TYPE_VFIO_IOMMU_IOMMUFD,
|
.name = TYPE_VFIO_IOMMU_IOMMUFD,
|
||||||
@ -627,6 +656,7 @@ static const TypeInfo types[] = {
|
|||||||
}, {
|
}, {
|
||||||
.name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO,
|
.name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO,
|
||||||
.parent = TYPE_HOST_IOMMU_DEVICE_IOMMUFD,
|
.parent = TYPE_HOST_IOMMU_DEVICE_IOMMUFD,
|
||||||
|
.class_init = hiod_iommufd_vfio_class_init,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user