xref: /linux/drivers/vfio/cdx/private.h (revision 90d32e92011eaae8e70a9169b4e7acf4ca8f9d3a)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.
4  */
5 
6 #ifndef VFIO_CDX_PRIVATE_H
7 #define VFIO_CDX_PRIVATE_H
8 
9 #define VFIO_CDX_OFFSET_SHIFT    40
10 
11 static inline u64 vfio_cdx_index_to_offset(u32 index)
12 {
13 	return ((u64)(index) << VFIO_CDX_OFFSET_SHIFT);
14 }
15 
16 struct vfio_cdx_irq {
17 	u32			flags;
18 	u32			count;
19 	int			irq_no;
20 	struct eventfd_ctx	*trigger;
21 	char			*name;
22 };
23 
24 struct vfio_cdx_region {
25 	u32			flags;
26 	u32			type;
27 	u64			addr;
28 	resource_size_t		size;
29 };
30 
31 struct vfio_cdx_device {
32 	struct vfio_device	vdev;
33 	struct vfio_cdx_region	*regions;
34 	struct vfio_cdx_irq	*cdx_irqs;
35 	u32			flags;
36 #define BME_SUPPORT BIT(0)
37 	u32			msi_count;
38 	u8			config_msi;
39 };
40 
41 int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,
42 			    u32 flags, unsigned int index,
43 			    unsigned int start, unsigned int count,
44 			    void *data);
45 
46 void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev);
47 
48 #endif /* VFIO_CDX_PRIVATE_H */
49