#include <linux/file.h>
#include <linux/interval_tree.h>
#include <linux/iommu.h>
#include <linux/iommufd.h>
#include <linux/slab.h>
#include <linux/vfio.h>
#include <uapi/linux/vfio.h>
#include <uapi/linux/iommufd.h>
#include "iommufd_private.h"
static struct iommufd_ioas *get_compat_ioas(struct iommufd_ctx *ictx)
{ … }
int iommufd_vfio_compat_ioas_get_id(struct iommufd_ctx *ictx, u32 *out_ioas_id)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
int iommufd_vfio_compat_set_no_iommu(struct iommufd_ctx *ictx)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
int iommufd_vfio_compat_ioas_create(struct iommufd_ctx *ictx)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
int iommufd_vfio_ioas(struct iommufd_ucmd *ucmd)
{ … }
static int iommufd_vfio_map_dma(struct iommufd_ctx *ictx, unsigned int cmd,
void __user *arg)
{ … }
static int iommufd_vfio_unmap_dma(struct iommufd_ctx *ictx, unsigned int cmd,
void __user *arg)
{ … }
static int iommufd_vfio_cc_iommu(struct iommufd_ctx *ictx)
{ … }
static int iommufd_vfio_check_extension(struct iommufd_ctx *ictx,
unsigned long type)
{ … }
static int iommufd_vfio_set_iommu(struct iommufd_ctx *ictx, unsigned long type)
{ … }
static unsigned long iommufd_get_pagesizes(struct iommufd_ioas *ioas)
{ … }
static int iommufd_fill_cap_iova(struct iommufd_ioas *ioas,
struct vfio_info_cap_header __user *cur,
size_t avail)
{ … }
static int iommufd_fill_cap_dma_avail(struct iommufd_ioas *ioas,
struct vfio_info_cap_header __user *cur,
size_t avail)
{ … }
static int iommufd_vfio_iommu_get_info(struct iommufd_ctx *ictx,
void __user *arg)
{ … }
int iommufd_vfio_ioctl(struct iommufd_ctx *ictx, unsigned int cmd,
unsigned long arg)
{ … }