]>
Commit | Line | Data |
---|---|---|
a5ebce38 LV |
1 | # -*- Mode: Python -*- |
2 | # vim: filetype=python | |
3 | # | |
4 | ||
5 | ## | |
6 | # = Virtio devices | |
7 | ## | |
8 | ||
9 | ## | |
10 | # @VirtioInfo: | |
11 | # | |
12 | # Basic information about a given VirtIODevice | |
13 | # | |
14 | # @path: The VirtIODevice's canonical QOM path | |
15 | # | |
16 | # @name: Name of the VirtIODevice | |
17 | # | |
58379af7 | 18 | # Since: 7.2 |
a5ebce38 LV |
19 | ## |
20 | { 'struct': 'VirtioInfo', | |
21 | 'data': { 'path': 'str', | |
22 | 'name': 'str' } } | |
23 | ||
24 | ## | |
25 | # @x-query-virtio: | |
26 | # | |
27 | # Returns a list of all realized VirtIODevices | |
28 | # | |
29 | # Features: | |
a937b6aa | 30 | # |
a5ebce38 LV |
31 | # @unstable: This command is meant for debugging. |
32 | # | |
33 | # Returns: List of gathered VirtIODevices | |
34 | # | |
58379af7 | 35 | # Since: 7.2 |
a5ebce38 LV |
36 | # |
37 | # Example: | |
38 | # | |
39 | # -> { "execute": "x-query-virtio" } | |
40 | # <- { "return": [ | |
41 | # { | |
42 | # "name": "virtio-input", | |
43 | # "path": "/machine/peripheral-anon/device[4]/virtio-backend" | |
44 | # }, | |
45 | # { | |
46 | # "name": "virtio-crypto", | |
47 | # "path": "/machine/peripheral/crypto0/virtio-backend" | |
48 | # }, | |
49 | # { | |
50 | # "name": "virtio-scsi", | |
51 | # "path": "/machine/peripheral-anon/device[2]/virtio-backend" | |
52 | # }, | |
53 | # { | |
54 | # "name": "virtio-net", | |
55 | # "path": "/machine/peripheral-anon/device[1]/virtio-backend" | |
56 | # }, | |
57 | # { | |
58 | # "name": "virtio-serial", | |
59 | # "path": "/machine/peripheral-anon/device[0]/virtio-backend" | |
60 | # } | |
61 | # ] | |
62 | # } | |
a5ebce38 | 63 | ## |
a5ebce38 LV |
64 | { 'command': 'x-query-virtio', |
65 | 'returns': [ 'VirtioInfo' ], | |
66 | 'features': [ 'unstable' ] } | |
90c066cd LV |
67 | |
68 | ## | |
69 | # @VhostStatus: | |
70 | # | |
a937b6aa | 71 | # Information about a vhost device. This information will only be |
90c066cd LV |
72 | # displayed if the vhost device is active. |
73 | # | |
74 | # @n-mem-sections: vhost_dev n_mem_sections | |
75 | # | |
76 | # @n-tmp-sections: vhost_dev n_tmp_sections | |
77 | # | |
78 | # @nvqs: vhost_dev nvqs (number of virtqueues being used) | |
79 | # | |
80 | # @vq-index: vhost_dev vq_index | |
81 | # | |
82 | # @features: vhost_dev features | |
83 | # | |
84 | # @acked-features: vhost_dev acked_features | |
85 | # | |
86 | # @backend-features: vhost_dev backend_features | |
87 | # | |
88 | # @protocol-features: vhost_dev protocol_features | |
89 | # | |
90 | # @max-queues: vhost_dev max_queues | |
91 | # | |
92 | # @backend-cap: vhost_dev backend_cap | |
93 | # | |
94 | # @log-enabled: vhost_dev log_enabled flag | |
95 | # | |
96 | # @log-size: vhost_dev log_size | |
97 | # | |
58379af7 | 98 | # Since: 7.2 |
90c066cd | 99 | ## |
90c066cd LV |
100 | { 'struct': 'VhostStatus', |
101 | 'data': { 'n-mem-sections': 'int', | |
102 | 'n-tmp-sections': 'int', | |
103 | 'nvqs': 'uint32', | |
104 | 'vq-index': 'int', | |
f3034ad7 LV |
105 | 'features': 'VirtioDeviceFeatures', |
106 | 'acked-features': 'VirtioDeviceFeatures', | |
107 | 'backend-features': 'VirtioDeviceFeatures', | |
108 | 'protocol-features': 'VhostDeviceProtocols', | |
90c066cd LV |
109 | 'max-queues': 'uint64', |
110 | 'backend-cap': 'uint64', | |
111 | 'log-enabled': 'bool', | |
112 | 'log-size': 'uint64' } } | |
113 | ||
114 | ## | |
115 | # @VirtioStatus: | |
116 | # | |
117 | # Full status of the virtio device with most VirtIODevice members. | |
a937b6aa MA |
118 | # Also includes the full status of the corresponding vhost device if |
119 | # the vhost device is active. | |
90c066cd LV |
120 | # |
121 | # @name: VirtIODevice name | |
122 | # | |
123 | # @device-id: VirtIODevice ID | |
124 | # | |
125 | # @vhost-started: VirtIODevice vhost_started flag | |
126 | # | |
127 | # @guest-features: VirtIODevice guest_features | |
128 | # | |
129 | # @host-features: VirtIODevice host_features | |
130 | # | |
131 | # @backend-features: VirtIODevice backend_features | |
132 | # | |
133 | # @device-endian: VirtIODevice device_endian | |
134 | # | |
a937b6aa MA |
135 | # @num-vqs: VirtIODevice virtqueue count. This is the number of |
136 | # active virtqueues being used by the VirtIODevice. | |
90c066cd LV |
137 | # |
138 | # @status: VirtIODevice configuration status (VirtioDeviceStatus) | |
139 | # | |
140 | # @isr: VirtIODevice ISR | |
141 | # | |
142 | # @queue-sel: VirtIODevice queue_sel | |
143 | # | |
144 | # @vm-running: VirtIODevice vm_running flag | |
145 | # | |
146 | # @broken: VirtIODevice broken flag | |
147 | # | |
148 | # @disabled: VirtIODevice disabled flag | |
149 | # | |
150 | # @use-started: VirtIODevice use_started flag | |
151 | # | |
152 | # @started: VirtIODevice started flag | |
153 | # | |
154 | # @start-on-kick: VirtIODevice start_on_kick flag | |
155 | # | |
156 | # @disable-legacy-check: VirtIODevice disabled_legacy_check flag | |
157 | # | |
158 | # @bus-name: VirtIODevice bus_name | |
159 | # | |
160 | # @use-guest-notifier-mask: VirtIODevice use_guest_notifier_mask flag | |
161 | # | |
a937b6aa MA |
162 | # @vhost-dev: Corresponding vhost device info for a given |
163 | # VirtIODevice. Present if the given VirtIODevice has an active | |
164 | # vhost device. | |
90c066cd | 165 | # |
58379af7 | 166 | # Since: 7.2 |
90c066cd | 167 | ## |
90c066cd LV |
168 | { 'struct': 'VirtioStatus', |
169 | 'data': { 'name': 'str', | |
170 | 'device-id': 'uint16', | |
171 | 'vhost-started': 'bool', | |
172 | 'device-endian': 'str', | |
f3034ad7 LV |
173 | 'guest-features': 'VirtioDeviceFeatures', |
174 | 'host-features': 'VirtioDeviceFeatures', | |
175 | 'backend-features': 'VirtioDeviceFeatures', | |
90c066cd | 176 | 'num-vqs': 'int', |
f3034ad7 | 177 | 'status': 'VirtioDeviceStatus', |
90c066cd LV |
178 | 'isr': 'uint8', |
179 | 'queue-sel': 'uint16', | |
180 | 'vm-running': 'bool', | |
181 | 'broken': 'bool', | |
182 | 'disabled': 'bool', | |
183 | 'use-started': 'bool', | |
184 | 'started': 'bool', | |
185 | 'start-on-kick': 'bool', | |
186 | 'disable-legacy-check': 'bool', | |
187 | 'bus-name': 'str', | |
188 | 'use-guest-notifier-mask': 'bool', | |
189 | '*vhost-dev': 'VhostStatus' } } | |
190 | ||
191 | ## | |
192 | # @x-query-virtio-status: | |
193 | # | |
194 | # Poll for a comprehensive status of a given virtio device | |
195 | # | |
196 | # @path: Canonical QOM path of the VirtIODevice | |
197 | # | |
198 | # Features: | |
a937b6aa | 199 | # |
90c066cd LV |
200 | # @unstable: This command is meant for debugging. |
201 | # | |
202 | # Returns: VirtioStatus of the virtio device | |
203 | # | |
58379af7 | 204 | # Since: 7.2 |
90c066cd LV |
205 | # |
206 | # Examples: | |
207 | # | |
208 | # 1. Poll for the status of virtio-crypto (no vhost-crypto active) | |
209 | # | |
210 | # -> { "execute": "x-query-virtio-status", | |
211 | # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" } | |
212 | # } | |
213 | # <- { "return": { | |
214 | # "device-endian": "little", | |
215 | # "bus-name": "", | |
216 | # "disable-legacy-check": false, | |
217 | # "name": "virtio-crypto", | |
218 | # "started": true, | |
219 | # "device-id": 20, | |
f3034ad7 LV |
220 | # "backend-features": { |
221 | # "transports": [], | |
222 | # "dev-features": [] | |
223 | # }, | |
90c066cd LV |
224 | # "start-on-kick": false, |
225 | # "isr": 1, | |
226 | # "broken": false, | |
f3034ad7 LV |
227 | # "status": { |
228 | # "statuses": [ | |
229 | # "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", | |
230 | # "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", | |
231 | # "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", | |
232 | # "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" | |
233 | # ] | |
234 | # }, | |
90c066cd | 235 | # "num-vqs": 2, |
f3034ad7 LV |
236 | # "guest-features": { |
237 | # "dev-features": [], | |
238 | # "transports": [ | |
239 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
240 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
241 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
242 | # ] | |
243 | # }, | |
244 | # "host-features": { | |
245 | # "unknown-dev-features": 1073741824, | |
246 | # "dev-features": [], | |
247 | # "transports": [ | |
248 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
249 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
250 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
251 | # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
252 | # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
253 | # ] | |
254 | # }, | |
90c066cd LV |
255 | # "use-guest-notifier-mask": true, |
256 | # "vm-running": true, | |
257 | # "queue-sel": 1, | |
258 | # "disabled": false, | |
259 | # "vhost-started": false, | |
260 | # "use-started": true | |
261 | # } | |
262 | # } | |
263 | # | |
264 | # 2. Poll for the status of virtio-net (vhost-net is active) | |
265 | # | |
266 | # -> { "execute": "x-query-virtio-status", | |
267 | # "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" } | |
268 | # } | |
269 | # <- { "return": { | |
270 | # "device-endian": "little", | |
271 | # "bus-name": "", | |
272 | # "disabled-legacy-check": false, | |
273 | # "name": "virtio-net", | |
274 | # "started": true, | |
275 | # "device-id": 1, | |
276 | # "vhost-dev": { | |
277 | # "n-tmp-sections": 4, | |
278 | # "n-mem-sections": 4, | |
279 | # "max-queues": 1, | |
280 | # "backend-cap": 2, | |
281 | # "log-size": 0, | |
f3034ad7 LV |
282 | # "backend-features": { |
283 | # "dev-features": [], | |
284 | # "transports": [] | |
285 | # }, | |
90c066cd | 286 | # "nvqs": 2, |
f3034ad7 LV |
287 | # "protocol-features": { |
288 | # "protocols": [] | |
289 | # }, | |
90c066cd LV |
290 | # "vq-index": 0, |
291 | # "log-enabled": false, | |
f3034ad7 LV |
292 | # "acked-features": { |
293 | # "dev-features": [ | |
294 | # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" | |
295 | # ], | |
296 | # "transports": [ | |
297 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
298 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
299 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
300 | # ] | |
301 | # }, | |
302 | # "features": { | |
303 | # "dev-features": [ | |
304 | # "VHOST_F_LOG_ALL: Logging write descriptors supported", | |
305 | # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" | |
306 | # ], | |
307 | # "transports": [ | |
308 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
309 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
310 | # "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform", | |
311 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
312 | # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
313 | # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
314 | # ] | |
315 | # } | |
316 | # }, | |
317 | # "backend-features": { | |
318 | # "dev-features": [ | |
2cb40d44 | 319 | # "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", |
f3034ad7 LV |
320 | # "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", |
321 | # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
322 | # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
323 | # "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", | |
324 | # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
325 | # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
326 | # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
327 | # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
328 | # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
329 | # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
330 | # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
331 | # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
332 | # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
333 | # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
334 | # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
335 | # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
336 | # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
337 | # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
338 | # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
339 | # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
340 | # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
341 | # ], | |
342 | # "transports": [ | |
343 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
344 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
345 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
346 | # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
347 | # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
348 | # ] | |
90c066cd | 349 | # }, |
90c066cd LV |
350 | # "start-on-kick": false, |
351 | # "isr": 1, | |
352 | # "broken": false, | |
f3034ad7 LV |
353 | # "status": { |
354 | # "statuses": [ | |
355 | # "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", | |
356 | # "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", | |
357 | # "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", | |
358 | # "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" | |
359 | # ] | |
360 | # }, | |
90c066cd | 361 | # "num-vqs": 3, |
f3034ad7 LV |
362 | # "guest-features": { |
363 | # "dev-features": [ | |
364 | # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
365 | # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
366 | # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
367 | # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
368 | # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
369 | # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
370 | # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
371 | # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
372 | # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
373 | # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
374 | # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
375 | # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
376 | # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
377 | # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
378 | # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
379 | # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
380 | # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
381 | # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
382 | # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
383 | # ], | |
384 | # "transports": [ | |
385 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
386 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
387 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
388 | # ] | |
389 | # }, | |
390 | # "host-features": { | |
391 | # "dev-features": [ | |
2cb40d44 | 392 | # "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", |
f3034ad7 LV |
393 | # "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", |
394 | # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
395 | # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
396 | # "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", | |
397 | # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
398 | # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
399 | # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
400 | # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
401 | # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
402 | # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
403 | # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
404 | # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
405 | # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
406 | # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
407 | # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
408 | # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
409 | # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
410 | # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
411 | # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
412 | # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
413 | # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
414 | # ], | |
415 | # "transports": [ | |
416 | # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
417 | # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
418 | # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
419 | # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
420 | # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
421 | # ] | |
422 | # }, | |
90c066cd LV |
423 | # "use-guest-notifier-mask": true, |
424 | # "vm-running": true, | |
425 | # "queue-sel": 2, | |
426 | # "disabled": false, | |
427 | # "vhost-started": true, | |
428 | # "use-started": true | |
429 | # } | |
430 | # } | |
90c066cd | 431 | ## |
90c066cd LV |
432 | { 'command': 'x-query-virtio-status', |
433 | 'data': { 'path': 'str' }, | |
434 | 'returns': 'VirtioStatus', | |
435 | 'features': [ 'unstable' ] } | |
f3034ad7 LV |
436 | |
437 | ## | |
438 | # @VirtioDeviceStatus: | |
439 | # | |
440 | # A structure defined to list the configuration statuses of a virtio | |
441 | # device | |
442 | # | |
443 | # @statuses: List of decoded configuration statuses of the virtio | |
a937b6aa | 444 | # device |
f3034ad7 | 445 | # |
a937b6aa MA |
446 | # @unknown-statuses: Virtio device statuses bitmap that have not been |
447 | # decoded | |
f3034ad7 | 448 | # |
58379af7 | 449 | # Since: 7.2 |
f3034ad7 | 450 | ## |
f3034ad7 LV |
451 | { 'struct': 'VirtioDeviceStatus', |
452 | 'data': { 'statuses': [ 'str' ], | |
453 | '*unknown-statuses': 'uint8' } } | |
454 | ||
455 | ## | |
456 | # @VhostDeviceProtocols: | |
457 | # | |
458 | # A structure defined to list the vhost user protocol features of a | |
459 | # Vhost User device | |
460 | # | |
461 | # @protocols: List of decoded vhost user protocol features of a vhost | |
a937b6aa | 462 | # user device |
f3034ad7 LV |
463 | # |
464 | # @unknown-protocols: Vhost user device protocol features bitmap that | |
a937b6aa | 465 | # have not been decoded |
f3034ad7 | 466 | # |
58379af7 | 467 | # Since: 7.2 |
f3034ad7 | 468 | ## |
f3034ad7 LV |
469 | { 'struct': 'VhostDeviceProtocols', |
470 | 'data': { 'protocols': [ 'str' ], | |
471 | '*unknown-protocols': 'uint64' } } | |
472 | ||
473 | ## | |
474 | # @VirtioDeviceFeatures: | |
475 | # | |
a937b6aa | 476 | # The common fields that apply to most Virtio devices. Some devices |
f3034ad7 LV |
477 | # may not have their own device-specific features (e.g. virtio-rng). |
478 | # | |
479 | # @transports: List of transport features of the virtio device | |
480 | # | |
481 | # @dev-features: List of device-specific features (if the device has | |
a937b6aa | 482 | # unique features) |
f3034ad7 LV |
483 | # |
484 | # @unknown-dev-features: Virtio device features bitmap that have not | |
a937b6aa | 485 | # been decoded |
f3034ad7 | 486 | # |
58379af7 | 487 | # Since: 7.2 |
f3034ad7 | 488 | ## |
f3034ad7 LV |
489 | { 'struct': 'VirtioDeviceFeatures', |
490 | 'data': { 'transports': [ 'str' ], | |
491 | '*dev-features': [ 'str' ], | |
492 | '*unknown-dev-features': 'uint64' } } | |
07536ddd LV |
493 | |
494 | ## | |
495 | # @VirtQueueStatus: | |
496 | # | |
497 | # Information of a VirtIODevice VirtQueue, including most members of | |
498 | # the VirtQueue data structure. | |
499 | # | |
500 | # @name: Name of the VirtIODevice that uses this VirtQueue | |
501 | # | |
502 | # @queue-index: VirtQueue queue_index | |
503 | # | |
504 | # @inuse: VirtQueue inuse | |
505 | # | |
506 | # @vring-num: VirtQueue vring.num | |
507 | # | |
508 | # @vring-num-default: VirtQueue vring.num_default | |
509 | # | |
510 | # @vring-align: VirtQueue vring.align | |
511 | # | |
512 | # @vring-desc: VirtQueue vring.desc (descriptor area) | |
513 | # | |
514 | # @vring-avail: VirtQueue vring.avail (driver area) | |
515 | # | |
516 | # @vring-used: VirtQueue vring.used (device area) | |
517 | # | |
518 | # @last-avail-idx: VirtQueue last_avail_idx or return of vhost_dev | |
a937b6aa | 519 | # vhost_get_vring_base (if vhost active) |
07536ddd LV |
520 | # |
521 | # @shadow-avail-idx: VirtQueue shadow_avail_idx | |
522 | # | |
523 | # @used-idx: VirtQueue used_idx | |
524 | # | |
525 | # @signalled-used: VirtQueue signalled_used | |
526 | # | |
527 | # @signalled-used-valid: VirtQueue signalled_used_valid flag | |
528 | # | |
58379af7 | 529 | # Since: 7.2 |
07536ddd | 530 | ## |
07536ddd LV |
531 | { 'struct': 'VirtQueueStatus', |
532 | 'data': { 'name': 'str', | |
533 | 'queue-index': 'uint16', | |
534 | 'inuse': 'uint32', | |
535 | 'vring-num': 'uint32', | |
536 | 'vring-num-default': 'uint32', | |
537 | 'vring-align': 'uint32', | |
538 | 'vring-desc': 'uint64', | |
539 | 'vring-avail': 'uint64', | |
540 | 'vring-used': 'uint64', | |
541 | '*last-avail-idx': 'uint16', | |
542 | '*shadow-avail-idx': 'uint16', | |
543 | 'used-idx': 'uint16', | |
544 | 'signalled-used': 'uint16', | |
545 | 'signalled-used-valid': 'bool' } } | |
546 | ||
547 | ## | |
548 | # @x-query-virtio-queue-status: | |
549 | # | |
550 | # Return the status of a given VirtIODevice's VirtQueue | |
551 | # | |
552 | # @path: VirtIODevice canonical QOM path | |
553 | # | |
554 | # @queue: VirtQueue index to examine | |
555 | # | |
556 | # Features: | |
a937b6aa | 557 | # |
07536ddd LV |
558 | # @unstable: This command is meant for debugging. |
559 | # | |
560 | # Returns: VirtQueueStatus of the VirtQueue | |
561 | # | |
a937b6aa MA |
562 | # Notes: last_avail_idx will not be displayed in the case where the |
563 | # selected VirtIODevice has a running vhost device and the | |
564 | # VirtIODevice VirtQueue index (queue) does not exist for the | |
565 | # corresponding vhost device vhost_virtqueue. Also, | |
566 | # shadow_avail_idx will not be displayed in the case where the | |
567 | # selected VirtIODevice has a running vhost device. | |
07536ddd | 568 | # |
58379af7 | 569 | # Since: 7.2 |
07536ddd LV |
570 | # |
571 | # Examples: | |
572 | # | |
573 | # 1. Get VirtQueueStatus for virtio-vsock (vhost-vsock running) | |
574 | # | |
575 | # -> { "execute": "x-query-virtio-queue-status", | |
576 | # "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", | |
577 | # "queue": 1 } | |
578 | # } | |
579 | # <- { "return": { | |
580 | # "signalled-used": 0, | |
581 | # "inuse": 0, | |
582 | # "name": "vhost-vsock", | |
583 | # "vring-align": 4096, | |
584 | # "vring-desc": 5217370112, | |
585 | # "signalled-used-valid": false, | |
586 | # "vring-num-default": 128, | |
587 | # "vring-avail": 5217372160, | |
588 | # "queue-index": 1, | |
589 | # "last-avail-idx": 0, | |
590 | # "vring-used": 5217372480, | |
591 | # "used-idx": 0, | |
592 | # "vring-num": 128 | |
593 | # } | |
594 | # } | |
595 | # | |
596 | # 2. Get VirtQueueStatus for virtio-serial (no vhost) | |
597 | # | |
598 | # -> { "execute": "x-query-virtio-queue-status", | |
599 | # "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend", | |
600 | # "queue": 20 } | |
601 | # } | |
602 | # <- { "return": { | |
603 | # "signalled-used": 0, | |
604 | # "inuse": 0, | |
605 | # "name": "virtio-serial", | |
606 | # "vring-align": 4096, | |
607 | # "vring-desc": 5182074880, | |
608 | # "signalled-used-valid": false, | |
609 | # "vring-num-default": 128, | |
610 | # "vring-avail": 5182076928, | |
611 | # "queue-index": 20, | |
612 | # "last-avail-idx": 0, | |
613 | # "vring-used": 5182077248, | |
614 | # "used-idx": 0, | |
615 | # "shadow-avail-idx": 0, | |
616 | # "vring-num": 128 | |
617 | # } | |
618 | # } | |
07536ddd | 619 | ## |
07536ddd LV |
620 | { 'command': 'x-query-virtio-queue-status', |
621 | 'data': { 'path': 'str', 'queue': 'uint16' }, | |
622 | 'returns': 'VirtQueueStatus', | |
623 | 'features': [ 'unstable' ] } | |
624 | ||
625 | ## | |
626 | # @VirtVhostQueueStatus: | |
627 | # | |
628 | # Information of a vhost device's vhost_virtqueue, including most | |
629 | # members of the vhost_dev vhost_virtqueue data structure. | |
630 | # | |
631 | # @name: Name of the VirtIODevice that uses this vhost_virtqueue | |
632 | # | |
633 | # @kick: vhost_virtqueue kick | |
634 | # | |
635 | # @call: vhost_virtqueue call | |
636 | # | |
637 | # @desc: vhost_virtqueue desc | |
638 | # | |
639 | # @avail: vhost_virtqueue avail | |
640 | # | |
641 | # @used: vhost_virtqueue used | |
642 | # | |
643 | # @num: vhost_virtqueue num | |
644 | # | |
645 | # @desc-phys: vhost_virtqueue desc_phys (descriptor area phys. addr.) | |
646 | # | |
647 | # @desc-size: vhost_virtqueue desc_size | |
648 | # | |
649 | # @avail-phys: vhost_virtqueue avail_phys (driver area phys. addr.) | |
650 | # | |
651 | # @avail-size: vhost_virtqueue avail_size | |
652 | # | |
653 | # @used-phys: vhost_virtqueue used_phys (device area phys. addr.) | |
654 | # | |
655 | # @used-size: vhost_virtqueue used_size | |
656 | # | |
58379af7 | 657 | # Since: 7.2 |
07536ddd | 658 | ## |
07536ddd LV |
659 | { 'struct': 'VirtVhostQueueStatus', |
660 | 'data': { 'name': 'str', | |
661 | 'kick': 'int', | |
662 | 'call': 'int', | |
663 | 'desc': 'uint64', | |
664 | 'avail': 'uint64', | |
665 | 'used': 'uint64', | |
666 | 'num': 'int', | |
667 | 'desc-phys': 'uint64', | |
668 | 'desc-size': 'uint32', | |
669 | 'avail-phys': 'uint64', | |
670 | 'avail-size': 'uint32', | |
671 | 'used-phys': 'uint64', | |
672 | 'used-size': 'uint32' } } | |
673 | ||
674 | ## | |
675 | # @x-query-virtio-vhost-queue-status: | |
676 | # | |
677 | # Return information of a given vhost device's vhost_virtqueue | |
678 | # | |
679 | # @path: VirtIODevice canonical QOM path | |
680 | # | |
681 | # @queue: vhost_virtqueue index to examine | |
682 | # | |
683 | # Features: | |
a937b6aa | 684 | # |
07536ddd LV |
685 | # @unstable: This command is meant for debugging. |
686 | # | |
687 | # Returns: VirtVhostQueueStatus of the vhost_virtqueue | |
688 | # | |
58379af7 | 689 | # Since: 7.2 |
07536ddd LV |
690 | # |
691 | # Examples: | |
692 | # | |
693 | # 1. Get vhost_virtqueue status for vhost-crypto | |
694 | # | |
695 | # -> { "execute": "x-query-virtio-vhost-queue-status", | |
696 | # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", | |
697 | # "queue": 0 } | |
698 | # } | |
699 | # <- { "return": { | |
700 | # "avail-phys": 5216124928, | |
701 | # "name": "virtio-crypto", | |
702 | # "used-phys": 5216127040, | |
703 | # "avail-size": 2054, | |
704 | # "desc-size": 16384, | |
705 | # "used-size": 8198, | |
706 | # "desc": 140141447430144, | |
707 | # "num": 1024, | |
708 | # "call": 0, | |
709 | # "avail": 140141447446528, | |
710 | # "desc-phys": 5216108544, | |
711 | # "used": 140141447448640, | |
712 | # "kick": 0 | |
713 | # } | |
714 | # } | |
715 | # | |
716 | # 2. Get vhost_virtqueue status for vhost-vsock | |
717 | # | |
718 | # -> { "execute": "x-query-virtio-vhost-queue-status", | |
719 | # "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", | |
720 | # "queue": 0 } | |
721 | # } | |
722 | # <- { "return": { | |
723 | # "avail-phys": 5182261248, | |
724 | # "name": "vhost-vsock", | |
725 | # "used-phys": 5182261568, | |
726 | # "avail-size": 262, | |
727 | # "desc-size": 2048, | |
728 | # "used-size": 1030, | |
729 | # "desc": 140141413580800, | |
730 | # "num": 128, | |
731 | # "call": 0, | |
732 | # "avail": 140141413582848, | |
733 | # "desc-phys": 5182259200, | |
734 | # "used": 140141413583168, | |
735 | # "kick": 0 | |
736 | # } | |
737 | # } | |
07536ddd | 738 | ## |
07536ddd LV |
739 | { 'command': 'x-query-virtio-vhost-queue-status', |
740 | 'data': { 'path': 'str', 'queue': 'uint16' }, | |
741 | 'returns': 'VirtVhostQueueStatus', | |
742 | 'features': [ 'unstable' ] } | |
1ee7bb5b LV |
743 | |
744 | ## | |
745 | # @VirtioRingDesc: | |
746 | # | |
747 | # Information regarding the vring descriptor area | |
748 | # | |
749 | # @addr: Guest physical address of the descriptor area | |
750 | # | |
751 | # @len: Length of the descriptor area | |
752 | # | |
753 | # @flags: List of descriptor flags | |
754 | # | |
58379af7 | 755 | # Since: 7.2 |
1ee7bb5b | 756 | ## |
1ee7bb5b LV |
757 | { 'struct': 'VirtioRingDesc', |
758 | 'data': { 'addr': 'uint64', | |
759 | 'len': 'uint32', | |
760 | 'flags': [ 'str' ] } } | |
761 | ||
762 | ## | |
763 | # @VirtioRingAvail: | |
764 | # | |
765 | # Information regarding the avail vring (a.k.a. driver area) | |
766 | # | |
767 | # @flags: VRingAvail flags | |
768 | # | |
769 | # @idx: VRingAvail index | |
770 | # | |
771 | # @ring: VRingAvail ring[] entry at provided index | |
772 | # | |
58379af7 | 773 | # Since: 7.2 |
1ee7bb5b | 774 | ## |
1ee7bb5b LV |
775 | { 'struct': 'VirtioRingAvail', |
776 | 'data': { 'flags': 'uint16', | |
777 | 'idx': 'uint16', | |
778 | 'ring': 'uint16' } } | |
779 | ||
780 | ## | |
781 | # @VirtioRingUsed: | |
782 | # | |
783 | # Information regarding the used vring (a.k.a. device area) | |
784 | # | |
785 | # @flags: VRingUsed flags | |
786 | # | |
787 | # @idx: VRingUsed index | |
788 | # | |
58379af7 | 789 | # Since: 7.2 |
1ee7bb5b | 790 | ## |
1ee7bb5b LV |
791 | { 'struct': 'VirtioRingUsed', |
792 | 'data': { 'flags': 'uint16', | |
793 | 'idx': 'uint16' } } | |
794 | ||
795 | ## | |
796 | # @VirtioQueueElement: | |
797 | # | |
798 | # Information regarding a VirtQueue's VirtQueueElement including | |
799 | # descriptor, driver, and device areas | |
800 | # | |
801 | # @name: Name of the VirtIODevice that uses this VirtQueue | |
802 | # | |
803 | # @index: Index of the element in the queue | |
804 | # | |
805 | # @descs: List of descriptors (VirtioRingDesc) | |
806 | # | |
807 | # @avail: VRingAvail info | |
808 | # | |
809 | # @used: VRingUsed info | |
810 | # | |
58379af7 | 811 | # Since: 7.2 |
1ee7bb5b | 812 | ## |
1ee7bb5b LV |
813 | { 'struct': 'VirtioQueueElement', |
814 | 'data': { 'name': 'str', | |
815 | 'index': 'uint32', | |
816 | 'descs': [ 'VirtioRingDesc' ], | |
817 | 'avail': 'VirtioRingAvail', | |
818 | 'used': 'VirtioRingUsed' } } | |
819 | ||
820 | ## | |
821 | # @x-query-virtio-queue-element: | |
822 | # | |
823 | # Return the information about a VirtQueue's VirtQueueElement | |
824 | # | |
825 | # @path: VirtIODevice canonical QOM path | |
826 | # | |
827 | # @queue: VirtQueue index to examine | |
828 | # | |
a937b6aa MA |
829 | # @index: Index of the element in the queue (default: head of the |
830 | # queue) | |
1ee7bb5b LV |
831 | # |
832 | # Features: | |
a937b6aa | 833 | # |
1ee7bb5b LV |
834 | # @unstable: This command is meant for debugging. |
835 | # | |
836 | # Returns: VirtioQueueElement information | |
837 | # | |
58379af7 | 838 | # Since: 7.2 |
1ee7bb5b LV |
839 | # |
840 | # Examples: | |
841 | # | |
842 | # 1. Introspect on virtio-net's VirtQueue 0 at index 5 | |
843 | # | |
844 | # -> { "execute": "x-query-virtio-queue-element", | |
845 | # "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend", | |
846 | # "queue": 0, | |
847 | # "index": 5 } | |
848 | # } | |
849 | # <- { "return": { | |
850 | # "index": 5, | |
851 | # "name": "virtio-net", | |
852 | # "descs": [ | |
853 | # { | |
854 | # "flags": ["write"], | |
855 | # "len": 1536, | |
856 | # "addr": 5257305600 | |
857 | # } | |
858 | # ], | |
859 | # "avail": { | |
860 | # "idx": 256, | |
861 | # "flags": 0, | |
862 | # "ring": 5 | |
863 | # }, | |
864 | # "used": { | |
865 | # "idx": 13, | |
866 | # "flags": 0 | |
867 | # } | |
868 | # } | |
869 | # } | |
870 | # | |
871 | # 2. Introspect on virtio-crypto's VirtQueue 1 at head | |
872 | # | |
873 | # -> { "execute": "x-query-virtio-queue-element", | |
874 | # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", | |
875 | # "queue": 1 } | |
876 | # } | |
877 | # <- { "return": { | |
878 | # "index": 0, | |
879 | # "name": "virtio-crypto", | |
880 | # "descs": [ | |
881 | # { | |
882 | # "flags": [], | |
883 | # "len": 0, | |
884 | # "addr": 8080268923184214134 | |
885 | # } | |
886 | # ], | |
887 | # "avail": { | |
888 | # "idx": 280, | |
889 | # "flags": 0, | |
890 | # "ring": 0 | |
891 | # }, | |
892 | # "used": { | |
893 | # "idx": 280, | |
894 | # "flags": 0 | |
895 | # } | |
896 | # } | |
897 | # } | |
898 | # | |
899 | # 3. Introspect on virtio-scsi's VirtQueue 2 at head | |
900 | # | |
901 | # -> { "execute": "x-query-virtio-queue-element", | |
902 | # "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend", | |
903 | # "queue": 2 } | |
904 | # } | |
905 | # <- { "return": { | |
906 | # "index": 19, | |
907 | # "name": "virtio-scsi", | |
908 | # "descs": [ | |
909 | # { | |
910 | # "flags": ["used", "indirect", "write"], | |
911 | # "len": 4099327944, | |
912 | # "addr": 12055409292258155293 | |
913 | # } | |
914 | # ], | |
915 | # "avail": { | |
916 | # "idx": 1147, | |
917 | # "flags": 0, | |
918 | # "ring": 19 | |
919 | # }, | |
920 | # "used": { | |
921 | # "idx": 280, | |
922 | # "flags": 0 | |
923 | # } | |
924 | # } | |
925 | # } | |
1ee7bb5b | 926 | ## |
1ee7bb5b LV |
927 | { 'command': 'x-query-virtio-queue-element', |
928 | 'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' }, | |
929 | 'returns': 'VirtioQueueElement', | |
930 | 'features': [ 'unstable' ] } |