aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/vmw_vmci.txt
blob: fb2eb6d28eb3c42b89ee95f098249849ff676db3 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Copyright 2020 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <uapi/linux/fcntl.h>
include <linux/ioctl.h>
include <linux/vmw_vmci_defs.h>
include <drivers/misc/vmw_vmci/vmci_context.h>

resource fd_vmci[fd]

openat$vmci(fd const[AT_FDCWD], file ptr[in, string["/dev/vmci"]], flags const[O_RDWR], mode const[0]) fd_vmci

ioctl$IOCTL_VMCI_INIT_CONTEXT(fd fd_vmci, cmd const[IOCTL_VMCI_INIT_CONTEXT], arg ptr[in, vmci_init_blk])
ioctl$IOCTL_VMCI_DATAGRAM_SEND(fd fd_vmci, cmd const[IOCTL_VMCI_DATAGRAM_SEND], arg ptr[in, vmci_datagram_snd_rcv_info])
ioctl$IOCTL_VMCI_DATAGRAM_RECEIVE(fd fd_vmci, cmd const[IOCTL_VMCI_DATAGRAM_RECEIVE], arg ptr[in, vmci_datagram_snd_rcv_info])
ioctl$IOCTL_VMCI_QUEUEPAIR_ALLOC(fd fd_vmci, cmd const[IOCTL_VMCI_QUEUEPAIR_ALLOC], arg ptr[in, vmci_qp_alloc_info])
ioctl$IOCTL_VMCI_QUEUEPAIR_SETVA(fd fd_vmci, cmd const[IOCTL_VMCI_QUEUEPAIR_SETVA], arg ptr[in, vmci_qp_set_va_info])
ioctl$IOCTL_VMCI_QUEUEPAIR_SETPF(fd fd_vmci, cmd const[IOCTL_VMCI_QUEUEPAIR_SETPAGEFILE], arg ptr[in, vmci_qp_page_file_info])
ioctl$IOCTL_VMCI_QUEUEPAIR_DETACH(fd fd_vmci, cmd const[IOCTL_VMCI_QUEUEPAIR_DETACH], arg ptr[in, vmci_qp_dtch_info])
ioctl$IOCTL_VMCI_CTX_ADD_NOTIFICATION(fd fd_vmci, cmd const[IOCTL_VMCI_CTX_ADD_NOTIFICATION], arg ptr[in, vmci_ctx_info])
ioctl$IOCTL_VMCI_CTX_REMOVE_NOTIFICATION(fd fd_vmci, cmd const[IOCTL_VMCI_CTX_REMOVE_NOTIFICATION], arg ptr[in, vmci_ctx_info])
ioctl$IOCTL_VMCI_CTX_GET_CPT_STATE(fd fd_vmci, cmd const[IOCTL_VMCI_CTX_GET_CPT_STATE], arg ptr[in, vmci_ctx_chkpt_buf_info])
ioctl$IOCTL_VMCI_CTX_SET_CPT_STATE(fd fd_vmci, cmd const[IOCTL_VMCI_CTX_SET_CPT_STATE], arg ptr[in, vmci_ctx_chkpt_buf_info])
ioctl$IOCTL_VMCI_GET_CONTEXT_ID(fd fd_vmci, cmd const[IOCTL_VMCI_GET_CONTEXT_ID], arg ptr[out, int32])
ioctl$IOCTL_VMCI_SET_NOTIFY(fd fd_vmci, cmd const[IOCTL_VMCI_SET_NOTIFY], arg ptr[in, vmci_set_notify_info])
ioctl$IOCTL_VMCI_NOTIFY_RESOURCE(fd fd_vmci, cmd const[IOCTL_VMCI_NOTIFY_RESOURCE], arg ptr[in, vmci_dbell_notify_resource_info])
ioctl$IOCTL_VMCI_NOTIFICATIONS_RECEIVE(fd fd_vmci, cmd const[IOCTL_VMCI_NOTIFICATIONS_RECEIVE], arg ptr[in, vmci_ctx_notify_recv_info])
ioctl$IOCTL_VMCI_VERSION(fd fd_vmci, cmd const[IOCTL_VMCI_VERSION], arg ptr[in, flags[vmci_version, int32]])
ioctl$IOCTL_VMCI_VERSION2(fd fd_vmci, cmd const[IOCTL_VMCI_VERSION2], arg ptr[in, flags[vmci_version, int32]])

vmci_init_blk {
	cid	vmaddr_cid
	flags	flags[vmci_privilege, int32]
}

vmci_handle {
	context	vmaddr_cid
	rsc	int32
}

vmci_datagram {
	dst		vmci_handle
	src		vmci_handle
	payload_size	len[payload, int64]
	payload		array[int8, 1024]
}

vmci_datagram_snd_rcv_info {
	addr	ptr64[in, vmci_datagram]
	len	len[addr, int32]
	result	int32
}

vmci_qp_alloc_info {
	handle		vmci_handle
	peer		vmaddr_cid
	flags		flags[vmci_qp, int32]
	produce_size	int64
	consume_size	int64
	ppn_va		int64
	num_ppns	int64
	result		int32
	version		int32
}

vmci_qp_set_va_info {
	handle		vmci_handle
	va		int64
	num_ppns	int64
	version		int32
	result		int32
}

vmci_qp_page_file_info {
	handle			vmci_handle
	produce_page_file	int64
	consume_page_file	int64
	produce_page_file_size	int64
	consume_page_file_size	int64
	result			int32
	version			int32
	produce_va		int64
	consume_va		int64
}

vmci_qp_dtch_info {
	handle	vmci_handle
	result	int32
	_pad	int32
}

vmci_ctx_info {
	remote_cid	vmaddr_cid
	result		int32
}

vmci_ctx_chkpt_buf_info {
	cpt_buf		ptr64[in, array[int32, 1024]]
	cpt_type	flags[vmci_cpt_state, int32]
	buf_size	len[cpt_buf, int32]
	result		int32
	_pad		const[0, int32]
}

vmci_set_notify_info {
	notify_uva	int64
	result		int32
	_pad		int32
}

vmci_dbell_notify_resource_info {
	handle	vmci_handle
	rsc	flags[vmci_notify_resource, int16]
	action	flags[vmci_notify_action, int16]
	result	int32
}

vmci_ctx_notify_recv_info {
	db_handle_buf_uva	int64
	db_handle_buf_size	int64
	qp_handle_buf_uva	int64
	qp_handle_buf_size	int64
	result			int32
	_pad			int32
}

vmci_privilege = VMCI_NO_PRIVILEGE_FLAGS, VMCI_PRIVILEGE_FLAG_RESTRICTED, VMCI_PRIVILEGE_FLAG_TRUSTED
vmci_qp = VMCI_QPFLAG_ATTACH_ONLY, VMCI_QPFLAG_LOCAL, VMCI_QPFLAG_NONBLOCK, VMCI_QPFLAG_PINNED
vmci_version = VMCI_VERSION_NOVMVM, VMCI_VERSION_NOTIFY, VMCI_VERSION_HOSTQP, VMCI_VERSION_PREHOSTQP, VMCI_VERSION_PREVERS2
vmci_cpt_state = VMCI_NOTIFICATION_CPT_STATE, VMCI_WELLKNOWN_CPT_STATE, VMCI_DG_OUT_STATE, VMCI_DG_IN_STATE, VMCI_DG_IN_SIZE_STATE, VMCI_DOORBELL_CPT_STATE
vmci_notify_resource = VMCI_NOTIFY_RESOURCE_QUEUE_PAIR, VMCI_NOTIFY_RESOURCE_DOOR_BELL
vmci_notify_action = VMCI_NOTIFY_RESOURCE_ACTION_NOTIFY, VMCI_NOTIFY_RESOURCE_ACTION_CREATE, VMCI_NOTIFY_RESOURCE_ACTION_DESTROY

# These are defined in kernel source files.
define VMCI_NOTIFICATION_CPT_STATE	1
define VMCI_WELLKNOWN_CPT_STATE	2
define VMCI_DG_OUT_STATE	3
define VMCI_DG_IN_STATE	4
define VMCI_DG_IN_SIZE_STATE	5
define VMCI_DOORBELL_CPT_STATE	6
define VMCI_NOTIFY_RESOURCE_ACTION_NOTIFY	0
define VMCI_NOTIFY_RESOURCE_ACTION_CREATE	1
define VMCI_NOTIFY_RESOURCE_ACTION_DESTROY	2
define VMCI_NOTIFY_RESOURCE_QUEUE_PAIR	0
define VMCI_NOTIFY_RESOURCE_DOOR_BELL	1