162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2013-2016 Freescale Semiconductor Inc. 462306a36Sopenharmony_ci * Copyright 2016,2019-2020 NXP 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef VFIO_FSL_MC_PRIVATE_H 862306a36Sopenharmony_ci#define VFIO_FSL_MC_PRIVATE_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_SHIFT 40 1162306a36Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_MASK (((u64)(1) << VFIO_FSL_MC_OFFSET_SHIFT) - 1) 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define VFIO_FSL_MC_OFFSET_TO_INDEX(off) ((off) >> VFIO_FSL_MC_OFFSET_SHIFT) 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define VFIO_FSL_MC_INDEX_TO_OFFSET(index) \ 1662306a36Sopenharmony_ci ((u64)(index) << VFIO_FSL_MC_OFFSET_SHIFT) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct vfio_fsl_mc_irq { 1962306a36Sopenharmony_ci u32 flags; 2062306a36Sopenharmony_ci u32 count; 2162306a36Sopenharmony_ci struct eventfd_ctx *trigger; 2262306a36Sopenharmony_ci char *name; 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistruct vfio_fsl_mc_region { 2662306a36Sopenharmony_ci u32 flags; 2762306a36Sopenharmony_ci u32 type; 2862306a36Sopenharmony_ci u64 addr; 2962306a36Sopenharmony_ci resource_size_t size; 3062306a36Sopenharmony_ci void __iomem *ioaddr; 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistruct vfio_fsl_mc_device { 3462306a36Sopenharmony_ci struct vfio_device vdev; 3562306a36Sopenharmony_ci struct fsl_mc_device *mc_dev; 3662306a36Sopenharmony_ci struct notifier_block nb; 3762306a36Sopenharmony_ci struct vfio_fsl_mc_region *regions; 3862306a36Sopenharmony_ci struct mutex igate; 3962306a36Sopenharmony_ci struct vfio_fsl_mc_irq *mc_irqs; 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciint vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev, 4362306a36Sopenharmony_ci u32 flags, unsigned int index, 4462306a36Sopenharmony_ci unsigned int start, unsigned int count, 4562306a36Sopenharmony_ci void *data); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_civoid vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci#endif /* VFIO_FSL_MC_PRIVATE_H */ 50