18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright 2013-2016 Freescale Semiconductor Inc. 48c2ecf20Sopenharmony_ci * Copyright 2016,2019-2020 NXP 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef VFIO_FSL_MC_PRIVATE_H 88c2ecf20Sopenharmony_ci#define VFIO_FSL_MC_PRIVATE_H 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_SHIFT 40 118c2ecf20Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_MASK (((u64)(1) << VFIO_FSL_MC_OFFSET_SHIFT) - 1) 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_TO_INDEX(off) ((off) >> VFIO_FSL_MC_OFFSET_SHIFT) 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#define VFIO_FSL_MC_INDEX_TO_OFFSET(index) \ 168c2ecf20Sopenharmony_ci ((u64)(index) << VFIO_FSL_MC_OFFSET_SHIFT) 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cistruct vfio_fsl_mc_irq { 198c2ecf20Sopenharmony_ci u32 flags; 208c2ecf20Sopenharmony_ci u32 count; 218c2ecf20Sopenharmony_ci struct eventfd_ctx *trigger; 228c2ecf20Sopenharmony_ci char *name; 238c2ecf20Sopenharmony_ci}; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistruct vfio_fsl_mc_reflck { 268c2ecf20Sopenharmony_ci struct kref kref; 278c2ecf20Sopenharmony_ci struct mutex lock; 288c2ecf20Sopenharmony_ci}; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistruct vfio_fsl_mc_region { 318c2ecf20Sopenharmony_ci u32 flags; 328c2ecf20Sopenharmony_ci u32 type; 338c2ecf20Sopenharmony_ci u64 addr; 348c2ecf20Sopenharmony_ci resource_size_t size; 358c2ecf20Sopenharmony_ci void __iomem *ioaddr; 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistruct vfio_fsl_mc_device { 398c2ecf20Sopenharmony_ci struct fsl_mc_device *mc_dev; 408c2ecf20Sopenharmony_ci struct notifier_block nb; 418c2ecf20Sopenharmony_ci int refcnt; 428c2ecf20Sopenharmony_ci struct vfio_fsl_mc_region *regions; 438c2ecf20Sopenharmony_ci struct vfio_fsl_mc_reflck *reflck; 448c2ecf20Sopenharmony_ci struct mutex igate; 458c2ecf20Sopenharmony_ci struct vfio_fsl_mc_irq *mc_irqs; 468c2ecf20Sopenharmony_ci}; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ciextern int vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev, 498c2ecf20Sopenharmony_ci u32 flags, unsigned int index, 508c2ecf20Sopenharmony_ci unsigned int start, unsigned int count, 518c2ecf20Sopenharmony_ci void *data); 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_civoid vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci#endif /* VFIO_FSL_MC_PRIVATE_H */ 56