123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * Host IOMMU device abstract declaration
- *
- * Copyright (C) 2024 Intel Corporation.
- *
- * Authors: Zhenzhong Duan <zhenzhong.duan@intel.com>
- *
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
- */
- #ifndef HOST_IOMMU_DEVICE_H
- #define HOST_IOMMU_DEVICE_H
- #include "qom/object.h"
- #include "qapi/error.h"
- /**
- * struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
- *
- * @type: host platform IOMMU type.
- *
- * @hw_caps: host platform IOMMU capabilities (e.g. on IOMMUFD this represents
- * the @out_capabilities value returned from IOMMU_GET_HW_INFO ioctl)
- */
- typedef struct HostIOMMUDeviceCaps {
- uint32_t type;
- uint64_t hw_caps;
- } HostIOMMUDeviceCaps;
- #define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
- OBJECT_DECLARE_TYPE(HostIOMMUDevice, HostIOMMUDeviceClass, HOST_IOMMU_DEVICE)
- struct HostIOMMUDevice {
- Object parent_obj;
- char *name;
- void *agent; /* pointer to agent device, ie. VFIO or VDPA device */
- PCIBus *aliased_bus;
- int aliased_devfn;
- HostIOMMUDeviceCaps caps;
- };
- /**
- * struct HostIOMMUDeviceClass - The base class for all host IOMMU devices.
- *
- * Different types of host devices (e.g., VFIO or VDPA device) or devices
- * with different backend (e.g., VFIO legacy container or IOMMUFD backend)
- * will have different implementations of the HostIOMMUDeviceClass.
- */
- struct HostIOMMUDeviceClass {
- ObjectClass parent_class;
- /**
- * @realize: initialize host IOMMU device instance further.
- *
- * Mandatory callback.
- *
- * @hiod: pointer to a host IOMMU device instance.
- *
- * @opaque: pointer to agent device of this host IOMMU device,
- * e.g., VFIO base device or VDPA device.
- *
- * @errp: pass an Error out when realize fails.
- *
- * 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);
- /**
- * @get_iova_ranges: Return the list of usable iova_ranges along with
- * @hiod Host IOMMU device
- *
- * @hiod: handle to the host IOMMU device
- */
- GList* (*get_iova_ranges)(HostIOMMUDevice *hiod);
- /**
- *
- * @get_page_size_mask: Return the page size mask supported along this
- * @hiod Host IOMMU device
- *
- * @hiod: handle to the host IOMMU device
- */
- uint64_t (*get_page_size_mask)(HostIOMMUDevice *hiod);
- };
- /*
- * 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
|