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