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; 351bb141edSDiana Craciun void __iomem *ioaddr; 36df747bcdSDiana Craciun }; 37df747bcdSDiana Craciun 38fb1ff4c1SBharat Bhushan struct vfio_fsl_mc_device { 39fb1ff4c1SBharat Bhushan struct fsl_mc_device *mc_dev; 40704f5082SDiana Craciun struct notifier_block nb; 41df747bcdSDiana Craciun int refcnt; 42df747bcdSDiana Craciun struct vfio_fsl_mc_region *regions; 43f2ba7e8cSDiana Craciun struct vfio_fsl_mc_reflck *reflck; 442e0d2956SDiana Craciun struct mutex igate; 45cc0ee20bSDiana Craciun struct vfio_fsl_mc_irq *mc_irqs; 46fb1ff4c1SBharat Bhushan }; 47fb1ff4c1SBharat Bhushan 482e0d2956SDiana Craciun extern int vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev, 492e0d2956SDiana Craciun u32 flags, unsigned int index, 502e0d2956SDiana Craciun unsigned int start, unsigned int count, 512e0d2956SDiana Craciun void *data); 522e0d2956SDiana Craciun 53cc0ee20bSDiana Craciun void vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev); 54cc0ee20bSDiana Craciun 55fb1ff4c1SBharat Bhushan #endif /* VFIO_FSL_MC_PRIVATE_H */ 56