1/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 2/* 3 * Copyright 2013-2016 Freescale Semiconductor Inc. 4 * Copyright 2016,2019-2020 NXP 5 */ 6 7#ifndef VFIO_FSL_MC_PRIVATE_H 8#define VFIO_FSL_MC_PRIVATE_H 9 10#define VFIO_FSL_MC_OFFSET_SHIFT 40 11#define VFIO_FSL_MC_OFFSET_MASK (((u64)(1) << VFIO_FSL_MC_OFFSET_SHIFT) - 1) 12 13#define VFIO_FSL_MC_OFFSET_TO_INDEX(off) ((off) >> VFIO_FSL_MC_OFFSET_SHIFT) 14 15#define VFIO_FSL_MC_INDEX_TO_OFFSET(index) \ 16 ((u64)(index) << VFIO_FSL_MC_OFFSET_SHIFT) 17 18struct vfio_fsl_mc_irq { 19 u32 flags; 20 u32 count; 21 struct eventfd_ctx *trigger; 22 char *name; 23}; 24 25struct vfio_fsl_mc_reflck { 26 struct kref kref; 27 struct mutex lock; 28}; 29 30struct vfio_fsl_mc_region { 31 u32 flags; 32 u32 type; 33 u64 addr; 34 resource_size_t size; 35 void __iomem *ioaddr; 36}; 37 38struct vfio_fsl_mc_device { 39 struct fsl_mc_device *mc_dev; 40 struct notifier_block nb; 41 int refcnt; 42 struct vfio_fsl_mc_region *regions; 43 struct vfio_fsl_mc_reflck *reflck; 44 struct mutex igate; 45 struct vfio_fsl_mc_irq *mc_irqs; 46}; 47 48extern int vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev, 49 u32 flags, unsigned int index, 50 unsigned int start, unsigned int count, 51 void *data); 52 53void vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev); 54 55#endif /* VFIO_FSL_MC_PRIVATE_H */ 56