virtio.json (29717B)
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' ] }