summaryrefslogtreecommitdiff
path: root/drivers/vfio/fsl-mc/vfio_fsl_mc_private.h
blob: 34e757546e59912b87dfa3db3a4cf27fb94b5c66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 * Freescale Management Complex VFIO private declarations
 *
 * Copyright (C) 2013-2016 Freescale Semiconductor, Inc.
 * Copyright 2016 NXP
 * Author: Bharat Bhushan <bharat.bhushan@nxp.com>
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2. This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#ifndef VFIO_FSL_MC_PRIVATE_H
#define VFIO_FSL_MC_PRIVATE_H

#define VFIO_FSL_MC_OFFSET_SHIFT    40
#define VFIO_FSL_MC_OFFSET_MASK (((u64)(1) << VFIO_FSL_MC_OFFSET_SHIFT) - 1)

#define VFIO_FSL_MC_OFFSET_TO_INDEX(off) (off >> VFIO_FSL_MC_OFFSET_SHIFT)

#define VFIO_FSL_MC_INDEX_TO_OFFSET(index)	\
	((u64)(index) << VFIO_FSL_MC_OFFSET_SHIFT)

struct vfio_fsl_mc_irq {
	u32			flags;
	u32			count;
	struct eventfd_ctx	*trigger;
	char			*name;
};

struct vfio_fsl_mc_region {
	u32			flags;
#define VFIO_FSL_MC_REGION_TYPE_MMIO  1
#define VFIO_FSL_MC_REGION_TYPE_CACHEABLE  2
	u32			type;
	u64			addr;
	resource_size_t		size;
	void __iomem		*ioaddr;
};

struct vfio_fsl_mc_device {
	struct fsl_mc_device		*mc_dev;
	int				refcnt;
	u32				num_regions;
	struct vfio_fsl_mc_region	*regions;
	struct vfio_fsl_mc_irq		*mc_irqs;
};

int vfio_fsl_mc_irqs_init(struct vfio_fsl_mc_device *vdev);
void vfio_fsl_mc_irqs_cleanup(struct vfio_fsl_mc_device *vdev);
int vfio_fsl_mc_set_irqs_ioctl(struct vfio_fsl_mc_device *vdev,
			       uint32_t flags, unsigned int index,
			       unsigned int start, unsigned int count,
			       void *data);
#endif /* VFIO_PCI_PRIVATE_H */