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