mirror of https://github.com/xemu-project/xemu.git
backends/host_iommu_device: Introduce HostIOMMUDeviceCaps
HostIOMMUDeviceCaps's elements map to the host IOMMU's capabilities. Different platform IOMMU can support different elements. Currently only two elements, type and aw_bits, type hints the host platform IOMMU type, i.e., INTEL vtd, ARM smmu, etc; aw_bits hints host IOMMU address width. Introduce .get_cap() handler to check if HOST_IOMMU_DEVICE_CAP_XXX is supported. Suggested-by: Cédric Le Goater <clg@redhat.com> 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
1f94b21801
commit
38998c79a1
|
@ -15,6 +15,18 @@
|
|||
#include "qom/object.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
/**
|
||||
* struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
|
||||
*
|
||||
* @type: host platform IOMMU type.
|
||||
*
|
||||
* @aw_bits: host IOMMU address width. 0xff if no limitation.
|
||||
*/
|
||||
typedef struct HostIOMMUDeviceCaps {
|
||||
uint32_t type;
|
||||
uint8_t aw_bits;
|
||||
} HostIOMMUDeviceCaps;
|
||||
|
||||
#define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
|
||||
OBJECT_DECLARE_TYPE(HostIOMMUDevice, HostIOMMUDeviceClass, HOST_IOMMU_DEVICE)
|
||||
|
||||
|
@ -22,6 +34,7 @@ struct HostIOMMUDevice {
|
|||
Object parent_obj;
|
||||
|
||||
char *name;
|
||||
HostIOMMUDeviceCaps caps;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -49,5 +62,30 @@ struct HostIOMMUDeviceClass {
|
|||
* Returns: true on success, false on failure.
|
||||
*/
|
||||
bool (*realize)(HostIOMMUDevice *hiod, void *opaque, Error **errp);
|
||||
/**
|
||||
* @get_cap: check if a host IOMMU device capability is supported.
|
||||
*
|
||||
* Optional callback, if not implemented, hint not supporting query
|
||||
* of @cap.
|
||||
*
|
||||
* @hiod: pointer to a host IOMMU device instance.
|
||||
*
|
||||
* @cap: capability to check.
|
||||
*
|
||||
* @errp: pass an Error out when fails to query capability.
|
||||
*
|
||||
* Returns: <0 on failure, 0 if a @cap is unsupported, or else
|
||||
* 1 or some positive value for some special @cap,
|
||||
* i.e., HOST_IOMMU_DEVICE_CAP_AW_BITS.
|
||||
*/
|
||||
int (*get_cap)(HostIOMMUDevice *hiod, int cap, Error **errp);
|
||||
};
|
||||
|
||||
/*
|
||||
* Host IOMMU device capability list.
|
||||
*/
|
||||
#define HOST_IOMMU_DEVICE_CAP_IOMMU_TYPE 0
|
||||
#define HOST_IOMMU_DEVICE_CAP_AW_BITS 1
|
||||
|
||||
#define HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX 64
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue