qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

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' ] }