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