0001
0002
0003
0004
0005
0006
0007 #ifndef VFIO_FSL_MC_PRIVATE_H
0008 #define VFIO_FSL_MC_PRIVATE_H
0009
0010 #define VFIO_FSL_MC_OFFSET_SHIFT 40
0011 #define VFIO_FSL_MC_OFFSET_MASK (((u64)(1) << VFIO_FSL_MC_OFFSET_SHIFT) - 1)
0012
0013 #define VFIO_FSL_MC_OFFSET_TO_INDEX(off) ((off) >> VFIO_FSL_MC_OFFSET_SHIFT)
0014
0015 #define VFIO_FSL_MC_INDEX_TO_OFFSET(index) \
0016 ((u64)(index) << VFIO_FSL_MC_OFFSET_SHIFT)
0017
0018 struct vfio_fsl_mc_irq {
0019 u32 flags;
0020 u32 count;
0021 struct eventfd_ctx *trigger;
0022 char *name;
0023 };
0024
0025 struct vfio_fsl_mc_region {
0026 u32 flags;
0027 u32 type;
0028 u64 addr;
0029 resource_size_t size;
0030 void __iomem *ioaddr;
0031 };
0032
0033 struct vfio_fsl_mc_device {
0034 struct vfio_device vdev;
0035 struct fsl_mc_device *mc_dev;
0036 struct notifier_block nb;
0037 struct vfio_fsl_mc_region *regions;
0038 struct mutex igate;
0039 struct vfio_fsl_mc_irq *mc_irqs;
0040 };
0041
0042 int vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev,
0043 u32 flags, unsigned int index,
0044 unsigned int start, unsigned int count,
0045 void *data);
0046
0047 void vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev);
0048
0049 #endif