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# 37a5ebce38SLaurent Vivier# 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# 20690c066cdSLaurent Vivier# Examples: 20790c066cdSLaurent Vivier# 20890c066cdSLaurent Vivier# 1. Poll for the status of virtio-crypto (no vhost-crypto active) 20990c066cdSLaurent Vivier# 21090c066cdSLaurent Vivier# -> { "execute": "x-query-virtio-status", 21190c066cdSLaurent Vivier# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" } 21290c066cdSLaurent Vivier# } 21390c066cdSLaurent Vivier# <- { "return": { 21490c066cdSLaurent Vivier# "device-endian": "little", 21590c066cdSLaurent Vivier# "bus-name": "", 21690c066cdSLaurent Vivier# "disable-legacy-check": false, 21790c066cdSLaurent Vivier# "name": "virtio-crypto", 21890c066cdSLaurent Vivier# "started": true, 21990c066cdSLaurent Vivier# "device-id": 20, 220f3034ad7SLaurent Vivier# "backend-features": { 221f3034ad7SLaurent Vivier# "transports": [], 222f3034ad7SLaurent Vivier# "dev-features": [] 223f3034ad7SLaurent Vivier# }, 22490c066cdSLaurent Vivier# "start-on-kick": false, 22590c066cdSLaurent Vivier# "isr": 1, 22690c066cdSLaurent Vivier# "broken": false, 227f3034ad7SLaurent Vivier# "status": { 228f3034ad7SLaurent Vivier# "statuses": [ 229f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", 230f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", 231f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", 232f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" 233f3034ad7SLaurent Vivier# ] 234f3034ad7SLaurent Vivier# }, 23590c066cdSLaurent Vivier# "num-vqs": 2, 236f3034ad7SLaurent Vivier# "guest-features": { 237f3034ad7SLaurent Vivier# "dev-features": [], 238f3034ad7SLaurent Vivier# "transports": [ 239f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 240f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 241f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" 242f3034ad7SLaurent Vivier# ] 243f3034ad7SLaurent Vivier# }, 244f3034ad7SLaurent Vivier# "host-features": { 245f3034ad7SLaurent Vivier# "unknown-dev-features": 1073741824, 246f3034ad7SLaurent Vivier# "dev-features": [], 247f3034ad7SLaurent Vivier# "transports": [ 248f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 249f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 250f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", 251f3034ad7SLaurent Vivier# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", 252f3034ad7SLaurent Vivier# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" 253f3034ad7SLaurent Vivier# ] 254f3034ad7SLaurent Vivier# }, 25590c066cdSLaurent Vivier# "use-guest-notifier-mask": true, 25690c066cdSLaurent Vivier# "vm-running": true, 25790c066cdSLaurent Vivier# "queue-sel": 1, 25890c066cdSLaurent Vivier# "disabled": false, 25990c066cdSLaurent Vivier# "vhost-started": false, 26090c066cdSLaurent Vivier# "use-started": true 26190c066cdSLaurent Vivier# } 26290c066cdSLaurent Vivier# } 26390c066cdSLaurent Vivier# 26490c066cdSLaurent Vivier# 2. Poll for the status of virtio-net (vhost-net is active) 26590c066cdSLaurent Vivier# 26690c066cdSLaurent Vivier# -> { "execute": "x-query-virtio-status", 26790c066cdSLaurent Vivier# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" } 26890c066cdSLaurent Vivier# } 26990c066cdSLaurent Vivier# <- { "return": { 27090c066cdSLaurent Vivier# "device-endian": "little", 27190c066cdSLaurent Vivier# "bus-name": "", 27290c066cdSLaurent Vivier# "disabled-legacy-check": false, 27390c066cdSLaurent Vivier# "name": "virtio-net", 27490c066cdSLaurent Vivier# "started": true, 27590c066cdSLaurent Vivier# "device-id": 1, 27690c066cdSLaurent Vivier# "vhost-dev": { 27790c066cdSLaurent Vivier# "n-tmp-sections": 4, 27890c066cdSLaurent Vivier# "n-mem-sections": 4, 27990c066cdSLaurent Vivier# "max-queues": 1, 28090c066cdSLaurent Vivier# "backend-cap": 2, 28190c066cdSLaurent Vivier# "log-size": 0, 282f3034ad7SLaurent Vivier# "backend-features": { 283f3034ad7SLaurent Vivier# "dev-features": [], 284f3034ad7SLaurent Vivier# "transports": [] 285f3034ad7SLaurent Vivier# }, 28690c066cdSLaurent Vivier# "nvqs": 2, 287f3034ad7SLaurent Vivier# "protocol-features": { 288f3034ad7SLaurent Vivier# "protocols": [] 289f3034ad7SLaurent Vivier# }, 29090c066cdSLaurent Vivier# "vq-index": 0, 29190c066cdSLaurent Vivier# "log-enabled": false, 292f3034ad7SLaurent Vivier# "acked-features": { 293f3034ad7SLaurent Vivier# "dev-features": [ 294f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" 295f3034ad7SLaurent Vivier# ], 296f3034ad7SLaurent Vivier# "transports": [ 297f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 298f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 299f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" 300f3034ad7SLaurent Vivier# ] 30190c066cdSLaurent Vivier# }, 302f3034ad7SLaurent Vivier# "features": { 303f3034ad7SLaurent Vivier# "dev-features": [ 304f3034ad7SLaurent Vivier# "VHOST_F_LOG_ALL: Logging write descriptors supported", 305f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" 306f3034ad7SLaurent Vivier# ], 307f3034ad7SLaurent Vivier# "transports": [ 308f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 309f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 310f3034ad7SLaurent Vivier# "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform", 311f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", 312f3034ad7SLaurent Vivier# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", 313f3034ad7SLaurent Vivier# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" 314f3034ad7SLaurent Vivier# ] 315f3034ad7SLaurent Vivier# } 316f3034ad7SLaurent Vivier# }, 317f3034ad7SLaurent Vivier# "backend-features": { 318f3034ad7SLaurent Vivier# "dev-features": [ 3192cb40d44SStefan Weil# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", 320f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", 321f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", 322f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", 323f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", 324f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", 325f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", 326f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VQ: Control channel available", 327f3034ad7SLaurent Vivier# "VIRTIO_NET_F_STATUS: Configuration status field available", 328f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", 329f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", 330f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", 331f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", 332f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", 333f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", 334f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", 335f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", 336f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", 337f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MAC: Device has given MAC address", 338f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", 339f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", 340f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" 341f3034ad7SLaurent Vivier# ], 342f3034ad7SLaurent Vivier# "transports": [ 343f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 344f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 345f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", 346f3034ad7SLaurent Vivier# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", 347f3034ad7SLaurent Vivier# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" 348f3034ad7SLaurent Vivier# ] 349f3034ad7SLaurent Vivier# }, 35090c066cdSLaurent Vivier# "start-on-kick": false, 35190c066cdSLaurent Vivier# "isr": 1, 35290c066cdSLaurent Vivier# "broken": false, 353f3034ad7SLaurent Vivier# "status": { 354f3034ad7SLaurent Vivier# "statuses": [ 355f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", 356f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", 357f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", 358f3034ad7SLaurent Vivier# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" 359f3034ad7SLaurent Vivier# ] 360f3034ad7SLaurent Vivier# }, 36190c066cdSLaurent Vivier# "num-vqs": 3, 362f3034ad7SLaurent Vivier# "guest-features": { 363f3034ad7SLaurent Vivier# "dev-features": [ 364f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", 365f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", 366f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", 367f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", 368f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VQ: Control channel available", 369f3034ad7SLaurent Vivier# "VIRTIO_NET_F_STATUS: Configuration status field available", 370f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", 371f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", 372f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", 373f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", 374f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", 375f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", 376f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", 377f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", 378f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", 379f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MAC: Device has given MAC address", 380f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", 381f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", 382f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" 383f3034ad7SLaurent Vivier# ], 384f3034ad7SLaurent Vivier# "transports": [ 385f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 386f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 387f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" 388f3034ad7SLaurent Vivier# ] 389f3034ad7SLaurent Vivier# }, 390f3034ad7SLaurent Vivier# "host-features": { 391f3034ad7SLaurent Vivier# "dev-features": [ 3922cb40d44SStefan Weil# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", 393f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", 394f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", 395f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", 396f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", 397f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", 398f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", 399f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_VQ: Control channel available", 400f3034ad7SLaurent Vivier# "VIRTIO_NET_F_STATUS: Configuration status field available", 401f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", 402f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", 403f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", 404f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", 405f3034ad7SLaurent Vivier# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", 406f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", 407f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", 408f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", 409f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", 410f3034ad7SLaurent Vivier# "VIRTIO_NET_F_MAC: Device has given MAC address", 411f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", 412f3034ad7SLaurent Vivier# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", 413f3034ad7SLaurent Vivier# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" 414f3034ad7SLaurent Vivier# ], 415f3034ad7SLaurent Vivier# "transports": [ 416f3034ad7SLaurent Vivier# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", 417f3034ad7SLaurent Vivier# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", 418f3034ad7SLaurent Vivier# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", 419f3034ad7SLaurent Vivier# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", 420f3034ad7SLaurent Vivier# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" 421f3034ad7SLaurent Vivier# ] 422f3034ad7SLaurent Vivier# }, 42390c066cdSLaurent Vivier# "use-guest-notifier-mask": true, 42490c066cdSLaurent Vivier# "vm-running": true, 42590c066cdSLaurent Vivier# "queue-sel": 2, 42690c066cdSLaurent Vivier# "disabled": false, 42790c066cdSLaurent Vivier# "vhost-started": true, 42890c066cdSLaurent Vivier# "use-started": true 42990c066cdSLaurent Vivier# } 43090c066cdSLaurent Vivier# } 43190c066cdSLaurent Vivier## 43290c066cdSLaurent Vivier{ 'command': 'x-query-virtio-status', 43390c066cdSLaurent Vivier 'data': { 'path': 'str' }, 43490c066cdSLaurent Vivier 'returns': 'VirtioStatus', 43590c066cdSLaurent Vivier 'features': [ 'unstable' ] } 436f3034ad7SLaurent Vivier 437f3034ad7SLaurent Vivier## 438f3034ad7SLaurent Vivier# @VirtioDeviceStatus: 439f3034ad7SLaurent Vivier# 440f3034ad7SLaurent Vivier# A structure defined to list the configuration statuses of a virtio 441f3034ad7SLaurent Vivier# device 442f3034ad7SLaurent Vivier# 443f3034ad7SLaurent Vivier# @statuses: List of decoded configuration statuses of the virtio 444f3034ad7SLaurent Vivier# device 445f3034ad7SLaurent Vivier# 446a937b6aaSMarkus Armbruster# @unknown-statuses: Virtio device statuses bitmap that have not been 447a937b6aaSMarkus Armbruster# decoded 448f3034ad7SLaurent Vivier# 44958379af7SHan Han# Since: 7.2 450f3034ad7SLaurent Vivier## 451f3034ad7SLaurent Vivier{ 'struct': 'VirtioDeviceStatus', 452f3034ad7SLaurent Vivier 'data': { 'statuses': [ 'str' ], 453f3034ad7SLaurent Vivier '*unknown-statuses': 'uint8' } } 454f3034ad7SLaurent Vivier 455f3034ad7SLaurent Vivier## 456f3034ad7SLaurent Vivier# @VhostDeviceProtocols: 457f3034ad7SLaurent Vivier# 458f3034ad7SLaurent Vivier# A structure defined to list the vhost user protocol features of a 459f3034ad7SLaurent Vivier# Vhost User device 460f3034ad7SLaurent Vivier# 461f3034ad7SLaurent Vivier# @protocols: List of decoded vhost user protocol features of a vhost 462f3034ad7SLaurent Vivier# user device 463f3034ad7SLaurent Vivier# 464f3034ad7SLaurent Vivier# @unknown-protocols: Vhost user device protocol features bitmap that 465f3034ad7SLaurent Vivier# have not been decoded 466f3034ad7SLaurent Vivier# 46758379af7SHan Han# Since: 7.2 468f3034ad7SLaurent Vivier## 469f3034ad7SLaurent Vivier{ 'struct': 'VhostDeviceProtocols', 470f3034ad7SLaurent Vivier 'data': { 'protocols': [ 'str' ], 471f3034ad7SLaurent Vivier '*unknown-protocols': 'uint64' } } 472f3034ad7SLaurent Vivier 473f3034ad7SLaurent Vivier## 474f3034ad7SLaurent Vivier# @VirtioDeviceFeatures: 475f3034ad7SLaurent Vivier# 476f3034ad7SLaurent Vivier# The common fields that apply to most Virtio devices. Some devices 477f3034ad7SLaurent Vivier# may not have their own device-specific features (e.g. virtio-rng). 478f3034ad7SLaurent Vivier# 479f3034ad7SLaurent Vivier# @transports: List of transport features of the virtio device 480f3034ad7SLaurent Vivier# 481f3034ad7SLaurent Vivier# @dev-features: List of device-specific features (if the device has 482f3034ad7SLaurent Vivier# unique features) 483f3034ad7SLaurent Vivier# 484f3034ad7SLaurent Vivier# @unknown-dev-features: Virtio device features bitmap that have not 485f3034ad7SLaurent Vivier# been decoded 486f3034ad7SLaurent Vivier# 48758379af7SHan Han# Since: 7.2 488f3034ad7SLaurent Vivier## 489f3034ad7SLaurent Vivier{ 'struct': 'VirtioDeviceFeatures', 490f3034ad7SLaurent Vivier 'data': { 'transports': [ 'str' ], 491f3034ad7SLaurent Vivier '*dev-features': [ 'str' ], 492f3034ad7SLaurent Vivier '*unknown-dev-features': 'uint64' } } 49307536dddSLaurent Vivier 49407536dddSLaurent Vivier## 49507536dddSLaurent Vivier# @VirtQueueStatus: 49607536dddSLaurent Vivier# 49707536dddSLaurent Vivier# Information of a VirtIODevice VirtQueue, including most members of 49807536dddSLaurent Vivier# the VirtQueue data structure. 49907536dddSLaurent Vivier# 50007536dddSLaurent Vivier# @name: Name of the VirtIODevice that uses this VirtQueue 50107536dddSLaurent Vivier# 50207536dddSLaurent Vivier# @queue-index: VirtQueue queue_index 50307536dddSLaurent Vivier# 50407536dddSLaurent Vivier# @inuse: VirtQueue inuse 50507536dddSLaurent Vivier# 50607536dddSLaurent Vivier# @vring-num: VirtQueue vring.num 50707536dddSLaurent Vivier# 50807536dddSLaurent Vivier# @vring-num-default: VirtQueue vring.num_default 50907536dddSLaurent Vivier# 51007536dddSLaurent Vivier# @vring-align: VirtQueue vring.align 51107536dddSLaurent Vivier# 51207536dddSLaurent Vivier# @vring-desc: VirtQueue vring.desc (descriptor area) 51307536dddSLaurent Vivier# 51407536dddSLaurent Vivier# @vring-avail: VirtQueue vring.avail (driver area) 51507536dddSLaurent Vivier# 51607536dddSLaurent Vivier# @vring-used: VirtQueue vring.used (device area) 51707536dddSLaurent Vivier# 51807536dddSLaurent Vivier# @last-avail-idx: VirtQueue last_avail_idx or return of vhost_dev 51907536dddSLaurent Vivier# vhost_get_vring_base (if vhost active) 52007536dddSLaurent Vivier# 52107536dddSLaurent Vivier# @shadow-avail-idx: VirtQueue shadow_avail_idx 52207536dddSLaurent Vivier# 52307536dddSLaurent Vivier# @used-idx: VirtQueue used_idx 52407536dddSLaurent Vivier# 52507536dddSLaurent Vivier# @signalled-used: VirtQueue signalled_used 52607536dddSLaurent Vivier# 52707536dddSLaurent Vivier# @signalled-used-valid: VirtQueue signalled_used_valid flag 52807536dddSLaurent Vivier# 52958379af7SHan Han# Since: 7.2 53007536dddSLaurent Vivier## 53107536dddSLaurent Vivier{ 'struct': 'VirtQueueStatus', 53207536dddSLaurent Vivier 'data': { 'name': 'str', 53307536dddSLaurent Vivier 'queue-index': 'uint16', 53407536dddSLaurent Vivier 'inuse': 'uint32', 53507536dddSLaurent Vivier 'vring-num': 'uint32', 53607536dddSLaurent Vivier 'vring-num-default': 'uint32', 53707536dddSLaurent Vivier 'vring-align': 'uint32', 53807536dddSLaurent Vivier 'vring-desc': 'uint64', 53907536dddSLaurent Vivier 'vring-avail': 'uint64', 54007536dddSLaurent Vivier 'vring-used': 'uint64', 54107536dddSLaurent Vivier '*last-avail-idx': 'uint16', 54207536dddSLaurent Vivier '*shadow-avail-idx': 'uint16', 54307536dddSLaurent Vivier 'used-idx': 'uint16', 54407536dddSLaurent Vivier 'signalled-used': 'uint16', 54507536dddSLaurent Vivier 'signalled-used-valid': 'bool' } } 54607536dddSLaurent Vivier 54707536dddSLaurent Vivier## 54807536dddSLaurent Vivier# @x-query-virtio-queue-status: 54907536dddSLaurent Vivier# 55007536dddSLaurent Vivier# Return the status of a given VirtIODevice's VirtQueue 55107536dddSLaurent Vivier# 55207536dddSLaurent Vivier# @path: VirtIODevice canonical QOM path 55307536dddSLaurent Vivier# 55407536dddSLaurent Vivier# @queue: VirtQueue index to examine 55507536dddSLaurent Vivier# 55607536dddSLaurent Vivier# Features: 557a937b6aaSMarkus Armbruster# 55807536dddSLaurent Vivier# @unstable: This command is meant for debugging. 55907536dddSLaurent Vivier# 56007536dddSLaurent Vivier# Returns: VirtQueueStatus of the VirtQueue 56107536dddSLaurent Vivier# 562a937b6aaSMarkus Armbruster# Notes: last_avail_idx will not be displayed in the case where the 563a937b6aaSMarkus Armbruster# selected VirtIODevice has a running vhost device and the 564a937b6aaSMarkus Armbruster# VirtIODevice VirtQueue index (queue) does not exist for the 565a937b6aaSMarkus Armbruster# corresponding vhost device vhost_virtqueue. Also, 566a937b6aaSMarkus Armbruster# shadow_avail_idx will not be displayed in the case where the 567a937b6aaSMarkus Armbruster# selected VirtIODevice has a running vhost device. 56807536dddSLaurent Vivier# 56958379af7SHan Han# Since: 7.2 57007536dddSLaurent Vivier# 57107536dddSLaurent Vivier# Examples: 57207536dddSLaurent Vivier# 57307536dddSLaurent Vivier# 1. Get VirtQueueStatus for virtio-vsock (vhost-vsock running) 57407536dddSLaurent Vivier# 57507536dddSLaurent Vivier# -> { "execute": "x-query-virtio-queue-status", 57607536dddSLaurent Vivier# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", 57707536dddSLaurent Vivier# "queue": 1 } 57807536dddSLaurent Vivier# } 57907536dddSLaurent Vivier# <- { "return": { 58007536dddSLaurent Vivier# "signalled-used": 0, 58107536dddSLaurent Vivier# "inuse": 0, 58207536dddSLaurent Vivier# "name": "vhost-vsock", 58307536dddSLaurent Vivier# "vring-align": 4096, 58407536dddSLaurent Vivier# "vring-desc": 5217370112, 58507536dddSLaurent Vivier# "signalled-used-valid": false, 58607536dddSLaurent Vivier# "vring-num-default": 128, 58707536dddSLaurent Vivier# "vring-avail": 5217372160, 58807536dddSLaurent Vivier# "queue-index": 1, 58907536dddSLaurent Vivier# "last-avail-idx": 0, 59007536dddSLaurent Vivier# "vring-used": 5217372480, 59107536dddSLaurent Vivier# "used-idx": 0, 59207536dddSLaurent Vivier# "vring-num": 128 59307536dddSLaurent Vivier# } 59407536dddSLaurent Vivier# } 59507536dddSLaurent Vivier# 59607536dddSLaurent Vivier# 2. Get VirtQueueStatus for virtio-serial (no vhost) 59707536dddSLaurent Vivier# 59807536dddSLaurent Vivier# -> { "execute": "x-query-virtio-queue-status", 59907536dddSLaurent Vivier# "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend", 60007536dddSLaurent Vivier# "queue": 20 } 60107536dddSLaurent Vivier# } 60207536dddSLaurent Vivier# <- { "return": { 60307536dddSLaurent Vivier# "signalled-used": 0, 60407536dddSLaurent Vivier# "inuse": 0, 60507536dddSLaurent Vivier# "name": "virtio-serial", 60607536dddSLaurent Vivier# "vring-align": 4096, 60707536dddSLaurent Vivier# "vring-desc": 5182074880, 60807536dddSLaurent Vivier# "signalled-used-valid": false, 60907536dddSLaurent Vivier# "vring-num-default": 128, 61007536dddSLaurent Vivier# "vring-avail": 5182076928, 61107536dddSLaurent Vivier# "queue-index": 20, 61207536dddSLaurent Vivier# "last-avail-idx": 0, 61307536dddSLaurent Vivier# "vring-used": 5182077248, 61407536dddSLaurent Vivier# "used-idx": 0, 61507536dddSLaurent Vivier# "shadow-avail-idx": 0, 61607536dddSLaurent Vivier# "vring-num": 128 61707536dddSLaurent Vivier# } 61807536dddSLaurent Vivier# } 61907536dddSLaurent Vivier## 62007536dddSLaurent Vivier{ 'command': 'x-query-virtio-queue-status', 62107536dddSLaurent Vivier 'data': { 'path': 'str', 'queue': 'uint16' }, 62207536dddSLaurent Vivier 'returns': 'VirtQueueStatus', 62307536dddSLaurent Vivier 'features': [ 'unstable' ] } 62407536dddSLaurent Vivier 62507536dddSLaurent Vivier## 62607536dddSLaurent Vivier# @VirtVhostQueueStatus: 62707536dddSLaurent Vivier# 62807536dddSLaurent Vivier# Information of a vhost device's vhost_virtqueue, including most 62907536dddSLaurent Vivier# members of the vhost_dev vhost_virtqueue data structure. 63007536dddSLaurent Vivier# 63107536dddSLaurent Vivier# @name: Name of the VirtIODevice that uses this vhost_virtqueue 63207536dddSLaurent Vivier# 63307536dddSLaurent Vivier# @kick: vhost_virtqueue kick 63407536dddSLaurent Vivier# 63507536dddSLaurent Vivier# @call: vhost_virtqueue call 63607536dddSLaurent Vivier# 63707536dddSLaurent Vivier# @desc: vhost_virtqueue desc 63807536dddSLaurent Vivier# 63907536dddSLaurent Vivier# @avail: vhost_virtqueue avail 64007536dddSLaurent Vivier# 64107536dddSLaurent Vivier# @used: vhost_virtqueue used 64207536dddSLaurent Vivier# 64307536dddSLaurent Vivier# @num: vhost_virtqueue num 64407536dddSLaurent Vivier# 645f972ed59SMarkus Armbruster# @desc-phys: vhost_virtqueue desc_phys (descriptor area physical 646f972ed59SMarkus Armbruster# address) 64707536dddSLaurent Vivier# 64807536dddSLaurent Vivier# @desc-size: vhost_virtqueue desc_size 64907536dddSLaurent Vivier# 650f972ed59SMarkus Armbruster# @avail-phys: vhost_virtqueue avail_phys (driver area physical 651f972ed59SMarkus Armbruster# address) 65207536dddSLaurent Vivier# 65307536dddSLaurent Vivier# @avail-size: vhost_virtqueue avail_size 65407536dddSLaurent Vivier# 655f972ed59SMarkus Armbruster# @used-phys: vhost_virtqueue used_phys (device area physical address) 65607536dddSLaurent Vivier# 65707536dddSLaurent Vivier# @used-size: vhost_virtqueue used_size 65807536dddSLaurent Vivier# 65958379af7SHan Han# Since: 7.2 66007536dddSLaurent Vivier## 66107536dddSLaurent Vivier{ 'struct': 'VirtVhostQueueStatus', 66207536dddSLaurent Vivier 'data': { 'name': 'str', 66307536dddSLaurent Vivier 'kick': 'int', 66407536dddSLaurent Vivier 'call': 'int', 66507536dddSLaurent Vivier 'desc': 'uint64', 66607536dddSLaurent Vivier 'avail': 'uint64', 66707536dddSLaurent Vivier 'used': 'uint64', 66807536dddSLaurent Vivier 'num': 'int', 66907536dddSLaurent Vivier 'desc-phys': 'uint64', 67007536dddSLaurent Vivier 'desc-size': 'uint32', 67107536dddSLaurent Vivier 'avail-phys': 'uint64', 67207536dddSLaurent Vivier 'avail-size': 'uint32', 67307536dddSLaurent Vivier 'used-phys': 'uint64', 67407536dddSLaurent Vivier 'used-size': 'uint32' } } 67507536dddSLaurent Vivier 67607536dddSLaurent Vivier## 67707536dddSLaurent Vivier# @x-query-virtio-vhost-queue-status: 67807536dddSLaurent Vivier# 67907536dddSLaurent Vivier# Return information of a given vhost device's vhost_virtqueue 68007536dddSLaurent Vivier# 68107536dddSLaurent Vivier# @path: VirtIODevice canonical QOM path 68207536dddSLaurent Vivier# 68307536dddSLaurent Vivier# @queue: vhost_virtqueue index to examine 68407536dddSLaurent Vivier# 68507536dddSLaurent Vivier# Features: 686a937b6aaSMarkus Armbruster# 68707536dddSLaurent Vivier# @unstable: This command is meant for debugging. 68807536dddSLaurent Vivier# 68907536dddSLaurent Vivier# Returns: VirtVhostQueueStatus of the vhost_virtqueue 69007536dddSLaurent Vivier# 69158379af7SHan Han# Since: 7.2 69207536dddSLaurent Vivier# 69307536dddSLaurent Vivier# Examples: 69407536dddSLaurent Vivier# 69507536dddSLaurent Vivier# 1. Get vhost_virtqueue status for vhost-crypto 69607536dddSLaurent Vivier# 69707536dddSLaurent Vivier# -> { "execute": "x-query-virtio-vhost-queue-status", 69807536dddSLaurent Vivier# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", 69907536dddSLaurent Vivier# "queue": 0 } 70007536dddSLaurent Vivier# } 70107536dddSLaurent Vivier# <- { "return": { 70207536dddSLaurent Vivier# "avail-phys": 5216124928, 70307536dddSLaurent Vivier# "name": "virtio-crypto", 70407536dddSLaurent Vivier# "used-phys": 5216127040, 70507536dddSLaurent Vivier# "avail-size": 2054, 70607536dddSLaurent Vivier# "desc-size": 16384, 70707536dddSLaurent Vivier# "used-size": 8198, 70807536dddSLaurent Vivier# "desc": 140141447430144, 70907536dddSLaurent Vivier# "num": 1024, 71007536dddSLaurent Vivier# "call": 0, 71107536dddSLaurent Vivier# "avail": 140141447446528, 71207536dddSLaurent Vivier# "desc-phys": 5216108544, 71307536dddSLaurent Vivier# "used": 140141447448640, 71407536dddSLaurent Vivier# "kick": 0 71507536dddSLaurent Vivier# } 71607536dddSLaurent Vivier# } 71707536dddSLaurent Vivier# 71807536dddSLaurent Vivier# 2. Get vhost_virtqueue status for vhost-vsock 71907536dddSLaurent Vivier# 72007536dddSLaurent Vivier# -> { "execute": "x-query-virtio-vhost-queue-status", 72107536dddSLaurent Vivier# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", 72207536dddSLaurent Vivier# "queue": 0 } 72307536dddSLaurent Vivier# } 72407536dddSLaurent Vivier# <- { "return": { 72507536dddSLaurent Vivier# "avail-phys": 5182261248, 72607536dddSLaurent Vivier# "name": "vhost-vsock", 72707536dddSLaurent Vivier# "used-phys": 5182261568, 72807536dddSLaurent Vivier# "avail-size": 262, 72907536dddSLaurent Vivier# "desc-size": 2048, 73007536dddSLaurent Vivier# "used-size": 1030, 73107536dddSLaurent Vivier# "desc": 140141413580800, 73207536dddSLaurent Vivier# "num": 128, 73307536dddSLaurent Vivier# "call": 0, 73407536dddSLaurent Vivier# "avail": 140141413582848, 73507536dddSLaurent Vivier# "desc-phys": 5182259200, 73607536dddSLaurent Vivier# "used": 140141413583168, 73707536dddSLaurent Vivier# "kick": 0 73807536dddSLaurent Vivier# } 73907536dddSLaurent Vivier# } 74007536dddSLaurent Vivier## 74107536dddSLaurent Vivier{ 'command': 'x-query-virtio-vhost-queue-status', 74207536dddSLaurent Vivier 'data': { 'path': 'str', 'queue': 'uint16' }, 74307536dddSLaurent Vivier 'returns': 'VirtVhostQueueStatus', 74407536dddSLaurent Vivier 'features': [ 'unstable' ] } 7451ee7bb5bSLaurent Vivier 7461ee7bb5bSLaurent Vivier## 7471ee7bb5bSLaurent Vivier# @VirtioRingDesc: 7481ee7bb5bSLaurent Vivier# 7491ee7bb5bSLaurent Vivier# Information regarding the vring descriptor area 7501ee7bb5bSLaurent Vivier# 7511ee7bb5bSLaurent Vivier# @addr: Guest physical address of the descriptor area 7521ee7bb5bSLaurent Vivier# 7531ee7bb5bSLaurent Vivier# @len: Length of the descriptor area 7541ee7bb5bSLaurent Vivier# 7551ee7bb5bSLaurent Vivier# @flags: List of descriptor flags 7561ee7bb5bSLaurent Vivier# 75758379af7SHan Han# Since: 7.2 7581ee7bb5bSLaurent Vivier## 7591ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingDesc', 7601ee7bb5bSLaurent Vivier 'data': { 'addr': 'uint64', 7611ee7bb5bSLaurent Vivier 'len': 'uint32', 7621ee7bb5bSLaurent Vivier 'flags': [ 'str' ] } } 7631ee7bb5bSLaurent Vivier 7641ee7bb5bSLaurent Vivier## 7651ee7bb5bSLaurent Vivier# @VirtioRingAvail: 7661ee7bb5bSLaurent Vivier# 7671ee7bb5bSLaurent Vivier# Information regarding the avail vring (a.k.a. driver area) 7681ee7bb5bSLaurent Vivier# 7691ee7bb5bSLaurent Vivier# @flags: VRingAvail flags 7701ee7bb5bSLaurent Vivier# 7711ee7bb5bSLaurent Vivier# @idx: VRingAvail index 7721ee7bb5bSLaurent Vivier# 7731ee7bb5bSLaurent Vivier# @ring: VRingAvail ring[] entry at provided index 7741ee7bb5bSLaurent Vivier# 77558379af7SHan Han# Since: 7.2 7761ee7bb5bSLaurent Vivier## 7771ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingAvail', 7781ee7bb5bSLaurent Vivier 'data': { 'flags': 'uint16', 7791ee7bb5bSLaurent Vivier 'idx': 'uint16', 7801ee7bb5bSLaurent Vivier 'ring': 'uint16' } } 7811ee7bb5bSLaurent Vivier 7821ee7bb5bSLaurent Vivier## 7831ee7bb5bSLaurent Vivier# @VirtioRingUsed: 7841ee7bb5bSLaurent Vivier# 7851ee7bb5bSLaurent Vivier# Information regarding the used vring (a.k.a. device area) 7861ee7bb5bSLaurent Vivier# 7871ee7bb5bSLaurent Vivier# @flags: VRingUsed flags 7881ee7bb5bSLaurent Vivier# 7891ee7bb5bSLaurent Vivier# @idx: VRingUsed index 7901ee7bb5bSLaurent Vivier# 79158379af7SHan Han# Since: 7.2 7921ee7bb5bSLaurent Vivier## 7931ee7bb5bSLaurent Vivier{ 'struct': 'VirtioRingUsed', 7941ee7bb5bSLaurent Vivier 'data': { 'flags': 'uint16', 7951ee7bb5bSLaurent Vivier 'idx': 'uint16' } } 7961ee7bb5bSLaurent Vivier 7971ee7bb5bSLaurent Vivier## 7981ee7bb5bSLaurent Vivier# @VirtioQueueElement: 7991ee7bb5bSLaurent Vivier# 8001ee7bb5bSLaurent Vivier# Information regarding a VirtQueue's VirtQueueElement including 8011ee7bb5bSLaurent Vivier# descriptor, driver, and device areas 8021ee7bb5bSLaurent Vivier# 8031ee7bb5bSLaurent Vivier# @name: Name of the VirtIODevice that uses this VirtQueue 8041ee7bb5bSLaurent Vivier# 8051ee7bb5bSLaurent Vivier# @index: Index of the element in the queue 8061ee7bb5bSLaurent Vivier# 8071ee7bb5bSLaurent Vivier# @descs: List of descriptors (VirtioRingDesc) 8081ee7bb5bSLaurent Vivier# 8091ee7bb5bSLaurent Vivier# @avail: VRingAvail info 8101ee7bb5bSLaurent Vivier# 8111ee7bb5bSLaurent Vivier# @used: VRingUsed info 8121ee7bb5bSLaurent Vivier# 81358379af7SHan Han# Since: 7.2 8141ee7bb5bSLaurent Vivier## 8151ee7bb5bSLaurent Vivier{ 'struct': 'VirtioQueueElement', 8161ee7bb5bSLaurent Vivier 'data': { 'name': 'str', 8171ee7bb5bSLaurent Vivier 'index': 'uint32', 8181ee7bb5bSLaurent Vivier 'descs': [ 'VirtioRingDesc' ], 8191ee7bb5bSLaurent Vivier 'avail': 'VirtioRingAvail', 8201ee7bb5bSLaurent Vivier 'used': 'VirtioRingUsed' } } 8211ee7bb5bSLaurent Vivier 8221ee7bb5bSLaurent Vivier## 8231ee7bb5bSLaurent Vivier# @x-query-virtio-queue-element: 8241ee7bb5bSLaurent Vivier# 8251ee7bb5bSLaurent Vivier# Return the information about a VirtQueue's VirtQueueElement 8261ee7bb5bSLaurent Vivier# 8271ee7bb5bSLaurent Vivier# @path: VirtIODevice canonical QOM path 8281ee7bb5bSLaurent Vivier# 8291ee7bb5bSLaurent Vivier# @queue: VirtQueue index to examine 8301ee7bb5bSLaurent Vivier# 831a937b6aaSMarkus Armbruster# @index: Index of the element in the queue (default: head of the 832a937b6aaSMarkus Armbruster# queue) 8331ee7bb5bSLaurent Vivier# 8341ee7bb5bSLaurent Vivier# Features: 835a937b6aaSMarkus Armbruster# 8361ee7bb5bSLaurent Vivier# @unstable: This command is meant for debugging. 8371ee7bb5bSLaurent Vivier# 8381ee7bb5bSLaurent Vivier# Returns: VirtioQueueElement information 8391ee7bb5bSLaurent Vivier# 84058379af7SHan Han# Since: 7.2 8411ee7bb5bSLaurent Vivier# 8421ee7bb5bSLaurent Vivier# Examples: 8431ee7bb5bSLaurent Vivier# 8441ee7bb5bSLaurent Vivier# 1. Introspect on virtio-net's VirtQueue 0 at index 5 8451ee7bb5bSLaurent Vivier# 8461ee7bb5bSLaurent Vivier# -> { "execute": "x-query-virtio-queue-element", 8471ee7bb5bSLaurent Vivier# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend", 8481ee7bb5bSLaurent Vivier# "queue": 0, 8491ee7bb5bSLaurent Vivier# "index": 5 } 8501ee7bb5bSLaurent Vivier# } 8511ee7bb5bSLaurent Vivier# <- { "return": { 8521ee7bb5bSLaurent Vivier# "index": 5, 8531ee7bb5bSLaurent Vivier# "name": "virtio-net", 8541ee7bb5bSLaurent Vivier# "descs": [ 8551ee7bb5bSLaurent Vivier# { 8561ee7bb5bSLaurent Vivier# "flags": ["write"], 8571ee7bb5bSLaurent Vivier# "len": 1536, 8581ee7bb5bSLaurent Vivier# "addr": 5257305600 8591ee7bb5bSLaurent Vivier# } 8601ee7bb5bSLaurent Vivier# ], 8611ee7bb5bSLaurent Vivier# "avail": { 8621ee7bb5bSLaurent Vivier# "idx": 256, 8631ee7bb5bSLaurent Vivier# "flags": 0, 8641ee7bb5bSLaurent Vivier# "ring": 5 8651ee7bb5bSLaurent Vivier# }, 8661ee7bb5bSLaurent Vivier# "used": { 8671ee7bb5bSLaurent Vivier# "idx": 13, 8681ee7bb5bSLaurent Vivier# "flags": 0 8691ee7bb5bSLaurent Vivier# } 8701ee7bb5bSLaurent Vivier# } 8711ee7bb5bSLaurent Vivier# } 8721ee7bb5bSLaurent Vivier# 8731ee7bb5bSLaurent Vivier# 2. Introspect on virtio-crypto's VirtQueue 1 at head 8741ee7bb5bSLaurent Vivier# 8751ee7bb5bSLaurent Vivier# -> { "execute": "x-query-virtio-queue-element", 8761ee7bb5bSLaurent Vivier# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", 8771ee7bb5bSLaurent Vivier# "queue": 1 } 8781ee7bb5bSLaurent Vivier# } 8791ee7bb5bSLaurent Vivier# <- { "return": { 8801ee7bb5bSLaurent Vivier# "index": 0, 8811ee7bb5bSLaurent Vivier# "name": "virtio-crypto", 8821ee7bb5bSLaurent Vivier# "descs": [ 8831ee7bb5bSLaurent Vivier# { 8841ee7bb5bSLaurent Vivier# "flags": [], 8851ee7bb5bSLaurent Vivier# "len": 0, 8861ee7bb5bSLaurent Vivier# "addr": 8080268923184214134 8871ee7bb5bSLaurent Vivier# } 8881ee7bb5bSLaurent Vivier# ], 8891ee7bb5bSLaurent Vivier# "avail": { 8901ee7bb5bSLaurent Vivier# "idx": 280, 8911ee7bb5bSLaurent Vivier# "flags": 0, 8921ee7bb5bSLaurent Vivier# "ring": 0 8931ee7bb5bSLaurent Vivier# }, 8941ee7bb5bSLaurent Vivier# "used": { 8951ee7bb5bSLaurent Vivier# "idx": 280, 8961ee7bb5bSLaurent Vivier# "flags": 0 8971ee7bb5bSLaurent Vivier# } 8981ee7bb5bSLaurent Vivier# } 8991ee7bb5bSLaurent Vivier# } 9001ee7bb5bSLaurent Vivier# 9011ee7bb5bSLaurent Vivier# 3. Introspect on virtio-scsi's VirtQueue 2 at head 9021ee7bb5bSLaurent Vivier# 9031ee7bb5bSLaurent Vivier# -> { "execute": "x-query-virtio-queue-element", 9041ee7bb5bSLaurent Vivier# "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend", 9051ee7bb5bSLaurent Vivier# "queue": 2 } 9061ee7bb5bSLaurent Vivier# } 9071ee7bb5bSLaurent Vivier# <- { "return": { 9081ee7bb5bSLaurent Vivier# "index": 19, 9091ee7bb5bSLaurent Vivier# "name": "virtio-scsi", 9101ee7bb5bSLaurent Vivier# "descs": [ 9111ee7bb5bSLaurent Vivier# { 9121ee7bb5bSLaurent Vivier# "flags": ["used", "indirect", "write"], 9131ee7bb5bSLaurent Vivier# "len": 4099327944, 9141ee7bb5bSLaurent Vivier# "addr": 12055409292258155293 9151ee7bb5bSLaurent Vivier# } 9161ee7bb5bSLaurent Vivier# ], 9171ee7bb5bSLaurent Vivier# "avail": { 9181ee7bb5bSLaurent Vivier# "idx": 1147, 9191ee7bb5bSLaurent Vivier# "flags": 0, 9201ee7bb5bSLaurent Vivier# "ring": 19 9211ee7bb5bSLaurent Vivier# }, 9221ee7bb5bSLaurent Vivier# "used": { 9231ee7bb5bSLaurent Vivier# "idx": 280, 9241ee7bb5bSLaurent Vivier# "flags": 0 9251ee7bb5bSLaurent Vivier# } 9261ee7bb5bSLaurent Vivier# } 9271ee7bb5bSLaurent Vivier# } 9281ee7bb5bSLaurent Vivier## 9291ee7bb5bSLaurent Vivier{ 'command': 'x-query-virtio-queue-element', 9301ee7bb5bSLaurent Vivier 'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' }, 9311ee7bb5bSLaurent Vivier 'returns': 'VirtioQueueElement', 9321ee7bb5bSLaurent Vivier 'features': [ 'unstable' ] } 933cf03a152SStefan Hajnoczi 934cf03a152SStefan Hajnoczi## 935cf03a152SStefan Hajnoczi# @IOThreadVirtQueueMapping: 936cf03a152SStefan Hajnoczi# 937cf03a152SStefan Hajnoczi# Describes the subset of virtqueues assigned to an IOThread. 938cf03a152SStefan Hajnoczi# 939cf03a152SStefan Hajnoczi# @iothread: the id of IOThread object 940cf03a152SStefan Hajnoczi# 941*209e64d9SMarkus Armbruster# @vqs: an optional array of virtqueue indices that will be handled by 942*209e64d9SMarkus Armbruster# this IOThread. When absent, virtqueues are assigned round-robin 943*209e64d9SMarkus Armbruster# across all IOThreadVirtQueueMappings provided. Either all 944*209e64d9SMarkus Armbruster# IOThreadVirtQueueMappings must have @vqs or none of them must 945*209e64d9SMarkus Armbruster# have it. 946cf03a152SStefan Hajnoczi# 947cf03a152SStefan Hajnoczi# Since: 9.0 948cf03a152SStefan Hajnoczi## 949cf03a152SStefan Hajnoczi 950cf03a152SStefan Hajnoczi{ 'struct': 'IOThreadVirtQueueMapping', 951cf03a152SStefan Hajnoczi 'data': { 'iothread': 'str', '*vqs': ['uint16'] } } 952cf03a152SStefan Hajnoczi 953cf03a152SStefan Hajnoczi## 954cf03a152SStefan Hajnoczi# @DummyVirtioForceArrays: 955cf03a152SStefan Hajnoczi# 956*209e64d9SMarkus Armbruster# Not used by QMP; hack to let us use IOThreadVirtQueueMappingList 957*209e64d9SMarkus Armbruster# internally 958cf03a152SStefan Hajnoczi# 959cf03a152SStefan Hajnoczi# Since: 9.0 960cf03a152SStefan Hajnoczi## 961cf03a152SStefan Hajnoczi 962cf03a152SStefan Hajnoczi{ 'struct': 'DummyVirtioForceArrays', 963cf03a152SStefan Hajnoczi 'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } } 964965bc083SEric Auger 965965bc083SEric Auger## 966965bc083SEric Auger# @GranuleMode: 967965bc083SEric Auger# 968965bc083SEric Auger# @4k: granule page size of 4KiB 969965bc083SEric Auger# 970965bc083SEric Auger# @8k: granule page size of 8KiB 971965bc083SEric Auger# 972965bc083SEric Auger# @16k: granule page size of 16KiB 973965bc083SEric Auger# 974965bc083SEric Auger# @64k: granule page size of 64KiB 975965bc083SEric Auger# 976965bc083SEric Auger# @host: granule matches the host page size 977965bc083SEric Auger# 978965bc083SEric Auger# Since: 9.0 979965bc083SEric Auger## 980965bc083SEric Auger{ 'enum': 'GranuleMode', 981965bc083SEric Auger 'data': [ '4k', '8k', '16k', '64k', 'host' ] } 982