]> git.proxmox.com Git - mirror_qemu.git/blame - qapi/virtio.json
Merge tag 'migration-20240126-pull-request' of https://gitlab.com/peterx/qemu into...
[mirror_qemu.git] / qapi / virtio.json
CommitLineData
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' ] }
cf03a152
SH
931
932##
933# @IOThreadVirtQueueMapping:
934#
935# Describes the subset of virtqueues assigned to an IOThread.
936#
937# @iothread: the id of IOThread object
938#
939# @vqs: an optional array of virtqueue indices that will be handled by this
940# IOThread. When absent, virtqueues are assigned round-robin across all
941# IOThreadVirtQueueMappings provided. Either all IOThreadVirtQueueMappings
942# must have @vqs or none of them must have it.
943#
944# Since: 9.0
945##
946
947{ 'struct': 'IOThreadVirtQueueMapping',
948 'data': { 'iothread': 'str', '*vqs': ['uint16'] } }
949
950##
951# @DummyVirtioForceArrays:
952#
953# Not used by QMP; hack to let us use IOThreadVirtQueueMappingList internally
954#
955# Since: 9.0
956##
957
958{ 'struct': 'DummyVirtioForceArrays',
959 'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } }