]> git.ipfire.org Git - thirdparty/qemu.git/blob - docs/interop/vhost-user.json
ce0ef74db5a4d4baf94e2091990e1285dc2b6671
[thirdparty/qemu.git] / docs / interop / vhost-user.json
1 # -*- Mode: Python -*-
2 #
3 # Copyright (C) 2018 Red Hat, Inc.
4 #
5 # Authors:
6 # Marc-André Lureau <marcandre.lureau@redhat.com>
7 #
8 # This work is licensed under the terms of the GNU GPL, version 2 or
9 # later. See the COPYING file in the top-level directory.
10
11 ##
12 # = vhost user backend discovery & capabilities
13 ##
14
15 ##
16 # @VHostUserBackendType:
17 #
18 # List the various vhost user backend types.
19 #
20 # @9p: 9p virtio console
21 # @balloon: virtio balloon
22 # @block: virtio block
23 # @caif: virtio caif
24 # @console: virtio console
25 # @crypto: virtio crypto
26 # @gpu: virtio gpu
27 # @input: virtio input
28 # @net: virtio net
29 # @rng: virtio rng
30 # @rpmsg: virtio remote processor messaging
31 # @rproc-serial: virtio remoteproc serial link
32 # @scsi: virtio scsi
33 # @vsock: virtio vsock transport
34 #
35 # Since: 4.0
36 ##
37 {
38 'enum': 'VHostUserBackendType',
39 'data': [
40 '9p',
41 'balloon',
42 'block',
43 'caif',
44 'console',
45 'crypto',
46 'gpu',
47 'input',
48 'net',
49 'rng',
50 'rpmsg',
51 'rproc-serial',
52 'scsi',
53 'vsock'
54 ]
55 }
56
57 ##
58 # @VHostUserBackendBlockFeature:
59 #
60 # List of vhost user "block" features.
61 #
62 # @read-only: The --read-only command line option is supported.
63 # @blk-file: The --blk-file command line option is supported.
64 #
65 # Since: 5.0
66 ##
67 {
68 'enum': 'VHostUserBackendBlockFeature',
69 'data': [ 'read-only', 'blk-file' ]
70 }
71
72 ##
73 # @VHostUserBackendCapabilitiesBlock:
74 #
75 # Capabilities reported by vhost user "block" backends
76 #
77 # @features: list of supported features.
78 #
79 # Since: 5.0
80 ##
81 {
82 'struct': 'VHostUserBackendCapabilitiesBlock',
83 'data': {
84 'features': [ 'VHostUserBackendBlockFeature' ]
85 }
86 }
87
88 ##
89 # @VHostUserBackendInputFeature:
90 #
91 # List of vhost user "input" features.
92 #
93 # @evdev-path: The --evdev-path command line option is supported.
94 # @no-grab: The --no-grab command line option is supported.
95 #
96 # Since: 4.0
97 ##
98 {
99 'enum': 'VHostUserBackendInputFeature',
100 'data': [ 'evdev-path', 'no-grab' ]
101 }
102
103 ##
104 # @VHostUserBackendCapabilitiesInput:
105 #
106 # Capabilities reported by vhost user "input" backends
107 #
108 # @features: list of supported features.
109 #
110 # Since: 4.0
111 ##
112 {
113 'struct': 'VHostUserBackendCapabilitiesInput',
114 'data': {
115 'features': [ 'VHostUserBackendInputFeature' ]
116 }
117 }
118
119 ##
120 # @VHostUserBackendGPUFeature:
121 #
122 # List of vhost user "gpu" features.
123 #
124 # @render-node: The --render-node command line option is supported.
125 # @virgl: The --virgl command line option is supported.
126 #
127 # Since: 4.0
128 ##
129 {
130 'enum': 'VHostUserBackendGPUFeature',
131 'data': [ 'render-node', 'virgl' ]
132 }
133
134 ##
135 # @VHostUserBackendCapabilitiesGPU:
136 #
137 # Capabilities reported by vhost user "gpu" backends.
138 #
139 # @features: list of supported features.
140 #
141 # Since: 4.0
142 ##
143 {
144 'struct': 'VHostUserBackendCapabilitiesGPU',
145 'data': {
146 'features': [ 'VHostUserBackendGPUFeature' ]
147 }
148 }
149
150 ##
151 # @VHostUserBackendCapabilities:
152 #
153 # Capabilities reported by vhost user backends.
154 #
155 # @type: The vhost user backend type.
156 #
157 # Since: 4.0
158 ##
159 {
160 'union': 'VHostUserBackendCapabilities',
161 'base': { 'type': 'VHostUserBackendType' },
162 'discriminator': 'type',
163 'data': {
164 'input': 'VHostUserBackendCapabilitiesInput',
165 'gpu': 'VHostUserBackendCapabilitiesGPU'
166 }
167 }
168
169 ##
170 # @VhostUserBackend:
171 #
172 # Describes a vhost user backend to management software.
173 #
174 # It is possible for multiple @VhostUserBackend elements to match the
175 # search criteria of management software. Applications thus need rules
176 # to pick one of the many matches, and users need the ability to
177 # override distro defaults.
178 #
179 # It is recommended to create vhost user backend JSON files (each
180 # containing a single @VhostUserBackend root element) with a
181 # double-digit prefix, for example "50-qemu-gpu.json",
182 # "50-crosvm-gpu.json", etc, so they can be sorted in predictable
183 # order. The backend JSON files should be searched for in three
184 # directories:
185 #
186 # - /usr/share/qemu/vhost-user -- populated by distro-provided
187 # packages (XDG_DATA_DIRS covers
188 # /usr/share by default),
189 #
190 # - /etc/qemu/vhost-user -- exclusively for sysadmins' local additions,
191 #
192 # - $XDG_CONFIG_HOME/qemu/vhost-user -- exclusively for per-user local
193 # additions (XDG_CONFIG_HOME
194 # defaults to $HOME/.config).
195 #
196 # Top-down, the list of directories goes from general to specific.
197 #
198 # Management software should build a list of files from all three
199 # locations, then sort the list by filename (i.e., basename
200 # component). Management software should choose the first JSON file on
201 # the sorted list that matches the search criteria. If a more specific
202 # directory has a file with same name as a less specific directory,
203 # then the file in the more specific directory takes effect. If the
204 # more specific file is zero length, it hides the less specific one.
205 #
206 # For example, if a distro ships
207 #
208 # - /usr/share/qemu/vhost-user/50-qemu-gpu.json
209 #
210 # - /usr/share/qemu/vhost-user/50-crosvm-gpu.json
211 #
212 # then the sysadmin can prevent the default QEMU GPU being used at all with
213 #
214 # $ touch /etc/qemu/vhost-user/50-qemu-gpu.json
215 #
216 # The sysadmin can replace/alter the distro default QEMU GPU with
217 #
218 # $ vim /etc/qemu/vhost-user/50-qemu-gpu.json
219 #
220 # or they can provide a parallel QEMU GPU with higher priority
221 #
222 # $ vim /etc/qemu/vhost-user/10-qemu-gpu.json
223 #
224 # or they can provide a parallel QEMU GPU with lower priority
225 #
226 # $ vim /etc/qemu/vhost-user/99-qemu-gpu.json
227 #
228 # @type: The vhost user backend type.
229 #
230 # @description: Provides a human-readable description of the backend.
231 # Management software may or may not display @description.
232 #
233 # @binary: Absolute path to the backend binary.
234 #
235 # @tags: An optional list of auxiliary strings associated with the
236 # backend for which @description is not appropriate, due to the
237 # latter's possible exposure to the end-user. @tags serves
238 # development and debugging purposes only, and management
239 # software shall explicitly ignore it.
240 #
241 # Since: 4.0
242 #
243 # Example:
244 #
245 # {
246 # "description": "QEMU vhost-user-gpu",
247 # "type": "gpu",
248 # "binary": "/usr/libexec/qemu/vhost-user-gpu",
249 # "tags": [
250 # "CONFIG_OPENGL_DMABUF=y"
251 # ]
252 # }
253 #
254 ##
255 {
256 'struct' : 'VhostUserBackend',
257 'data' : {
258 'description': 'str',
259 'type': 'VHostUserBackendType',
260 'binary': 'str',
261 '*tags': [ 'str' ]
262 }
263 }