xref: /openbmc/qemu/qapi/virtio.json (revision 78dfb7b0d325ed9433b2adbb77ffd075a8b6b89a)
1a5ebce38SLaurent Vivier# -*- Mode: Python -*-
2a5ebce38SLaurent Vivier# vim: filetype=python
3a5ebce38SLaurent Vivier#
4a5ebce38SLaurent Vivier
5a5ebce38SLaurent Vivier##
6a5ebce38SLaurent Vivier# = Virtio devices
7a5ebce38SLaurent Vivier##
8a5ebce38SLaurent Vivier
9a5ebce38SLaurent Vivier##
10a5ebce38SLaurent Vivier# @VirtioInfo:
11a5ebce38SLaurent Vivier#
12a5ebce38SLaurent Vivier# Basic information about a given VirtIODevice
13a5ebce38SLaurent Vivier#
14a5ebce38SLaurent Vivier# @path: The VirtIODevice's canonical QOM path
15a5ebce38SLaurent Vivier#
16a5ebce38SLaurent Vivier# @name: Name of the VirtIODevice
17a5ebce38SLaurent Vivier#
1858379af7SHan Han# Since: 7.2
19a5ebce38SLaurent Vivier##
20a5ebce38SLaurent Vivier{ 'struct': 'VirtioInfo',
21a5ebce38SLaurent Vivier  'data': { 'path': 'str',
22a5ebce38SLaurent Vivier            'name': 'str' } }
23a5ebce38SLaurent Vivier
24a5ebce38SLaurent Vivier##
25a5ebce38SLaurent Vivier# @x-query-virtio:
26a5ebce38SLaurent Vivier#
27a5ebce38SLaurent Vivier# Returns a list of all realized VirtIODevices
28a5ebce38SLaurent Vivier#
29a5ebce38SLaurent Vivier# Features:
30a937b6aaSMarkus Armbruster#
31a5ebce38SLaurent Vivier# @unstable: This command is meant for debugging.
32a5ebce38SLaurent Vivier#
33a5ebce38SLaurent Vivier# Returns: List of gathered VirtIODevices
34a5ebce38SLaurent Vivier#
3558379af7SHan Han# Since: 7.2
36a5ebce38SLaurent Vivier#
3714b48aaaSJohn Snow# .. qmp-example::
38a5ebce38SLaurent Vivier#
39a5ebce38SLaurent Vivier#     -> { "execute": "x-query-virtio" }
40a5ebce38SLaurent Vivier#     <- { "return": [
41a5ebce38SLaurent Vivier#              {
42a5ebce38SLaurent Vivier#                  "name": "virtio-input",
43a5ebce38SLaurent Vivier#                  "path": "/machine/peripheral-anon/device[4]/virtio-backend"
44a5ebce38SLaurent Vivier#              },
45a5ebce38SLaurent Vivier#              {
46a5ebce38SLaurent Vivier#                  "name": "virtio-crypto",
47a5ebce38SLaurent Vivier#                  "path": "/machine/peripheral/crypto0/virtio-backend"
48a5ebce38SLaurent Vivier#              },
49a5ebce38SLaurent Vivier#              {
50a5ebce38SLaurent Vivier#                  "name": "virtio-scsi",
51a5ebce38SLaurent Vivier#                  "path": "/machine/peripheral-anon/device[2]/virtio-backend"
52a5ebce38SLaurent Vivier#              },
53a5ebce38SLaurent Vivier#              {
54a5ebce38SLaurent Vivier#                  "name": "virtio-net",
55a5ebce38SLaurent Vivier#                  "path": "/machine/peripheral-anon/device[1]/virtio-backend"
56a5ebce38SLaurent Vivier#              },
57a5ebce38SLaurent Vivier#              {
58a5ebce38SLaurent Vivier#                  "name": "virtio-serial",
59a5ebce38SLaurent Vivier#                  "path": "/machine/peripheral-anon/device[0]/virtio-backend"
60a5ebce38SLaurent Vivier#              }
61a5ebce38SLaurent Vivier#          ]
62a5ebce38SLaurent Vivier#        }
63a5ebce38SLaurent Vivier##
64a5ebce38SLaurent Vivier{ 'command': 'x-query-virtio',
65a5ebce38SLaurent Vivier  'returns': [ 'VirtioInfo' ],
66a5ebce38SLaurent Vivier  'features': [ 'unstable' ] }
6790c066cdSLaurent Vivier
6890c066cdSLaurent Vivier##
6990c066cdSLaurent Vivier# @VhostStatus:
7090c066cdSLaurent Vivier#
7190c066cdSLaurent Vivier# Information about a vhost device.  This information will only be
7290c066cdSLaurent Vivier# displayed if the vhost device is active.
7390c066cdSLaurent Vivier#
7490c066cdSLaurent Vivier# @n-mem-sections: vhost_dev n_mem_sections
7590c066cdSLaurent Vivier#
7690c066cdSLaurent Vivier# @n-tmp-sections: vhost_dev n_tmp_sections
7790c066cdSLaurent Vivier#
7890c066cdSLaurent Vivier# @nvqs: vhost_dev nvqs (number of virtqueues being used)
7990c066cdSLaurent Vivier#
8090c066cdSLaurent Vivier# @vq-index: vhost_dev vq_index
8190c066cdSLaurent Vivier#
8290c066cdSLaurent Vivier# @features: vhost_dev features
8390c066cdSLaurent Vivier#
8490c066cdSLaurent Vivier# @acked-features: vhost_dev acked_features
8590c066cdSLaurent Vivier#
8690c066cdSLaurent Vivier# @backend-features: vhost_dev backend_features
8790c066cdSLaurent Vivier#
8890c066cdSLaurent Vivier# @protocol-features: vhost_dev protocol_features
8990c066cdSLaurent Vivier#
9090c066cdSLaurent Vivier# @max-queues: vhost_dev max_queues
9190c066cdSLaurent Vivier#
9290c066cdSLaurent Vivier# @backend-cap: vhost_dev backend_cap
9390c066cdSLaurent Vivier#
9490c066cdSLaurent Vivier# @log-enabled: vhost_dev log_enabled flag
9590c066cdSLaurent Vivier#
9690c066cdSLaurent Vivier# @log-size: vhost_dev log_size
9790c066cdSLaurent Vivier#
9858379af7SHan Han# Since: 7.2
9990c066cdSLaurent Vivier##
10090c066cdSLaurent Vivier{ 'struct': 'VhostStatus',
10190c066cdSLaurent Vivier  'data': { 'n-mem-sections': 'int',
10290c066cdSLaurent Vivier            'n-tmp-sections': 'int',
10390c066cdSLaurent Vivier            'nvqs': 'uint32',
10490c066cdSLaurent Vivier            'vq-index': 'int',
105f3034ad7SLaurent Vivier            'features': 'VirtioDeviceFeatures',
106f3034ad7SLaurent Vivier            'acked-features': 'VirtioDeviceFeatures',
107f3034ad7SLaurent Vivier            'backend-features': 'VirtioDeviceFeatures',
108f3034ad7SLaurent Vivier            'protocol-features': 'VhostDeviceProtocols',
10990c066cdSLaurent Vivier            'max-queues': 'uint64',
11090c066cdSLaurent Vivier            'backend-cap': 'uint64',
11190c066cdSLaurent Vivier            'log-enabled': 'bool',
11290c066cdSLaurent Vivier            'log-size': 'uint64' } }
11390c066cdSLaurent Vivier
11490c066cdSLaurent Vivier##
11590c066cdSLaurent Vivier# @VirtioStatus:
11690c066cdSLaurent Vivier#
11790c066cdSLaurent Vivier# Full status of the virtio device with most VirtIODevice members.
118a937b6aaSMarkus Armbruster# Also includes the full status of the corresponding vhost device if
119a937b6aaSMarkus Armbruster# the vhost device is active.
12090c066cdSLaurent Vivier#
12190c066cdSLaurent Vivier# @name: VirtIODevice name
12290c066cdSLaurent Vivier#
12390c066cdSLaurent Vivier# @device-id: VirtIODevice ID
12490c066cdSLaurent Vivier#
12590c066cdSLaurent Vivier# @vhost-started: VirtIODevice vhost_started flag
12690c066cdSLaurent Vivier#
12790c066cdSLaurent Vivier# @guest-features: VirtIODevice guest_features
12890c066cdSLaurent Vivier#
12990c066cdSLaurent Vivier# @host-features: VirtIODevice host_features
13090c066cdSLaurent Vivier#
13190c066cdSLaurent Vivier# @backend-features: VirtIODevice backend_features
13290c066cdSLaurent Vivier#
13390c066cdSLaurent Vivier# @device-endian: VirtIODevice device_endian
13490c066cdSLaurent Vivier#
135a937b6aaSMarkus Armbruster# @num-vqs: VirtIODevice virtqueue count.  This is the number of
136a937b6aaSMarkus Armbruster#     active virtqueues being used by the VirtIODevice.
13790c066cdSLaurent Vivier#
13890c066cdSLaurent Vivier# @status: VirtIODevice configuration status (VirtioDeviceStatus)
13990c066cdSLaurent Vivier#
14090c066cdSLaurent Vivier# @isr: VirtIODevice ISR
14190c066cdSLaurent Vivier#
14290c066cdSLaurent Vivier# @queue-sel: VirtIODevice queue_sel
14390c066cdSLaurent Vivier#
14490c066cdSLaurent Vivier# @vm-running: VirtIODevice vm_running flag
14590c066cdSLaurent Vivier#
14690c066cdSLaurent Vivier# @broken: VirtIODevice broken flag
14790c066cdSLaurent Vivier#
14890c066cdSLaurent Vivier# @disabled: VirtIODevice disabled flag
14990c066cdSLaurent Vivier#
15090c066cdSLaurent Vivier# @use-started: VirtIODevice use_started flag
15190c066cdSLaurent Vivier#
15290c066cdSLaurent Vivier# @started: VirtIODevice started flag
15390c066cdSLaurent Vivier#
15490c066cdSLaurent Vivier# @start-on-kick: VirtIODevice start_on_kick flag
15590c066cdSLaurent Vivier#
15690c066cdSLaurent Vivier# @disable-legacy-check: VirtIODevice disabled_legacy_check flag
15790c066cdSLaurent Vivier#
15890c066cdSLaurent Vivier# @bus-name: VirtIODevice bus_name
15990c066cdSLaurent Vivier#
16090c066cdSLaurent Vivier# @use-guest-notifier-mask: VirtIODevice use_guest_notifier_mask flag
16190c066cdSLaurent Vivier#
162a937b6aaSMarkus Armbruster# @vhost-dev: Corresponding vhost device info for a given
163a937b6aaSMarkus Armbruster#     VirtIODevice.  Present if the given VirtIODevice has an active
164a937b6aaSMarkus Armbruster#     vhost device.
16590c066cdSLaurent Vivier#
16658379af7SHan Han# Since: 7.2
16790c066cdSLaurent Vivier##
16890c066cdSLaurent Vivier{ 'struct': 'VirtioStatus',
16990c066cdSLaurent Vivier  'data': { 'name': 'str',
17090c066cdSLaurent Vivier            'device-id': 'uint16',
17190c066cdSLaurent Vivier            'vhost-started': 'bool',
17290c066cdSLaurent Vivier            'device-endian': 'str',
173f3034ad7SLaurent Vivier            'guest-features': 'VirtioDeviceFeatures',
174f3034ad7SLaurent Vivier            'host-features': 'VirtioDeviceFeatures',
175f3034ad7SLaurent Vivier            'backend-features': 'VirtioDeviceFeatures',
17690c066cdSLaurent Vivier            'num-vqs': 'int',
177f3034ad7SLaurent Vivier            'status': 'VirtioDeviceStatus',
17890c066cdSLaurent Vivier            'isr': 'uint8',
17990c066cdSLaurent Vivier            'queue-sel': 'uint16',
18090c066cdSLaurent Vivier            'vm-running': 'bool',
18190c066cdSLaurent Vivier            'broken': 'bool',
18290c066cdSLaurent Vivier            'disabled': 'bool',
18390c066cdSLaurent Vivier            'use-started': 'bool',
18490c066cdSLaurent Vivier            'started': 'bool',
18590c066cdSLaurent Vivier            'start-on-kick': 'bool',
18690c066cdSLaurent Vivier            'disable-legacy-check': 'bool',
18790c066cdSLaurent Vivier            'bus-name': 'str',
18890c066cdSLaurent Vivier            'use-guest-notifier-mask': 'bool',
18990c066cdSLaurent Vivier            '*vhost-dev': 'VhostStatus' } }
19090c066cdSLaurent Vivier
19190c066cdSLaurent Vivier##
19290c066cdSLaurent Vivier# @x-query-virtio-status:
19390c066cdSLaurent Vivier#
19490c066cdSLaurent Vivier# Poll for a comprehensive status of a given virtio device
19590c066cdSLaurent Vivier#
19690c066cdSLaurent Vivier# @path: Canonical QOM path of the VirtIODevice
19790c066cdSLaurent Vivier#
19890c066cdSLaurent Vivier# Features:
199a937b6aaSMarkus Armbruster#
20090c066cdSLaurent Vivier# @unstable: This command is meant for debugging.
20190c066cdSLaurent Vivier#
20290c066cdSLaurent Vivier# Returns: VirtioStatus of the virtio device
20390c066cdSLaurent Vivier#
20458379af7SHan Han# Since: 7.2
20590c066cdSLaurent Vivier#
2066f07c59fSJohn Snow# .. qmp-example::
2076f07c59fSJohn Snow#    :annotated:
20890c066cdSLaurent Vivier#
2096f07c59fSJohn Snow#    Poll for the status of virtio-crypto (no vhost-crypto active)
2106f07c59fSJohn Snow#    ::
21190c066cdSLaurent Vivier#
21290c066cdSLaurent Vivier#     -> { "execute": "x-query-virtio-status",
21390c066cdSLaurent Vivier#          "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" }
21490c066cdSLaurent Vivier#        }
21590c066cdSLaurent Vivier#     <- { "return": {
21690c066cdSLaurent Vivier#              "device-endian": "little",
21790c066cdSLaurent Vivier#              "bus-name": "",
21890c066cdSLaurent Vivier#              "disable-legacy-check": false,
21990c066cdSLaurent Vivier#              "name": "virtio-crypto",
22090c066cdSLaurent Vivier#              "started": true,
22190c066cdSLaurent Vivier#              "device-id": 20,
222f3034ad7SLaurent Vivier#              "backend-features": {
223f3034ad7SLaurent Vivier#                  "transports": [],
224f3034ad7SLaurent Vivier#                  "dev-features": []
225f3034ad7SLaurent Vivier#              },
22690c066cdSLaurent Vivier#              "start-on-kick": false,
22790c066cdSLaurent Vivier#              "isr": 1,
22890c066cdSLaurent Vivier#              "broken": false,
229f3034ad7SLaurent Vivier#              "status": {
230f3034ad7SLaurent Vivier#                  "statuses": [
231f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
232f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
233f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
234f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
235f3034ad7SLaurent Vivier#                  ]
236f3034ad7SLaurent Vivier#              },
23790c066cdSLaurent Vivier#              "num-vqs": 2,
238f3034ad7SLaurent Vivier#              "guest-features": {
239f3034ad7SLaurent Vivier#                  "dev-features": [],
240f3034ad7SLaurent Vivier#                  "transports": [
241f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
242f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
243f3034ad7SLaurent Vivier#                      "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
244f3034ad7SLaurent Vivier#                  ]
245f3034ad7SLaurent Vivier#              },
246f3034ad7SLaurent Vivier#              "host-features": {
247f3034ad7SLaurent Vivier#                  "unknown-dev-features": 1073741824,
248f3034ad7SLaurent Vivier#                  "dev-features": [],
249f3034ad7SLaurent Vivier#                  "transports": [
250f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
251f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
252f3034ad7SLaurent Vivier#                      "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
253f3034ad7SLaurent Vivier#                      "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
254f3034ad7SLaurent Vivier#                      "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
255f3034ad7SLaurent Vivier#                  ]
256f3034ad7SLaurent Vivier#              },
25790c066cdSLaurent Vivier#              "use-guest-notifier-mask": true,
25890c066cdSLaurent Vivier#              "vm-running": true,
25990c066cdSLaurent Vivier#              "queue-sel": 1,
26090c066cdSLaurent Vivier#              "disabled": false,
26190c066cdSLaurent Vivier#              "vhost-started": false,
26290c066cdSLaurent Vivier#              "use-started": true
26390c066cdSLaurent Vivier#          }
26490c066cdSLaurent Vivier#        }
26590c066cdSLaurent Vivier#
2666f07c59fSJohn Snow# .. qmp-example::
2676f07c59fSJohn Snow#    :annotated:
2686f07c59fSJohn Snow#
2696f07c59fSJohn Snow#    Poll for the status of virtio-net (vhost-net is active)
2706f07c59fSJohn Snow#    ::
27190c066cdSLaurent Vivier#
27290c066cdSLaurent Vivier#     -> { "execute": "x-query-virtio-status",
27390c066cdSLaurent Vivier#          "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" }
27490c066cdSLaurent Vivier#        }
27590c066cdSLaurent Vivier#     <- { "return": {
27690c066cdSLaurent Vivier#              "device-endian": "little",
27790c066cdSLaurent Vivier#              "bus-name": "",
27890c066cdSLaurent Vivier#              "disabled-legacy-check": false,
27990c066cdSLaurent Vivier#              "name": "virtio-net",
28090c066cdSLaurent Vivier#              "started": true,
28190c066cdSLaurent Vivier#              "device-id": 1,
28290c066cdSLaurent Vivier#              "vhost-dev": {
28390c066cdSLaurent Vivier#                  "n-tmp-sections": 4,
28490c066cdSLaurent Vivier#                  "n-mem-sections": 4,
28590c066cdSLaurent Vivier#                  "max-queues": 1,
28690c066cdSLaurent Vivier#                  "backend-cap": 2,
28790c066cdSLaurent Vivier#                  "log-size": 0,
288f3034ad7SLaurent Vivier#                  "backend-features": {
289f3034ad7SLaurent Vivier#                      "dev-features": [],
290f3034ad7SLaurent Vivier#                      "transports": []
291f3034ad7SLaurent Vivier#                  },
29290c066cdSLaurent Vivier#                  "nvqs": 2,
293f3034ad7SLaurent Vivier#                  "protocol-features": {
294f3034ad7SLaurent Vivier#                      "protocols": []
295f3034ad7SLaurent Vivier#                  },
29690c066cdSLaurent Vivier#                  "vq-index": 0,
29790c066cdSLaurent Vivier#                  "log-enabled": false,
298f3034ad7SLaurent Vivier#                  "acked-features": {
299f3034ad7SLaurent Vivier#                      "dev-features": [
300f3034ad7SLaurent Vivier#                          "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
301f3034ad7SLaurent Vivier#                      ],
302f3034ad7SLaurent Vivier#                      "transports": [
303f3034ad7SLaurent Vivier#                          "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
304f3034ad7SLaurent Vivier#                          "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
305f3034ad7SLaurent Vivier#                          "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
306f3034ad7SLaurent Vivier#                      ]
30790c066cdSLaurent Vivier#                  },
308f3034ad7SLaurent Vivier#                  "features": {
309f3034ad7SLaurent Vivier#                      "dev-features": [
310f3034ad7SLaurent Vivier#                          "VHOST_F_LOG_ALL: Logging write descriptors supported",
311f3034ad7SLaurent Vivier#                          "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
312f3034ad7SLaurent Vivier#                      ],
313f3034ad7SLaurent Vivier#                      "transports": [
314f3034ad7SLaurent Vivier#                          "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
315f3034ad7SLaurent Vivier#                          "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
316f3034ad7SLaurent Vivier#                          "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform",
317f3034ad7SLaurent Vivier#                          "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
318f3034ad7SLaurent Vivier#                          "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
319f3034ad7SLaurent Vivier#                          "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
320f3034ad7SLaurent Vivier#                      ]
321f3034ad7SLaurent Vivier#                  }
322f3034ad7SLaurent Vivier#              },
323f3034ad7SLaurent Vivier#              "backend-features": {
324f3034ad7SLaurent Vivier#                  "dev-features": [
3252cb40d44SStefan Weil#                      "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
326f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
327f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
328f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
329f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
330f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
331f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
332f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VQ: Control channel available",
333f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_STATUS: Configuration status field available",
334f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
335f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
336f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
337f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
338f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
339f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
340f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
341f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
342f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
343f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MAC: Device has given MAC address",
344f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
345f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
346f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
347f3034ad7SLaurent Vivier#                  ],
348f3034ad7SLaurent Vivier#                  "transports": [
349f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
350f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
351f3034ad7SLaurent Vivier#                      "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
352f3034ad7SLaurent Vivier#                      "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
353f3034ad7SLaurent Vivier#                      "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
354f3034ad7SLaurent Vivier#                  ]
355f3034ad7SLaurent Vivier#              },
35690c066cdSLaurent Vivier#              "start-on-kick": false,
35790c066cdSLaurent Vivier#              "isr": 1,
35890c066cdSLaurent Vivier#              "broken": false,
359f3034ad7SLaurent Vivier#              "status": {
360f3034ad7SLaurent Vivier#                  "statuses": [
361f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
362f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
363f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
364f3034ad7SLaurent Vivier#                      "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
365f3034ad7SLaurent Vivier#                  ]
366f3034ad7SLaurent Vivier#              },
36790c066cdSLaurent Vivier#              "num-vqs": 3,
368f3034ad7SLaurent Vivier#              "guest-features": {
369f3034ad7SLaurent Vivier#                  "dev-features": [
370f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
371f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
372f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
373f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
374f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VQ: Control channel available",
375f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_STATUS: Configuration status field available",
376f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
377f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
378f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
379f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
380f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
381f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
382f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
383f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
384f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
385f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MAC: Device has given MAC address",
386f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
387f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
388f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
389f3034ad7SLaurent Vivier#                  ],
390f3034ad7SLaurent Vivier#                  "transports": [
391f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
392f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
393f3034ad7SLaurent Vivier#                      "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
394f3034ad7SLaurent Vivier#                 ]
395f3034ad7SLaurent Vivier#              },
396f3034ad7SLaurent Vivier#              "host-features": {
397f3034ad7SLaurent Vivier#                  "dev-features": [
3982cb40d44SStefan Weil#                      "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
399f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
400f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
401f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
402f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
403f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
404f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
405f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_VQ: Control channel available",
406f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_STATUS: Configuration status field available",
407f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
408f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
409f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
410f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
411f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
412f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
413f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
414f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
415f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
416f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_MAC: Device has given MAC address",
417f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
418f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
419f3034ad7SLaurent Vivier#                      "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
420f3034ad7SLaurent Vivier#                  ],
421f3034ad7SLaurent Vivier#                  "transports": [
422f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
423f3034ad7SLaurent Vivier#                      "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
424f3034ad7SLaurent Vivier#                      "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
425f3034ad7SLaurent Vivier#                      "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
426f3034ad7SLaurent Vivier#                      "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
427f3034ad7SLaurent Vivier#                 ]
428f3034ad7SLaurent Vivier#              },
42990c066cdSLaurent Vivier#              "use-guest-notifier-mask": true,
43090c066cdSLaurent Vivier#              "vm-running": true,
43190c066cdSLaurent Vivier#              "queue-sel": 2,
43290c066cdSLaurent Vivier#              "disabled": false,
43390c066cdSLaurent Vivier#              "vhost-started": true,
43490c066cdSLaurent Vivier#              "use-started": true
43590c066cdSLaurent Vivier#          }
43690c066cdSLaurent Vivier#        }
43790c066cdSLaurent Vivier##
43890c066cdSLaurent Vivier{ 'command': 'x-query-virtio-status',
43990c066cdSLaurent Vivier  'data': { 'path': 'str' },
44090c066cdSLaurent Vivier  'returns': 'VirtioStatus',
44190c066cdSLaurent Vivier  'features': [ 'unstable' ] }
442f3034ad7SLaurent Vivier
443f3034ad7SLaurent Vivier##
444f3034ad7SLaurent Vivier# @VirtioDeviceStatus:
445f3034ad7SLaurent Vivier#
446f3034ad7SLaurent Vivier# A structure defined to list the configuration statuses of a virtio
447f3034ad7SLaurent Vivier# device
448f3034ad7SLaurent Vivier#
449f3034ad7SLaurent Vivier# @statuses: List of decoded configuration statuses of the virtio
450f3034ad7SLaurent Vivier#     device
451f3034ad7SLaurent Vivier#
452a937b6aaSMarkus Armbruster# @unknown-statuses: Virtio device statuses bitmap that have not been
453a937b6aaSMarkus Armbruster#     decoded
454f3034ad7SLaurent Vivier#
45558379af7SHan Han# Since: 7.2
456f3034ad7SLaurent Vivier##
457f3034ad7SLaurent Vivier{ 'struct': 'VirtioDeviceStatus',
458f3034ad7SLaurent Vivier  'data': { 'statuses': [ 'str' ],
459f3034ad7SLaurent Vivier            '*unknown-statuses': 'uint8' } }
460f3034ad7SLaurent Vivier
461f3034ad7SLaurent Vivier##
462f3034ad7SLaurent Vivier# @VhostDeviceProtocols:
463f3034ad7SLaurent Vivier#
464f3034ad7SLaurent Vivier# A structure defined to list the vhost user protocol features of a
465f3034ad7SLaurent Vivier# Vhost User device
466f3034ad7SLaurent Vivier#
467f3034ad7SLaurent Vivier# @protocols: List of decoded vhost user protocol features of a vhost
468f3034ad7SLaurent Vivier#     user device
469f3034ad7SLaurent Vivier#
470f3034ad7SLaurent Vivier# @unknown-protocols: Vhost user device protocol features bitmap that
471f3034ad7SLaurent Vivier#     have not been decoded
472f3034ad7SLaurent Vivier#
47358379af7SHan Han# Since: 7.2
474f3034ad7SLaurent Vivier##
475f3034ad7SLaurent Vivier{ 'struct': 'VhostDeviceProtocols',
476f3034ad7SLaurent Vivier  'data': { 'protocols': [ 'str' ],
477f3034ad7SLaurent Vivier            '*unknown-protocols': 'uint64' } }
478f3034ad7SLaurent Vivier
479f3034ad7SLaurent Vivier##
480f3034ad7SLaurent Vivier# @VirtioDeviceFeatures:
481f3034ad7SLaurent Vivier#
482f3034ad7SLaurent Vivier# The common fields that apply to most Virtio devices.  Some devices
483f3034ad7SLaurent Vivier# may not have their own device-specific features (e.g. virtio-rng).
484f3034ad7SLaurent Vivier#
485f3034ad7SLaurent Vivier# @transports: List of transport features of the virtio device
486f3034ad7SLaurent Vivier#
487f3034ad7SLaurent Vivier# @dev-features: List of device-specific features (if the device has
488f3034ad7SLaurent Vivier#     unique features)
489f3034ad7SLaurent Vivier#
490f3034ad7SLaurent Vivier# @unknown-dev-features: Virtio device features bitmap that have not
491f3034ad7SLaurent Vivier#     been decoded
492f3034ad7SLaurent Vivier#
49358379af7SHan Han# Since: 7.2
494f3034ad7SLaurent Vivier##
495f3034ad7SLaurent Vivier{ 'struct': 'VirtioDeviceFeatures',
496f3034ad7SLaurent Vivier  'data': { 'transports': [ 'str' ],
497f3034ad7SLaurent Vivier            '*dev-features': [ 'str' ],
498f3034ad7SLaurent Vivier            '*unknown-dev-features': 'uint64' } }
49907536dddSLaurent Vivier
50007536dddSLaurent Vivier##
50107536dddSLaurent Vivier# @VirtQueueStatus:
50207536dddSLaurent Vivier#
50307536dddSLaurent Vivier# Information of a VirtIODevice VirtQueue, including most members of
50407536dddSLaurent Vivier# the VirtQueue data structure.
50507536dddSLaurent Vivier#
50607536dddSLaurent Vivier# @name: Name of the VirtIODevice that uses this VirtQueue
50707536dddSLaurent Vivier#
50807536dddSLaurent Vivier# @queue-index: VirtQueue queue_index
50907536dddSLaurent Vivier#
51007536dddSLaurent Vivier# @inuse: VirtQueue inuse
51107536dddSLaurent Vivier#
51207536dddSLaurent Vivier# @vring-num: VirtQueue vring.num
51307536dddSLaurent Vivier#
51407536dddSLaurent Vivier# @vring-num-default: VirtQueue vring.num_default
51507536dddSLaurent Vivier#
51607536dddSLaurent Vivier# @vring-align: VirtQueue vring.align
51707536dddSLaurent Vivier#
51807536dddSLaurent Vivier# @vring-desc: VirtQueue vring.desc (descriptor area)
51907536dddSLaurent Vivier#
52007536dddSLaurent Vivier# @vring-avail: VirtQueue vring.avail (driver area)
52107536dddSLaurent Vivier#
52207536dddSLaurent Vivier# @vring-used: VirtQueue vring.used (device area)
52307536dddSLaurent Vivier#
52407536dddSLaurent Vivier# @last-avail-idx: VirtQueue last_avail_idx or return of vhost_dev
52507536dddSLaurent Vivier#     vhost_get_vring_base (if vhost active)
52607536dddSLaurent Vivier#
52707536dddSLaurent Vivier# @shadow-avail-idx: VirtQueue shadow_avail_idx
52807536dddSLaurent Vivier#
52907536dddSLaurent Vivier# @used-idx: VirtQueue used_idx
53007536dddSLaurent Vivier#
53107536dddSLaurent Vivier# @signalled-used: VirtQueue signalled_used
53207536dddSLaurent Vivier#
53307536dddSLaurent Vivier# @signalled-used-valid: VirtQueue signalled_used_valid flag
53407536dddSLaurent Vivier#
53558379af7SHan Han# Since: 7.2
53607536dddSLaurent Vivier##
53707536dddSLaurent Vivier{ 'struct': 'VirtQueueStatus',
53807536dddSLaurent Vivier  'data': { 'name': 'str',
53907536dddSLaurent Vivier            'queue-index': 'uint16',
54007536dddSLaurent Vivier            'inuse': 'uint32',
54107536dddSLaurent Vivier            'vring-num': 'uint32',
54207536dddSLaurent Vivier            'vring-num-default': 'uint32',
54307536dddSLaurent Vivier            'vring-align': 'uint32',
54407536dddSLaurent Vivier            'vring-desc': 'uint64',
54507536dddSLaurent Vivier            'vring-avail': 'uint64',
54607536dddSLaurent Vivier            'vring-used': 'uint64',
54707536dddSLaurent Vivier            '*last-avail-idx': 'uint16',
54807536dddSLaurent Vivier            '*shadow-avail-idx': 'uint16',
54907536dddSLaurent Vivier            'used-idx': 'uint16',
55007536dddSLaurent Vivier            'signalled-used': 'uint16',
55107536dddSLaurent Vivier            'signalled-used-valid': 'bool' } }
55207536dddSLaurent Vivier
55307536dddSLaurent Vivier##
55407536dddSLaurent Vivier# @x-query-virtio-queue-status:
55507536dddSLaurent Vivier#
55607536dddSLaurent Vivier# Return the status of a given VirtIODevice's VirtQueue
55707536dddSLaurent Vivier#
55807536dddSLaurent Vivier# @path: VirtIODevice canonical QOM path
55907536dddSLaurent Vivier#
56007536dddSLaurent Vivier# @queue: VirtQueue index to examine
56107536dddSLaurent Vivier#
56207536dddSLaurent Vivier# Features:
563a937b6aaSMarkus Armbruster#
56407536dddSLaurent Vivier# @unstable: This command is meant for debugging.
56507536dddSLaurent Vivier#
56607536dddSLaurent Vivier# Returns: VirtQueueStatus of the VirtQueue
56707536dddSLaurent Vivier#
568d461c279SJohn Snow# .. note:: last_avail_idx will not be displayed in the case where the
569a937b6aaSMarkus Armbruster#    selected VirtIODevice has a running vhost device and the
570a937b6aaSMarkus Armbruster#    VirtIODevice VirtQueue index (queue) does not exist for the
571*01bed0ffSMarkus Armbruster#    corresponding vhost device vhost_virtqueue.  Also,
572*01bed0ffSMarkus Armbruster#    shadow_avail_idx will not be displayed in the case where the
573*01bed0ffSMarkus Armbruster#    selected VirtIODevice has a running vhost device.
57407536dddSLaurent Vivier#
57558379af7SHan Han# Since: 7.2
57607536dddSLaurent Vivier#
5776f07c59fSJohn Snow# .. qmp-example::
5786f07c59fSJohn Snow#    :annotated:
57907536dddSLaurent Vivier#
5806f07c59fSJohn Snow#    Get VirtQueueStatus for virtio-vsock (vhost-vsock running)
5816f07c59fSJohn Snow#    ::
58207536dddSLaurent Vivier#
58307536dddSLaurent Vivier#     -> { "execute": "x-query-virtio-queue-status",
58407536dddSLaurent Vivier#          "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
58507536dddSLaurent Vivier#                         "queue": 1 }
58607536dddSLaurent Vivier#        }
58707536dddSLaurent Vivier#     <- { "return": {
58807536dddSLaurent Vivier#              "signalled-used": 0,
58907536dddSLaurent Vivier#              "inuse": 0,
59007536dddSLaurent Vivier#              "name": "vhost-vsock",
59107536dddSLaurent Vivier#              "vring-align": 4096,
59207536dddSLaurent Vivier#              "vring-desc": 5217370112,
59307536dddSLaurent Vivier#              "signalled-used-valid": false,
59407536dddSLaurent Vivier#              "vring-num-default": 128,
59507536dddSLaurent Vivier#              "vring-avail": 5217372160,
59607536dddSLaurent Vivier#              "queue-index": 1,
59707536dddSLaurent Vivier#              "last-avail-idx": 0,
59807536dddSLaurent Vivier#              "vring-used": 5217372480,
59907536dddSLaurent Vivier#              "used-idx": 0,
60007536dddSLaurent Vivier#              "vring-num": 128
60107536dddSLaurent Vivier#          }
60207536dddSLaurent Vivier#        }
60307536dddSLaurent Vivier#
6046f07c59fSJohn Snow# .. qmp-example::
6056f07c59fSJohn Snow#    :annotated:
6066f07c59fSJohn Snow#
6076f07c59fSJohn Snow#    Get VirtQueueStatus for virtio-serial (no vhost)
6086f07c59fSJohn Snow#    ::
60907536dddSLaurent Vivier#
61007536dddSLaurent Vivier#     -> { "execute": "x-query-virtio-queue-status",
61107536dddSLaurent Vivier#          "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend",
61207536dddSLaurent Vivier#                         "queue": 20 }
61307536dddSLaurent Vivier#        }
61407536dddSLaurent Vivier#     <- { "return": {
61507536dddSLaurent Vivier#              "signalled-used": 0,
61607536dddSLaurent Vivier#              "inuse": 0,
61707536dddSLaurent Vivier#              "name": "virtio-serial",
61807536dddSLaurent Vivier#              "vring-align": 4096,
61907536dddSLaurent Vivier#              "vring-desc": 5182074880,
62007536dddSLaurent Vivier#              "signalled-used-valid": false,
62107536dddSLaurent Vivier#              "vring-num-default": 128,
62207536dddSLaurent Vivier#              "vring-avail": 5182076928,
62307536dddSLaurent Vivier#              "queue-index": 20,
62407536dddSLaurent Vivier#              "last-avail-idx": 0,
62507536dddSLaurent Vivier#              "vring-used": 5182077248,
62607536dddSLaurent Vivier#              "used-idx": 0,
62707536dddSLaurent Vivier#              "shadow-avail-idx": 0,
62807536dddSLaurent Vivier#              "vring-num": 128
62907536dddSLaurent Vivier#          }
63007536dddSLaurent Vivier#        }
63107536dddSLaurent Vivier##
63207536dddSLaurent Vivier{ 'command': 'x-query-virtio-queue-status',
63307536dddSLaurent Vivier  'data': { 'path': 'str', 'queue': 'uint16' },
63407536dddSLaurent Vivier  'returns': 'VirtQueueStatus',
63507536dddSLaurent Vivier  'features': [ 'unstable' ] }
63607536dddSLaurent Vivier
63707536dddSLaurent Vivier##
63807536dddSLaurent Vivier# @VirtVhostQueueStatus:
63907536dddSLaurent Vivier#
64007536dddSLaurent Vivier# Information of a vhost device's vhost_virtqueue, including most
64107536dddSLaurent Vivier# members of the vhost_dev vhost_virtqueue data structure.
64207536dddSLaurent Vivier#
64307536dddSLaurent Vivier# @name: Name of the VirtIODevice that uses this vhost_virtqueue
64407536dddSLaurent Vivier#
64507536dddSLaurent Vivier# @kick: vhost_virtqueue kick
64607536dddSLaurent Vivier#
64707536dddSLaurent Vivier# @call: vhost_virtqueue call
64807536dddSLaurent Vivier#
64907536dddSLaurent Vivier# @desc: vhost_virtqueue desc
65007536dddSLaurent Vivier#
65107536dddSLaurent Vivier# @avail: vhost_virtqueue avail
65207536dddSLaurent Vivier#
65307536dddSLaurent Vivier# @used: vhost_virtqueue used
65407536dddSLaurent Vivier#
65507536dddSLaurent Vivier# @num: vhost_virtqueue num
65607536dddSLaurent Vivier#
657f972ed59SMarkus Armbruster# @desc-phys: vhost_virtqueue desc_phys (descriptor area physical
658f972ed59SMarkus Armbruster#     address)
65907536dddSLaurent Vivier#
66007536dddSLaurent Vivier# @desc-size: vhost_virtqueue desc_size
66107536dddSLaurent Vivier#
662f972ed59SMarkus Armbruster# @avail-phys: vhost_virtqueue avail_phys (driver area physical
663f972ed59SMarkus Armbruster#     address)
66407536dddSLaurent Vivier#
66507536dddSLaurent Vivier# @avail-size: vhost_virtqueue avail_size
66607536dddSLaurent Vivier#
667f972ed59SMarkus Armbruster# @used-phys: vhost_virtqueue used_phys (device area physical address)
66807536dddSLaurent Vivier#
66907536dddSLaurent Vivier# @used-size: vhost_virtqueue used_size
67007536dddSLaurent Vivier#
67158379af7SHan Han# Since: 7.2
67207536dddSLaurent Vivier##
67307536dddSLaurent Vivier{ 'struct': 'VirtVhostQueueStatus',
67407536dddSLaurent Vivier  'data': { 'name': 'str',
67507536dddSLaurent Vivier            'kick': 'int',
67607536dddSLaurent Vivier            'call': 'int',
67707536dddSLaurent Vivier            'desc': 'uint64',
67807536dddSLaurent Vivier            'avail': 'uint64',
67907536dddSLaurent Vivier            'used': 'uint64',
68007536dddSLaurent Vivier            'num': 'int',
68107536dddSLaurent Vivier            'desc-phys': 'uint64',
68207536dddSLaurent Vivier            'desc-size': 'uint32',
68307536dddSLaurent Vivier            'avail-phys': 'uint64',
68407536dddSLaurent Vivier            'avail-size': 'uint32',
68507536dddSLaurent Vivier            'used-phys': 'uint64',
68607536dddSLaurent Vivier            'used-size': 'uint32' } }
68707536dddSLaurent Vivier
68807536dddSLaurent Vivier##
68907536dddSLaurent Vivier# @x-query-virtio-vhost-queue-status:
69007536dddSLaurent Vivier#
69107536dddSLaurent Vivier# Return information of a given vhost device's vhost_virtqueue
69207536dddSLaurent Vivier#
69307536dddSLaurent Vivier# @path: VirtIODevice canonical QOM path
69407536dddSLaurent Vivier#
69507536dddSLaurent Vivier# @queue: vhost_virtqueue index to examine
69607536dddSLaurent Vivier#
69707536dddSLaurent Vivier# Features:
698a937b6aaSMarkus Armbruster#
69907536dddSLaurent Vivier# @unstable: This command is meant for debugging.
70007536dddSLaurent Vivier#
70107536dddSLaurent Vivier# Returns: VirtVhostQueueStatus of the vhost_virtqueue
70207536dddSLaurent Vivier#
70358379af7SHan Han# Since: 7.2
70407536dddSLaurent Vivier#
705a9eab6e2SJohn Snow# .. qmp-example::
706a9eab6e2SJohn Snow#    :title: Get vhost_virtqueue status for vhost-crypto
70707536dddSLaurent Vivier#
70807536dddSLaurent Vivier#     -> { "execute": "x-query-virtio-vhost-queue-status",
70907536dddSLaurent Vivier#          "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
71007536dddSLaurent Vivier#                         "queue": 0 }
71107536dddSLaurent Vivier#        }
71207536dddSLaurent Vivier#     <- { "return": {
71307536dddSLaurent Vivier#              "avail-phys": 5216124928,
71407536dddSLaurent Vivier#              "name": "virtio-crypto",
71507536dddSLaurent Vivier#              "used-phys": 5216127040,
71607536dddSLaurent Vivier#              "avail-size": 2054,
71707536dddSLaurent Vivier#              "desc-size": 16384,
71807536dddSLaurent Vivier#              "used-size": 8198,
71907536dddSLaurent Vivier#              "desc": 140141447430144,
72007536dddSLaurent Vivier#              "num": 1024,
72107536dddSLaurent Vivier#              "call": 0,
72207536dddSLaurent Vivier#              "avail": 140141447446528,
72307536dddSLaurent Vivier#              "desc-phys": 5216108544,
72407536dddSLaurent Vivier#              "used": 140141447448640,
72507536dddSLaurent Vivier#              "kick": 0
72607536dddSLaurent Vivier#          }
72707536dddSLaurent Vivier#        }
72807536dddSLaurent Vivier#
729a9eab6e2SJohn Snow# .. qmp-example::
730a9eab6e2SJohn Snow#    :title: Get vhost_virtqueue status for vhost-vsock
73107536dddSLaurent Vivier#
73207536dddSLaurent Vivier#     -> { "execute": "x-query-virtio-vhost-queue-status",
73307536dddSLaurent Vivier#          "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
73407536dddSLaurent Vivier#                         "queue": 0 }
73507536dddSLaurent Vivier#        }
73607536dddSLaurent Vivier#     <- { "return": {
73707536dddSLaurent Vivier#              "avail-phys": 5182261248,
73807536dddSLaurent Vivier#              "name": "vhost-vsock",
73907536dddSLaurent Vivier#              "used-phys": 5182261568,
74007536dddSLaurent Vivier#              "avail-size": 262,
74107536dddSLaurent Vivier#              "desc-size": 2048,
74207536dddSLaurent Vivier#              "used-size": 1030,
74307536dddSLaurent Vivier#              "desc": 140141413580800,
74407536dddSLaurent Vivier#              "num": 128,
74507536dddSLaurent Vivier#              "call": 0,
74607536dddSLaurent Vivier#              "avail": 140141413582848,
74707536dddSLaurent Vivier#              "desc-phys": 5182259200,
74807536dddSLaurent Vivier#              "used": 140141413583168,
74907536dddSLaurent Vivier#              "kick": 0
75007536dddSLaurent Vivier#          }
75107536dddSLaurent Vivier#        }
75207536dddSLaurent Vivier##
75307536dddSLaurent Vivier{ 'command': 'x-query-virtio-vhost-queue-status',
75407536dddSLaurent Vivier  'data': { 'path': 'str', 'queue': 'uint16' },
75507536dddSLaurent Vivier  'returns': 'VirtVhostQueueStatus',
75607536dddSLaurent Vivier  'features': [ 'unstable' ] }
7571ee7bb5bSLaurent Vivier
7581ee7bb5bSLaurent Vivier##
7591ee7bb5bSLaurent Vivier# @VirtioRingDesc:
7601ee7bb5bSLaurent Vivier#
7611ee7bb5bSLaurent Vivier# Information regarding the vring descriptor area
7621ee7bb5bSLaurent Vivier#
7631ee7bb5bSLaurent Vivier# @addr: Guest physical address of the descriptor area
7641ee7bb5bSLaurent Vivier#
7651ee7bb5bSLaurent Vivier# @len: Length of the descriptor area
7661ee7bb5bSLaurent Vivier#
7671ee7bb5bSLaurent Vivier# @flags: List of descriptor flags
7681ee7bb5bSLaurent Vivier#
76958379af7SHan Han# Since: 7.2
7701ee7bb5bSLaurent Vivier##
7711ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingDesc',
7721ee7bb5bSLaurent Vivier  'data': { 'addr': 'uint64',
7731ee7bb5bSLaurent Vivier            'len': 'uint32',
7741ee7bb5bSLaurent Vivier            'flags': [ 'str' ] } }
7751ee7bb5bSLaurent Vivier
7761ee7bb5bSLaurent Vivier##
7771ee7bb5bSLaurent Vivier# @VirtioRingAvail:
7781ee7bb5bSLaurent Vivier#
7791ee7bb5bSLaurent Vivier# Information regarding the avail vring (a.k.a. driver area)
7801ee7bb5bSLaurent Vivier#
7811ee7bb5bSLaurent Vivier# @flags: VRingAvail flags
7821ee7bb5bSLaurent Vivier#
7831ee7bb5bSLaurent Vivier# @idx: VRingAvail index
7841ee7bb5bSLaurent Vivier#
7851ee7bb5bSLaurent Vivier# @ring: VRingAvail ring[] entry at provided index
7861ee7bb5bSLaurent Vivier#
78758379af7SHan Han# Since: 7.2
7881ee7bb5bSLaurent Vivier##
7891ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingAvail',
7901ee7bb5bSLaurent Vivier  'data': { 'flags': 'uint16',
7911ee7bb5bSLaurent Vivier            'idx': 'uint16',
7921ee7bb5bSLaurent Vivier            'ring': 'uint16' } }
7931ee7bb5bSLaurent Vivier
7941ee7bb5bSLaurent Vivier##
7951ee7bb5bSLaurent Vivier# @VirtioRingUsed:
7961ee7bb5bSLaurent Vivier#
7971ee7bb5bSLaurent Vivier# Information regarding the used vring (a.k.a. device area)
7981ee7bb5bSLaurent Vivier#
7991ee7bb5bSLaurent Vivier# @flags: VRingUsed flags
8001ee7bb5bSLaurent Vivier#
8011ee7bb5bSLaurent Vivier# @idx: VRingUsed index
8021ee7bb5bSLaurent Vivier#
80358379af7SHan Han# Since: 7.2
8041ee7bb5bSLaurent Vivier##
8051ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingUsed',
8061ee7bb5bSLaurent Vivier  'data': { 'flags': 'uint16',
8071ee7bb5bSLaurent Vivier            'idx': 'uint16' } }
8081ee7bb5bSLaurent Vivier
8091ee7bb5bSLaurent Vivier##
8101ee7bb5bSLaurent Vivier# @VirtioQueueElement:
8111ee7bb5bSLaurent Vivier#
8121ee7bb5bSLaurent Vivier# Information regarding a VirtQueue's VirtQueueElement including
8131ee7bb5bSLaurent Vivier# descriptor, driver, and device areas
8141ee7bb5bSLaurent Vivier#
8151ee7bb5bSLaurent Vivier# @name: Name of the VirtIODevice that uses this VirtQueue
8161ee7bb5bSLaurent Vivier#
8171ee7bb5bSLaurent Vivier# @index: Index of the element in the queue
8181ee7bb5bSLaurent Vivier#
8191ee7bb5bSLaurent Vivier# @descs: List of descriptors (VirtioRingDesc)
8201ee7bb5bSLaurent Vivier#
8211ee7bb5bSLaurent Vivier# @avail: VRingAvail info
8221ee7bb5bSLaurent Vivier#
8231ee7bb5bSLaurent Vivier# @used: VRingUsed info
8241ee7bb5bSLaurent Vivier#
82558379af7SHan Han# Since: 7.2
8261ee7bb5bSLaurent Vivier##
8271ee7bb5bSLaurent Vivier{ 'struct': 'VirtioQueueElement',
8281ee7bb5bSLaurent Vivier  'data': { 'name': 'str',
8291ee7bb5bSLaurent Vivier            'index': 'uint32',
8301ee7bb5bSLaurent Vivier            'descs': [ 'VirtioRingDesc' ],
8311ee7bb5bSLaurent Vivier            'avail': 'VirtioRingAvail',
8321ee7bb5bSLaurent Vivier            'used': 'VirtioRingUsed' } }
8331ee7bb5bSLaurent Vivier
8341ee7bb5bSLaurent Vivier##
8351ee7bb5bSLaurent Vivier# @x-query-virtio-queue-element:
8361ee7bb5bSLaurent Vivier#
8371ee7bb5bSLaurent Vivier# Return the information about a VirtQueue's VirtQueueElement
8381ee7bb5bSLaurent Vivier#
8391ee7bb5bSLaurent Vivier# @path: VirtIODevice canonical QOM path
8401ee7bb5bSLaurent Vivier#
8411ee7bb5bSLaurent Vivier# @queue: VirtQueue index to examine
8421ee7bb5bSLaurent Vivier#
843a937b6aaSMarkus Armbruster# @index: Index of the element in the queue (default: head of the
844a937b6aaSMarkus Armbruster#     queue)
8451ee7bb5bSLaurent Vivier#
8461ee7bb5bSLaurent Vivier# Features:
847a937b6aaSMarkus Armbruster#
8481ee7bb5bSLaurent Vivier# @unstable: This command is meant for debugging.
8491ee7bb5bSLaurent Vivier#
8501ee7bb5bSLaurent Vivier# Returns: VirtioQueueElement information
8511ee7bb5bSLaurent Vivier#
85258379af7SHan Han# Since: 7.2
8531ee7bb5bSLaurent Vivier#
854a9eab6e2SJohn Snow# .. qmp-example::
855a9eab6e2SJohn Snow#    :title: Introspect on virtio-net's VirtQueue 0 at index 5
8561ee7bb5bSLaurent Vivier#
8571ee7bb5bSLaurent Vivier#     -> { "execute": "x-query-virtio-queue-element",
8581ee7bb5bSLaurent Vivier#          "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend",
8591ee7bb5bSLaurent Vivier#                         "queue": 0,
8601ee7bb5bSLaurent Vivier#                         "index": 5 }
8611ee7bb5bSLaurent Vivier#        }
8621ee7bb5bSLaurent Vivier#     <- { "return": {
8631ee7bb5bSLaurent Vivier#              "index": 5,
8641ee7bb5bSLaurent Vivier#              "name": "virtio-net",
8651ee7bb5bSLaurent Vivier#              "descs": [
8661ee7bb5bSLaurent Vivier#                  {
8671ee7bb5bSLaurent Vivier#                      "flags": ["write"],
8681ee7bb5bSLaurent Vivier#                      "len": 1536,
8691ee7bb5bSLaurent Vivier#                      "addr": 5257305600
8701ee7bb5bSLaurent Vivier#                  }
8711ee7bb5bSLaurent Vivier#              ],
8721ee7bb5bSLaurent Vivier#              "avail": {
8731ee7bb5bSLaurent Vivier#                  "idx": 256,
8741ee7bb5bSLaurent Vivier#                  "flags": 0,
8751ee7bb5bSLaurent Vivier#                  "ring": 5
8761ee7bb5bSLaurent Vivier#              },
8771ee7bb5bSLaurent Vivier#              "used": {
8781ee7bb5bSLaurent Vivier#                  "idx": 13,
8791ee7bb5bSLaurent Vivier#                  "flags": 0
8801ee7bb5bSLaurent Vivier#              }
8811ee7bb5bSLaurent Vivier#          }
8821ee7bb5bSLaurent Vivier#        }
8831ee7bb5bSLaurent Vivier#
884a9eab6e2SJohn Snow# .. qmp-example::
885a9eab6e2SJohn Snow#    :title: Introspect on virtio-crypto's VirtQueue 1 at head
8861ee7bb5bSLaurent Vivier#
8871ee7bb5bSLaurent Vivier#     -> { "execute": "x-query-virtio-queue-element",
8881ee7bb5bSLaurent Vivier#          "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
8891ee7bb5bSLaurent Vivier#                         "queue": 1 }
8901ee7bb5bSLaurent Vivier#        }
8911ee7bb5bSLaurent Vivier#     <- { "return": {
8921ee7bb5bSLaurent Vivier#              "index": 0,
8931ee7bb5bSLaurent Vivier#              "name": "virtio-crypto",
8941ee7bb5bSLaurent Vivier#              "descs": [
8951ee7bb5bSLaurent Vivier#                  {
8961ee7bb5bSLaurent Vivier#                      "flags": [],
8971ee7bb5bSLaurent Vivier#                      "len": 0,
8981ee7bb5bSLaurent Vivier#                      "addr": 8080268923184214134
8991ee7bb5bSLaurent Vivier#                  }
9001ee7bb5bSLaurent Vivier#              ],
9011ee7bb5bSLaurent Vivier#              "avail": {
9021ee7bb5bSLaurent Vivier#                  "idx": 280,
9031ee7bb5bSLaurent Vivier#                  "flags": 0,
9041ee7bb5bSLaurent Vivier#                  "ring": 0
9051ee7bb5bSLaurent Vivier#              },
9061ee7bb5bSLaurent Vivier#              "used": {
9071ee7bb5bSLaurent Vivier#                  "idx": 280,
9081ee7bb5bSLaurent Vivier#                  "flags": 0
9091ee7bb5bSLaurent Vivier#              }
9101ee7bb5bSLaurent Vivier#          }
9111ee7bb5bSLaurent Vivier#        }
9121ee7bb5bSLaurent Vivier#
913a9eab6e2SJohn Snow# .. qmp-example::
914a9eab6e2SJohn Snow#    :title: Introspect on virtio-scsi's VirtQueue 2 at head
9151ee7bb5bSLaurent Vivier#
9161ee7bb5bSLaurent Vivier#     -> { "execute": "x-query-virtio-queue-element",
9171ee7bb5bSLaurent Vivier#          "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend",
9181ee7bb5bSLaurent Vivier#                         "queue": 2 }
9191ee7bb5bSLaurent Vivier#        }
9201ee7bb5bSLaurent Vivier#     <- { "return": {
9211ee7bb5bSLaurent Vivier#              "index": 19,
9221ee7bb5bSLaurent Vivier#              "name": "virtio-scsi",
9231ee7bb5bSLaurent Vivier#              "descs": [
9241ee7bb5bSLaurent Vivier#                  {
9251ee7bb5bSLaurent Vivier#                      "flags": ["used", "indirect", "write"],
9261ee7bb5bSLaurent Vivier#                      "len": 4099327944,
9271ee7bb5bSLaurent Vivier#                      "addr": 12055409292258155293
9281ee7bb5bSLaurent Vivier#                  }
9291ee7bb5bSLaurent Vivier#              ],
9301ee7bb5bSLaurent Vivier#              "avail": {
9311ee7bb5bSLaurent Vivier#                  "idx": 1147,
9321ee7bb5bSLaurent Vivier#                  "flags": 0,
9331ee7bb5bSLaurent Vivier#                  "ring": 19
9341ee7bb5bSLaurent Vivier#              },
9351ee7bb5bSLaurent Vivier#              "used": {
9361ee7bb5bSLaurent Vivier#                  "idx": 280,
9371ee7bb5bSLaurent Vivier#                  "flags": 0
9381ee7bb5bSLaurent Vivier#              }
9391ee7bb5bSLaurent Vivier#          }
9401ee7bb5bSLaurent Vivier#        }
9411ee7bb5bSLaurent Vivier##
9421ee7bb5bSLaurent Vivier{ 'command': 'x-query-virtio-queue-element',
9431ee7bb5bSLaurent Vivier  'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' },
9441ee7bb5bSLaurent Vivier  'returns': 'VirtioQueueElement',
9451ee7bb5bSLaurent Vivier  'features': [ 'unstable' ] }
946cf03a152SStefan Hajnoczi
947cf03a152SStefan Hajnoczi##
948cf03a152SStefan Hajnoczi# @IOThreadVirtQueueMapping:
949cf03a152SStefan Hajnoczi#
950cf03a152SStefan Hajnoczi# Describes the subset of virtqueues assigned to an IOThread.
951cf03a152SStefan Hajnoczi#
952cf03a152SStefan Hajnoczi# @iothread: the id of IOThread object
953cf03a152SStefan Hajnoczi#
954209e64d9SMarkus Armbruster# @vqs: an optional array of virtqueue indices that will be handled by
955209e64d9SMarkus Armbruster#     this IOThread.  When absent, virtqueues are assigned round-robin
956209e64d9SMarkus Armbruster#     across all IOThreadVirtQueueMappings provided.  Either all
957209e64d9SMarkus Armbruster#     IOThreadVirtQueueMappings must have @vqs or none of them must
958209e64d9SMarkus Armbruster#     have it.
959cf03a152SStefan Hajnoczi#
960cf03a152SStefan Hajnoczi# Since: 9.0
961cf03a152SStefan Hajnoczi##
962cf03a152SStefan Hajnoczi
963cf03a152SStefan Hajnoczi{ 'struct': 'IOThreadVirtQueueMapping',
964cf03a152SStefan Hajnoczi  'data': { 'iothread': 'str', '*vqs': ['uint16'] } }
965cf03a152SStefan Hajnoczi
966cf03a152SStefan Hajnoczi##
967cf03a152SStefan Hajnoczi# @DummyVirtioForceArrays:
968cf03a152SStefan Hajnoczi#
969209e64d9SMarkus Armbruster# Not used by QMP; hack to let us use IOThreadVirtQueueMappingList
970209e64d9SMarkus Armbruster# internally
971cf03a152SStefan Hajnoczi#
972cf03a152SStefan Hajnoczi# Since: 9.0
973cf03a152SStefan Hajnoczi##
974cf03a152SStefan Hajnoczi
975cf03a152SStefan Hajnoczi{ 'struct': 'DummyVirtioForceArrays',
976cf03a152SStefan Hajnoczi  'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } }
977965bc083SEric Auger
978965bc083SEric Auger##
979965bc083SEric Auger# @GranuleMode:
980965bc083SEric Auger#
981965bc083SEric Auger# @4k: granule page size of 4KiB
982965bc083SEric Auger#
983965bc083SEric Auger# @8k: granule page size of 8KiB
984965bc083SEric Auger#
985965bc083SEric Auger# @16k: granule page size of 16KiB
986965bc083SEric Auger#
987965bc083SEric Auger# @64k: granule page size of 64KiB
988965bc083SEric Auger#
989965bc083SEric Auger# @host: granule matches the host page size
990965bc083SEric Auger#
991965bc083SEric Auger# Since: 9.0
992965bc083SEric Auger##
993965bc083SEric Auger{ 'enum': 'GranuleMode',
994965bc083SEric Auger  'data': [ '4k', '8k', '16k', '64k', 'host' ] }
995