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