1 /*
2  * Copyright (C) 2018-2022 Intel Corporation.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 /**
9  * @file vhost_vsock.h
10  */
11 
12 #ifndef __VHOST_VSOCK_H__
13 #define __VHOST_VSOCK_H__
14 
15 #include "virtio.h"
16 #include "vhost.h"
17 
18 #define VHOST_VSOCK_RXQ  0
19 #define VHOST_VSOCK_TXQ  1
20 #define VHOST_VSOCK_CTLQ 2       /* NB: not yet supported */
21 #define VHOST_VSOCK_MAXQ 3
22 
23 #define VHOST_VSOCK_QUEUE_SIZE 128
24 #define VHOST_F_LOG_ALL 26
25 
26 #define VHOST_VSOCK_FEATURES \
27 	(1ULL << VIRTIO_F_NOTIFY_ON_EMPTY) | (1ULL << VIRTIO_RING_F_INDIRECT_DESC) | \
28 	(1ULL << VIRTIO_RING_F_EVENT_IDX) | (1ULL << VHOST_F_LOG_ALL) | \
29 	(1ULL << VIRTIO_F_ANY_LAYOUT) | (1ULL << VIRTIO_F_VERSION_1)
30 
31 #define U32_MAX                 ((uint32_t)~0U)
32 #define VMADDR_CID_HOST         2
33 
34 struct virtio_vsock_config {
35 	uint64_t guest_cid;
36 }__attribute__((packed));
37 
38 struct virtio_vsock {
39 	struct virtio_base base;
40 	pthread_mutex_t mtx;
41 	struct virtio_vq_info queues[VHOST_VSOCK_MAXQ];
42 	struct virtio_vsock_config config;
43 	struct vhost_vsock *vhost_vsock;
44 	uint64_t        features;
45 };
46 
47 struct vhost_vsock {
48 	struct vhost_dev vdev;
49 	struct vhost_vq vqs[VHOST_VSOCK_MAXQ];
50 	int vhost_fd;
51 	bool vhost_started;
52 };
53 #endif
54