xref: /OK3568_Linux_fs/kernel/include/uapi/linux/vfio_zdev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * VFIO Region definitions for ZPCI devices
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright IBM Corp. 2020
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author(s): Pierre Morel <pmorel@linux.ibm.com>
8*4882a593Smuzhiyun  *            Matthew Rosato <mjrosato@linux.ibm.com>
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef _VFIO_ZDEV_H_
12*4882a593Smuzhiyun #define _VFIO_ZDEV_H_
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/types.h>
15*4882a593Smuzhiyun #include <linux/vfio.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /**
18*4882a593Smuzhiyun  * VFIO_DEVICE_INFO_CAP_ZPCI_BASE - Base PCI Function information
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  * This capability provides a set of descriptive information about the
21*4882a593Smuzhiyun  * associated PCI function.
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun struct vfio_device_info_cap_zpci_base {
24*4882a593Smuzhiyun 	struct vfio_info_cap_header header;
25*4882a593Smuzhiyun 	__u64 start_dma;	/* Start of available DMA addresses */
26*4882a593Smuzhiyun 	__u64 end_dma;		/* End of available DMA addresses */
27*4882a593Smuzhiyun 	__u16 pchid;		/* Physical Channel ID */
28*4882a593Smuzhiyun 	__u16 vfn;		/* Virtual function number */
29*4882a593Smuzhiyun 	__u16 fmb_length;	/* Measurement Block Length (in bytes) */
30*4882a593Smuzhiyun 	__u8 pft;		/* PCI Function Type */
31*4882a593Smuzhiyun 	__u8 gid;		/* PCI function group ID */
32*4882a593Smuzhiyun };
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /**
35*4882a593Smuzhiyun  * VFIO_DEVICE_INFO_CAP_ZPCI_GROUP - Base PCI Function Group information
36*4882a593Smuzhiyun  *
37*4882a593Smuzhiyun  * This capability provides a set of descriptive information about the group of
38*4882a593Smuzhiyun  * PCI functions that the associated device belongs to.
39*4882a593Smuzhiyun  */
40*4882a593Smuzhiyun struct vfio_device_info_cap_zpci_group {
41*4882a593Smuzhiyun 	struct vfio_info_cap_header header;
42*4882a593Smuzhiyun 	__u64 dasm;		/* DMA Address space mask */
43*4882a593Smuzhiyun 	__u64 msi_addr;		/* MSI address */
44*4882a593Smuzhiyun 	__u64 flags;
45*4882a593Smuzhiyun #define VFIO_DEVICE_INFO_ZPCI_FLAG_REFRESH 1 /* Program-specified TLB refresh */
46*4882a593Smuzhiyun 	__u16 mui;		/* Measurement Block Update Interval */
47*4882a593Smuzhiyun 	__u16 noi;		/* Maximum number of MSIs */
48*4882a593Smuzhiyun 	__u16 maxstbl;		/* Maximum Store Block Length */
49*4882a593Smuzhiyun 	__u8 version;		/* Supported PCI Version */
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /**
53*4882a593Smuzhiyun  * VFIO_DEVICE_INFO_CAP_ZPCI_UTIL - Utility String
54*4882a593Smuzhiyun  *
55*4882a593Smuzhiyun  * This capability provides the utility string for the associated device, which
56*4882a593Smuzhiyun  * is a device identifier string made up of EBCDID characters.  'size' specifies
57*4882a593Smuzhiyun  * the length of 'util_str'.
58*4882a593Smuzhiyun  */
59*4882a593Smuzhiyun struct vfio_device_info_cap_zpci_util {
60*4882a593Smuzhiyun 	struct vfio_info_cap_header header;
61*4882a593Smuzhiyun 	__u32 size;
62*4882a593Smuzhiyun 	__u8 util_str[];
63*4882a593Smuzhiyun };
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /**
66*4882a593Smuzhiyun  * VFIO_DEVICE_INFO_CAP_ZPCI_PFIP - PCI Function Path
67*4882a593Smuzhiyun  *
68*4882a593Smuzhiyun  * This capability provides the PCI function path string, which is an identifier
69*4882a593Smuzhiyun  * that describes the internal hardware path of the device. 'size' specifies
70*4882a593Smuzhiyun  * the length of 'pfip'.
71*4882a593Smuzhiyun  */
72*4882a593Smuzhiyun struct vfio_device_info_cap_zpci_pfip {
73*4882a593Smuzhiyun 	struct vfio_info_cap_header header;
74*4882a593Smuzhiyun 	__u32 size;
75*4882a593Smuzhiyun 	__u8 pfip[];
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #endif
79