xref: /linux/include/uapi/linux/vhost_types.h (revision 94dfc73e7cf4a31da66b8843f0b9283ddd6b8381)
14b867132SPaolo Bonzini /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
24b867132SPaolo Bonzini #ifndef _LINUX_VHOST_TYPES_H
34b867132SPaolo Bonzini #define _LINUX_VHOST_TYPES_H
44b867132SPaolo Bonzini /* Userspace interface for in-kernel virtio accelerators. */
54b867132SPaolo Bonzini 
64b867132SPaolo Bonzini /* vhost is used to reduce the number of system calls involved in virtio.
74b867132SPaolo Bonzini  *
84b867132SPaolo Bonzini  * Existing virtio net code is used in the guest without modification.
94b867132SPaolo Bonzini  *
104b867132SPaolo Bonzini  * This header includes interface used by userspace hypervisor for
114b867132SPaolo Bonzini  * device configuration.
124b867132SPaolo Bonzini  */
134b867132SPaolo Bonzini 
144b867132SPaolo Bonzini #include <linux/types.h>
154b867132SPaolo Bonzini #include <linux/compiler.h>
164b867132SPaolo Bonzini #include <linux/virtio_config.h>
174b867132SPaolo Bonzini #include <linux/virtio_ring.h>
184b867132SPaolo Bonzini 
194b867132SPaolo Bonzini struct vhost_vring_state {
204b867132SPaolo Bonzini 	unsigned int index;
214b867132SPaolo Bonzini 	unsigned int num;
224b867132SPaolo Bonzini };
234b867132SPaolo Bonzini 
244b867132SPaolo Bonzini struct vhost_vring_file {
254b867132SPaolo Bonzini 	unsigned int index;
264b867132SPaolo Bonzini 	int fd; /* Pass -1 to unbind from file. */
274b867132SPaolo Bonzini 
284b867132SPaolo Bonzini };
294b867132SPaolo Bonzini 
304b867132SPaolo Bonzini struct vhost_vring_addr {
314b867132SPaolo Bonzini 	unsigned int index;
324b867132SPaolo Bonzini 	/* Option flags. */
334b867132SPaolo Bonzini 	unsigned int flags;
344b867132SPaolo Bonzini 	/* Flag values: */
354b867132SPaolo Bonzini 	/* Whether log address is valid. If set enables logging. */
364b867132SPaolo Bonzini #define VHOST_VRING_F_LOG 0
374b867132SPaolo Bonzini 
384b867132SPaolo Bonzini 	/* Start of array of descriptors (virtually contiguous) */
394b867132SPaolo Bonzini 	__u64 desc_user_addr;
404b867132SPaolo Bonzini 	/* Used structure address. Must be 32 bit aligned */
414b867132SPaolo Bonzini 	__u64 used_user_addr;
424b867132SPaolo Bonzini 	/* Available structure address. Must be 16 bit aligned */
434b867132SPaolo Bonzini 	__u64 avail_user_addr;
444b867132SPaolo Bonzini 	/* Logging support. */
454b867132SPaolo Bonzini 	/* Log writes to used structure, at offset calculated from specified
464b867132SPaolo Bonzini 	 * address. Address must be 32 bit aligned. */
474b867132SPaolo Bonzini 	__u64 log_guest_addr;
484b867132SPaolo Bonzini };
494b867132SPaolo Bonzini 
504b867132SPaolo Bonzini /* no alignment requirement */
514b867132SPaolo Bonzini struct vhost_iotlb_msg {
524b867132SPaolo Bonzini 	__u64 iova;
534b867132SPaolo Bonzini 	__u64 size;
544b867132SPaolo Bonzini 	__u64 uaddr;
554b867132SPaolo Bonzini #define VHOST_ACCESS_RO      0x1
564b867132SPaolo Bonzini #define VHOST_ACCESS_WO      0x2
574b867132SPaolo Bonzini #define VHOST_ACCESS_RW      0x3
584b867132SPaolo Bonzini 	__u8 perm;
594b867132SPaolo Bonzini #define VHOST_IOTLB_MISS           1
604b867132SPaolo Bonzini #define VHOST_IOTLB_UPDATE         2
614b867132SPaolo Bonzini #define VHOST_IOTLB_INVALIDATE     3
624b867132SPaolo Bonzini #define VHOST_IOTLB_ACCESS_FAIL    4
6325abc060SJason Wang /*
6425abc060SJason Wang  * VHOST_IOTLB_BATCH_BEGIN and VHOST_IOTLB_BATCH_END allow modifying
6525abc060SJason Wang  * multiple mappings in one go: beginning with
6625abc060SJason Wang  * VHOST_IOTLB_BATCH_BEGIN, followed by any number of
6725abc060SJason Wang  * VHOST_IOTLB_UPDATE messages, and ending with VHOST_IOTLB_BATCH_END.
6825abc060SJason Wang  * When one of these two values is used as the message type, the rest
6925abc060SJason Wang  * of the fields in the message are ignored. There's no guarantee that
7025abc060SJason Wang  * these changes take place automatically in the device.
7125abc060SJason Wang  */
7225abc060SJason Wang #define VHOST_IOTLB_BATCH_BEGIN    5
7325abc060SJason Wang #define VHOST_IOTLB_BATCH_END      6
744b867132SPaolo Bonzini 	__u8 type;
754b867132SPaolo Bonzini };
764b867132SPaolo Bonzini 
774b867132SPaolo Bonzini #define VHOST_IOTLB_MSG 0x1
784b867132SPaolo Bonzini #define VHOST_IOTLB_MSG_V2 0x2
794b867132SPaolo Bonzini 
804b867132SPaolo Bonzini struct vhost_msg {
814b867132SPaolo Bonzini 	int type;
824b867132SPaolo Bonzini 	union {
834b867132SPaolo Bonzini 		struct vhost_iotlb_msg iotlb;
844b867132SPaolo Bonzini 		__u8 padding[64];
854b867132SPaolo Bonzini 	};
864b867132SPaolo Bonzini };
874b867132SPaolo Bonzini 
884b867132SPaolo Bonzini struct vhost_msg_v2 {
894b867132SPaolo Bonzini 	__u32 type;
9091233ad7SGautam Dawar 	__u32 asid;
914b867132SPaolo Bonzini 	union {
924b867132SPaolo Bonzini 		struct vhost_iotlb_msg iotlb;
934b867132SPaolo Bonzini 		__u8 padding[64];
944b867132SPaolo Bonzini 	};
954b867132SPaolo Bonzini };
964b867132SPaolo Bonzini 
974b867132SPaolo Bonzini struct vhost_memory_region {
984b867132SPaolo Bonzini 	__u64 guest_phys_addr;
994b867132SPaolo Bonzini 	__u64 memory_size; /* bytes */
1004b867132SPaolo Bonzini 	__u64 userspace_addr;
1014b867132SPaolo Bonzini 	__u64 flags_padding; /* No flags are currently specified. */
1024b867132SPaolo Bonzini };
1034b867132SPaolo Bonzini 
1044b867132SPaolo Bonzini /* All region addresses and sizes must be 4K aligned. */
1054b867132SPaolo Bonzini #define VHOST_PAGE_SIZE 0x1000
1064b867132SPaolo Bonzini 
1074b867132SPaolo Bonzini struct vhost_memory {
1084b867132SPaolo Bonzini 	__u32 nregions;
1094b867132SPaolo Bonzini 	__u32 padding;
110*94dfc73eSGustavo A. R. Silva 	struct vhost_memory_region regions[];
1114b867132SPaolo Bonzini };
1124b867132SPaolo Bonzini 
1134b867132SPaolo Bonzini /* VHOST_SCSI specific definitions */
1144b867132SPaolo Bonzini 
1154b867132SPaolo Bonzini /*
1164b867132SPaolo Bonzini  * Used by QEMU userspace to ensure a consistent vhost-scsi ABI.
1174b867132SPaolo Bonzini  *
1184b867132SPaolo Bonzini  * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate +
1194b867132SPaolo Bonzini  *            RFC-v2 vhost-scsi userspace.  Add GET_ABI_VERSION ioctl usage
1204b867132SPaolo Bonzini  * ABI Rev 1: January 2013. Ignore vhost_tpgt field in struct vhost_scsi_target.
1214b867132SPaolo Bonzini  *            All the targets under vhost_wwpn can be seen and used by guset.
1224b867132SPaolo Bonzini  */
1234b867132SPaolo Bonzini 
1244b867132SPaolo Bonzini #define VHOST_SCSI_ABI_VERSION	1
1254b867132SPaolo Bonzini 
1264b867132SPaolo Bonzini struct vhost_scsi_target {
1274b867132SPaolo Bonzini 	int abi_version;
1284b867132SPaolo Bonzini 	char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */
1294b867132SPaolo Bonzini 	unsigned short vhost_tpgt;
1304b867132SPaolo Bonzini 	unsigned short reserved;
1314b867132SPaolo Bonzini };
1324b867132SPaolo Bonzini 
1334c8cf318STiwei Bie /* VHOST_VDPA specific definitions */
1344c8cf318STiwei Bie 
1354c8cf318STiwei Bie struct vhost_vdpa_config {
1364c8cf318STiwei Bie 	__u32 off;
1374c8cf318STiwei Bie 	__u32 len;
138*94dfc73eSGustavo A. R. Silva 	__u8 buf[];
1394c8cf318STiwei Bie };
1404c8cf318STiwei Bie 
1411b48dc03SJason Wang /* vhost vdpa IOVA range
1421b48dc03SJason Wang  * @first: First address that can be mapped by vhost-vDPA
1431b48dc03SJason Wang  * @last: Last address that can be mapped by vhost-vDPA
1441b48dc03SJason Wang  */
1451b48dc03SJason Wang struct vhost_vdpa_iova_range {
1461b48dc03SJason Wang 	__u64 first;
1471b48dc03SJason Wang 	__u64 last;
1481b48dc03SJason Wang };
1491b48dc03SJason Wang 
1504b867132SPaolo Bonzini /* Feature bits */
1514b867132SPaolo Bonzini /* Log all write descriptors. Can be changed while device is active. */
1524b867132SPaolo Bonzini #define VHOST_F_LOG_ALL 26
1534b867132SPaolo Bonzini /* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */
1544b867132SPaolo Bonzini #define VHOST_NET_F_VIRTIO_NET_HDR 27
1554b867132SPaolo Bonzini 
156175d493cSGautam Dawar /* Use message type V2 */
157175d493cSGautam Dawar #define VHOST_BACKEND_F_IOTLB_MSG_V2 0x1
158175d493cSGautam Dawar /* IOTLB can accept batching hints */
159175d493cSGautam Dawar #define VHOST_BACKEND_F_IOTLB_BATCH  0x2
16091233ad7SGautam Dawar /* IOTLB can accept address space identifier through V2 type of IOTLB
16191233ad7SGautam Dawar  * message
16291233ad7SGautam Dawar  */
16391233ad7SGautam Dawar #define VHOST_BACKEND_F_IOTLB_ASID  0x3
164175d493cSGautam Dawar 
1654b867132SPaolo Bonzini #endif
166