| # -*- Mode: Python -*- | |
| # vim: filetype=python | |
| # | |
| ## | |
| # ************** | |
| # Virtio devices | |
| # ************** | |
| ## | |
| ## | |
| # @VirtioInfo: | |
| # Basic information about a given VirtIODevice | |
| # | |
| # @path: The VirtIODevice's canonical QOM path | |
| # | |
| # @name: Name of the VirtIODevice | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioInfo', | |
| 'data': { 'path': 'str', | |
| 'name': 'str' } } | |
| ## | |
| # @x-query-virtio: | |
| # Return a list of all realized VirtIODevices | |
| # | |
| # Features: | |
| # | |
| # @unstable: This command is meant for debugging. | |
| # | |
| # Returns: List of gathered VirtIODevices | |
| # | |
| # Since: 7.2 | |
| # | |
| # .. qmp-example:: | |
| # | |
| # -> { "execute": "x-query-virtio" } | |
| # <- { "return": [ | |
| # { | |
| # "name": "virtio-input", | |
| # "path": "/machine/peripheral-anon/device[4]/virtio-backend" | |
| # }, | |
| # { | |
| # "name": "virtio-crypto", | |
| # "path": "/machine/peripheral/crypto0/virtio-backend" | |
| # }, | |
| # { | |
| # "name": "virtio-scsi", | |
| # "path": "/machine/peripheral-anon/device[2]/virtio-backend" | |
| # }, | |
| # { | |
| # "name": "virtio-net", | |
| # "path": "/machine/peripheral-anon/device[1]/virtio-backend" | |
| # }, | |
| # { | |
| # "name": "virtio-serial", | |
| # "path": "/machine/peripheral-anon/device[0]/virtio-backend" | |
| # } | |
| # ] | |
| # } | |
| ## | |
| { 'command': 'x-query-virtio', | |
| 'returns': [ 'VirtioInfo' ], | |
| 'features': [ 'unstable' ] } | |
| ## | |
| # @VhostStatus: | |
| # Information about a vhost device. This information will only be | |
| # displayed if the vhost device is active. | |
| # | |
| # @n-mem-sections: vhost_dev n_mem_sections | |
| # | |
| # @n-tmp-sections: vhost_dev n_tmp_sections | |
| # | |
| # @nvqs: vhost_dev nvqs (number of virtqueues being used) | |
| # | |
| # @vq-index: vhost_dev vq_index | |
| # | |
| # @features: vhost_dev features | |
| # | |
| # @acked-features: vhost_dev acked_features | |
| # | |
| # @protocol-features: vhost_dev protocol_features | |
| # | |
| # @max-queues: vhost_dev max_queues | |
| # | |
| # @backend-cap: vhost_dev backend_cap | |
| # | |
| # @log-enabled: vhost_dev log_enabled flag | |
| # | |
| # @log-size: vhost_dev log_size | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VhostStatus', | |
| 'data': { 'n-mem-sections': 'int', | |
| 'n-tmp-sections': 'int', | |
| 'nvqs': 'uint32', | |
| 'vq-index': 'int', | |
| 'features': 'VirtioDeviceFeatures', | |
| 'acked-features': 'VirtioDeviceFeatures', | |
| 'protocol-features': 'VhostDeviceProtocols', | |
| 'max-queues': 'uint64', | |
| 'backend-cap': 'uint64', | |
| 'log-enabled': 'bool', | |
| 'log-size': 'uint64' } } | |
| ## | |
| # @VirtioStatus: | |
| # Full status of the virtio device with most VirtIODevice members. | |
| # Also includes the full status of the corresponding vhost device | |
| # if the vhost device is active. | |
| # | |
| # @name: VirtIODevice name | |
| # | |
| # @device-id: VirtIODevice ID | |
| # | |
| # @vhost-started: VirtIODevice vhost_started flag | |
| # | |
| # @guest-features: VirtIODevice guest_features | |
| # | |
| # @host-features: VirtIODevice host_features | |
| # | |
| # @backend-features: VirtIODevice backend_features | |
| # | |
| # @device-endian: VirtIODevice device_endian | |
| # | |
| # @num-vqs: VirtIODevice virtqueue count. This is the number of | |
| # active virtqueues being used by the VirtIODevice. | |
| # | |
| # @status: VirtIODevice configuration status (`VirtioDeviceStatus`) | |
| # | |
| # @isr: VirtIODevice ISR | |
| # | |
| # @queue-sel: VirtIODevice queue_sel | |
| # | |
| # @vm-running: VirtIODevice vm_running flag | |
| # | |
| # @broken: VirtIODevice broken flag | |
| # | |
| # @disabled: VirtIODevice disabled flag | |
| # | |
| # @use-started: VirtIODevice use_started flag | |
| # | |
| # @started: VirtIODevice started flag | |
| # | |
| # @start-on-kick: VirtIODevice start_on_kick flag | |
| # | |
| # @disable-legacy-check: VirtIODevice disabled_legacy_check flag | |
| # | |
| # @bus-name: VirtIODevice bus_name | |
| # | |
| # @use-guest-notifier-mask: VirtIODevice use_guest_notifier_mask flag | |
| # | |
| # @vhost-dev: Corresponding vhost device info for a given | |
| # VirtIODevice. Present if the given VirtIODevice has an active | |
| # vhost device. | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioStatus', | |
| 'data': { 'name': 'str', | |
| 'device-id': 'uint16', | |
| 'vhost-started': 'bool', | |
| 'device-endian': 'str', | |
| 'guest-features': 'VirtioDeviceFeatures', | |
| 'host-features': 'VirtioDeviceFeatures', | |
| 'backend-features': 'VirtioDeviceFeatures', | |
| 'num-vqs': 'int', | |
| 'status': 'VirtioDeviceStatus', | |
| 'isr': 'uint8', | |
| 'queue-sel': 'uint16', | |
| 'vm-running': 'bool', | |
| 'broken': 'bool', | |
| 'disabled': 'bool', | |
| 'use-started': 'bool', | |
| 'started': 'bool', | |
| 'start-on-kick': 'bool', | |
| 'disable-legacy-check': 'bool', | |
| 'bus-name': 'str', | |
| 'use-guest-notifier-mask': 'bool', | |
| '*vhost-dev': 'VhostStatus' } } | |
| ## | |
| # @x-query-virtio-status: | |
| # Poll for a comprehensive status of a given virtio device | |
| # | |
| # @path: Canonical QOM path of the VirtIODevice | |
| # | |
| # Features: | |
| # | |
| # @unstable: This command is meant for debugging. | |
| # | |
| # Returns: Status of the virtio device | |
| # | |
| # Since: 7.2 | |
| # | |
| # .. qmp-example:: | |
| # :annotated: | |
| # | |
| # Poll for the status of virtio-crypto (no vhost-crypto active) | |
| # :: | |
| # | |
| # -> { "execute": "x-query-virtio-status", | |
| # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" } | |
| # } | |
| # <- { "return": { | |
| # "device-endian": "little", | |
| # "bus-name": "", | |
| # "disable-legacy-check": false, | |
| # "name": "virtio-crypto", | |
| # "started": true, | |
| # "device-id": 20, | |
| # "backend-features": { | |
| # "transports": [], | |
| # "dev-features": [] | |
| # }, | |
| # "start-on-kick": false, | |
| # "isr": 1, | |
| # "broken": false, | |
| # "status": { | |
| # "statuses": [ | |
| # "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", | |
| # "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", | |
| # "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", | |
| # "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" | |
| # ] | |
| # }, | |
| # "num-vqs": 2, | |
| # "guest-features": { | |
| # "dev-features": [], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
| # ] | |
| # }, | |
| # "host-features": { | |
| # "unknown-dev-features": 1073741824, | |
| # "unknown-dev-features2": 0, | |
| # "dev-features": [], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
| # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
| # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
| # ] | |
| # }, | |
| # "use-guest-notifier-mask": true, | |
| # "vm-running": true, | |
| # "queue-sel": 1, | |
| # "disabled": false, | |
| # "vhost-started": false, | |
| # "use-started": true | |
| # } | |
| # } | |
| # | |
| # .. qmp-example:: | |
| # :annotated: | |
| # | |
| # Poll for the status of virtio-net (vhost-net is active) | |
| # :: | |
| # | |
| # -> { "execute": "x-query-virtio-status", | |
| # "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" } | |
| # } | |
| # <- { "return": { | |
| # "device-endian": "little", | |
| # "bus-name": "", | |
| # "disabled-legacy-check": false, | |
| # "name": "virtio-net", | |
| # "started": true, | |
| # "device-id": 1, | |
| # "vhost-dev": { | |
| # "n-tmp-sections": 4, | |
| # "n-mem-sections": 4, | |
| # "max-queues": 1, | |
| # "backend-cap": 2, | |
| # "log-size": 0, | |
| # "backend-features": { | |
| # "dev-features": [], | |
| # "transports": [] | |
| # }, | |
| # "nvqs": 2, | |
| # "protocol-features": { | |
| # "protocols": [] | |
| # }, | |
| # "vq-index": 0, | |
| # "log-enabled": false, | |
| # "acked-features": { | |
| # "dev-features": [ | |
| # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" | |
| # ], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
| # ] | |
| # }, | |
| # "features": { | |
| # "dev-features": [ | |
| # "VHOST_F_LOG_ALL: Logging write descriptors supported", | |
| # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers" | |
| # ], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
| # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
| # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
| # ] | |
| # } | |
| # }, | |
| # "backend-features": { | |
| # "dev-features": [ | |
| # "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", | |
| # "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", | |
| # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
| # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
| # "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", | |
| # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
| # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
| # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
| # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
| # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
| # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
| # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
| # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
| # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
| # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
| # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
| # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
| # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
| # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
| # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
| # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
| # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
| # ], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
| # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
| # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
| # ] | |
| # }, | |
| # "start-on-kick": false, | |
| # "isr": 1, | |
| # "broken": false, | |
| # "status": { | |
| # "statuses": [ | |
| # "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found", | |
| # "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device", | |
| # "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete", | |
| # "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready" | |
| # ] | |
| # }, | |
| # "num-vqs": 3, | |
| # "guest-features": { | |
| # "dev-features": [ | |
| # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
| # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
| # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
| # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
| # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
| # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
| # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
| # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
| # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
| # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
| # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
| # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
| # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
| # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
| # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
| # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
| # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
| # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
| # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
| # ], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)" | |
| # ] | |
| # }, | |
| # "host-features": { | |
| # "dev-features": [ | |
| # "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported", | |
| # "VIRTIO_NET_F_GSO: Handling GSO-type packets supported", | |
| # "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel", | |
| # "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported", | |
| # "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported", | |
| # "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported", | |
| # "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported", | |
| # "VIRTIO_NET_F_CTRL_VQ: Control channel available", | |
| # "VIRTIO_NET_F_STATUS: Configuration status field available", | |
| # "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers", | |
| # "VIRTIO_NET_F_HOST_UFO: Device can receive UFO", | |
| # "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN", | |
| # "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6", | |
| # "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4", | |
| # "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO", | |
| # "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN", | |
| # "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6", | |
| # "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4", | |
| # "VIRTIO_NET_F_MAC: Device has given MAC address", | |
| # "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported", | |
| # "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported", | |
| # "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported" | |
| # ], | |
| # "transports": [ | |
| # "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled", | |
| # "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported", | |
| # "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)", | |
| # "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts", | |
| # "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ" | |
| # ] | |
| # }, | |
| # "use-guest-notifier-mask": true, | |
| # "vm-running": true, | |
| # "queue-sel": 2, | |
| # "disabled": false, | |
| # "vhost-started": true, | |
| # "use-started": true | |
| # } | |
| # } | |
| ## | |
| { 'command': 'x-query-virtio-status', | |
| 'data': { 'path': 'str' }, | |
| 'returns': 'VirtioStatus', | |
| 'features': [ 'unstable' ] } | |
| ## | |
| # @VirtioDeviceStatus: | |
| # A structure defined to list the configuration statuses of a | |
| # virtio device | |
| # | |
| # @statuses: List of decoded configuration statuses of the virtio | |
| # device | |
| # | |
| # @unknown-statuses: Virtio device statuses bitmap that have not been | |
| # decoded | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioDeviceStatus', | |
| 'data': { 'statuses': [ 'str' ], | |
| '*unknown-statuses': 'uint8' } } | |
| ## | |
| # @VhostDeviceProtocols: | |
| # A structure defined to list the vhost user protocol features of | |
| # a Vhost User device | |
| # | |
| # @protocols: List of decoded vhost user protocol features of a vhost | |
| # user device | |
| # | |
| # @unknown-protocols: Vhost user device protocol features bitmap that | |
| # have not been decoded | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VhostDeviceProtocols', | |
| 'data': { 'protocols': [ 'str' ], | |
| '*unknown-protocols': 'uint64' } } | |
| ## | |
| # @VirtioDeviceFeatures: | |
| # The common fields that apply to most Virtio devices. Some | |
| # devices may not have their own device-specific features | |
| # (e.g. virtio-rng). | |
| # | |
| # @transports: List of transport features of the virtio device | |
| # | |
| # @dev-features: List of device-specific features (if the device has | |
| # unique features) | |
| # | |
| # @unknown-dev-features: Virtio device features bitmap that have not | |
| # been decoded (bits 0-63) | |
| # | |
| # @unknown-dev-features2: Virtio device features bitmap that have not | |
| # been decoded (bits 64-127) (since 10.2) | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioDeviceFeatures', | |
| 'data': { 'transports': [ 'str' ], | |
| '*dev-features': [ 'str' ], | |
| '*unknown-dev-features': 'uint64', | |
| '*unknown-dev-features2': 'uint64' } } | |
| ## | |
| # @VirtQueueStatus: | |
| # Information of a VirtIODevice VirtQueue, including most members | |
| # of the VirtQueue data structure. | |
| # | |
| # @name: Name of the VirtIODevice that uses this VirtQueue | |
| # | |
| # @queue-index: VirtQueue queue_index | |
| # | |
| # @inuse: VirtQueue inuse | |
| # | |
| # @vring-num: VirtQueue vring.num | |
| # | |
| # @vring-num-default: VirtQueue vring.num_default | |
| # | |
| # @vring-align: VirtQueue vring.align | |
| # | |
| # @vring-desc: VirtQueue vring.desc (descriptor area) | |
| # | |
| # @vring-avail: VirtQueue vring.avail (driver area) | |
| # | |
| # @vring-used: VirtQueue vring.used (device area) | |
| # | |
| # @last-avail-idx: VirtQueue last_avail_idx or return of vhost_dev | |
| # vhost_get_vring_base (if vhost active) | |
| # | |
| # @shadow-avail-idx: VirtQueue shadow_avail_idx | |
| # | |
| # @used-idx: VirtQueue used_idx | |
| # | |
| # @signalled-used: VirtQueue signalled_used | |
| # | |
| # @signalled-used-valid: VirtQueue signalled_used_valid flag | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtQueueStatus', | |
| 'data': { 'name': 'str', | |
| 'queue-index': 'uint16', | |
| 'inuse': 'uint32', | |
| 'vring-num': 'uint32', | |
| 'vring-num-default': 'uint32', | |
| 'vring-align': 'uint32', | |
| 'vring-desc': 'uint64', | |
| 'vring-avail': 'uint64', | |
| 'vring-used': 'uint64', | |
| '*last-avail-idx': 'uint16', | |
| '*shadow-avail-idx': 'uint16', | |
| 'used-idx': 'uint16', | |
| 'signalled-used': 'uint16', | |
| 'signalled-used-valid': 'bool' } } | |
| ## | |
| # @x-query-virtio-queue-status: | |
| # Return the status of a given VirtIODevice's VirtQueue | |
| # | |
| # @path: VirtIODevice canonical QOM path | |
| # | |
| # @queue: VirtQueue index to examine | |
| # | |
| # Features: | |
| # | |
| # @unstable: This command is meant for debugging. | |
| # | |
| # Returns: Status of the queue | |
| # | |
| # .. note:: last_avail_idx will not be displayed in the case where the | |
| # selected VirtIODevice has a running vhost device and the | |
| # VirtIODevice VirtQueue index (queue) does not exist for the | |
| # corresponding vhost device vhost_virtqueue. Also, | |
| # shadow_avail_idx will not be displayed in the case where the | |
| # selected VirtIODevice has a running vhost device. | |
| # | |
| # Since: 7.2 | |
| # | |
| # .. qmp-example:: | |
| # :annotated: | |
| # | |
| # Get `VirtQueueStatus` for virtio-vsock (vhost-vsock running) | |
| # :: | |
| # | |
| # -> { "execute": "x-query-virtio-queue-status", | |
| # "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", | |
| # "queue": 1 } | |
| # } | |
| # <- { "return": { | |
| # "signalled-used": 0, | |
| # "inuse": 0, | |
| # "name": "vhost-vsock", | |
| # "vring-align": 4096, | |
| # "vring-desc": 5217370112, | |
| # "signalled-used-valid": false, | |
| # "vring-num-default": 128, | |
| # "vring-avail": 5217372160, | |
| # "queue-index": 1, | |
| # "last-avail-idx": 0, | |
| # "vring-used": 5217372480, | |
| # "used-idx": 0, | |
| # "vring-num": 128 | |
| # } | |
| # } | |
| # | |
| # .. qmp-example:: | |
| # :annotated: | |
| # | |
| # Get `VirtQueueStatus` for virtio-serial (no vhost) | |
| # :: | |
| # | |
| # -> { "execute": "x-query-virtio-queue-status", | |
| # "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend", | |
| # "queue": 20 } | |
| # } | |
| # <- { "return": { | |
| # "signalled-used": 0, | |
| # "inuse": 0, | |
| # "name": "virtio-serial", | |
| # "vring-align": 4096, | |
| # "vring-desc": 5182074880, | |
| # "signalled-used-valid": false, | |
| # "vring-num-default": 128, | |
| # "vring-avail": 5182076928, | |
| # "queue-index": 20, | |
| # "last-avail-idx": 0, | |
| # "vring-used": 5182077248, | |
| # "used-idx": 0, | |
| # "shadow-avail-idx": 0, | |
| # "vring-num": 128 | |
| # } | |
| # } | |
| ## | |
| { 'command': 'x-query-virtio-queue-status', | |
| 'data': { 'path': 'str', 'queue': 'uint16' }, | |
| 'returns': 'VirtQueueStatus', | |
| 'features': [ 'unstable' ] } | |
| ## | |
| # @VirtVhostQueueStatus: | |
| # Information of a vhost device's vhost_virtqueue, including most | |
| # members of the vhost_dev vhost_virtqueue data structure. | |
| # | |
| # @name: Name of the VirtIODevice that uses this vhost_virtqueue | |
| # | |
| # @kick: vhost_virtqueue kick | |
| # | |
| # @call: vhost_virtqueue call | |
| # | |
| # @num: vhost_virtqueue num | |
| # | |
| # @desc-phys: vhost_virtqueue desc_phys (descriptor area physical | |
| # address) | |
| # | |
| # @desc-size: vhost_virtqueue desc_size | |
| # | |
| # @avail-phys: vhost_virtqueue avail_phys (driver area physical | |
| # address) | |
| # | |
| # @avail-size: vhost_virtqueue avail_size | |
| # | |
| # @used-phys: vhost_virtqueue used_phys (device area physical address) | |
| # | |
| # @used-size: vhost_virtqueue used_size | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtVhostQueueStatus', | |
| 'data': { 'name': 'str', | |
| 'kick': 'int', | |
| 'call': 'int', | |
| 'num': 'int', | |
| 'desc-phys': 'uint64', | |
| 'desc-size': 'uint32', | |
| 'avail-phys': 'uint64', | |
| 'avail-size': 'uint32', | |
| 'used-phys': 'uint64', | |
| 'used-size': 'uint32' } } | |
| ## | |
| # @x-query-virtio-vhost-queue-status: | |
| # Return information of a given vhost device's vhost_virtqueue | |
| # | |
| # @path: VirtIODevice canonical QOM path | |
| # | |
| # @queue: vhost_virtqueue index to examine | |
| # | |
| # Features: | |
| # | |
| # @unstable: This command is meant for debugging. | |
| # | |
| # Returns: Status of the vhost_virtqueue | |
| # | |
| # Since: 7.2 | |
| # | |
| # .. qmp-example:: | |
| # :title: Get vhost_virtqueue status for vhost-crypto | |
| # | |
| # -> { "execute": "x-query-virtio-vhost-queue-status", | |
| # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", | |
| # "queue": 0 } | |
| # } | |
| # <- { "return": { | |
| # "avail-phys": 5216124928, | |
| # "name": "virtio-crypto", | |
| # "used-phys": 5216127040, | |
| # "avail-size": 2054, | |
| # "desc-size": 16384, | |
| # "used-size": 8198, | |
| # "num": 1024, | |
| # "call": 0, | |
| # "desc-phys": 5216108544, | |
| # "kick": 0 | |
| # } | |
| # } | |
| # | |
| # .. qmp-example:: | |
| # :title: Get vhost_virtqueue status for vhost-vsock | |
| # | |
| # -> { "execute": "x-query-virtio-vhost-queue-status", | |
| # "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend", | |
| # "queue": 0 } | |
| # } | |
| # <- { "return": { | |
| # "avail-phys": 5182261248, | |
| # "name": "vhost-vsock", | |
| # "used-phys": 5182261568, | |
| # "avail-size": 262, | |
| # "desc-size": 2048, | |
| # "used-size": 1030, | |
| # "num": 128, | |
| # "call": 0, | |
| # "desc-phys": 5182259200, | |
| # "kick": 0 | |
| # } | |
| # } | |
| ## | |
| { 'command': 'x-query-virtio-vhost-queue-status', | |
| 'data': { 'path': 'str', 'queue': 'uint16' }, | |
| 'returns': 'VirtVhostQueueStatus', | |
| 'features': [ 'unstable' ] } | |
| ## | |
| # @VirtioRingDesc: | |
| # Information regarding the vring descriptor area | |
| # | |
| # @addr: Guest physical address of the descriptor area | |
| # | |
| # @len: Length of the descriptor area | |
| # | |
| # @flags: List of descriptor flags | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioRingDesc', | |
| 'data': { 'addr': 'uint64', | |
| 'len': 'uint32', | |
| 'flags': [ 'str' ] } } | |
| ## | |
| # @VirtioRingAvail: | |
| # Information regarding the avail vring (a.k.a. driver area) | |
| # | |
| # @flags: VRingAvail flags | |
| # | |
| # @idx: VRingAvail index | |
| # | |
| # @ring: VRingAvail ring[] entry at provided index | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioRingAvail', | |
| 'data': { 'flags': 'uint16', | |
| 'idx': 'uint16', | |
| 'ring': 'uint16' } } | |
| ## | |
| # @VirtioRingUsed: | |
| # Information regarding the used vring (a.k.a. device area) | |
| # | |
| # @flags: VRingUsed flags | |
| # | |
| # @idx: VRingUsed index | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioRingUsed', | |
| 'data': { 'flags': 'uint16', | |
| 'idx': 'uint16' } } | |
| ## | |
| # @VirtioQueueElement: | |
| # Information regarding a VirtQueue's VirtQueueElement including | |
| # descriptor, driver, and device areas | |
| # | |
| # @name: Name of the VirtIODevice that uses this VirtQueue | |
| # | |
| # @index: Index of the element in the queue | |
| # | |
| # @descs: List of descriptors (`VirtioRingDesc`) | |
| # | |
| # @avail: VRingAvail info | |
| # | |
| # @used: VRingUsed info | |
| # | |
| # Since: 7.2 | |
| ## | |
| { 'struct': 'VirtioQueueElement', | |
| 'data': { 'name': 'str', | |
| 'index': 'uint32', | |
| 'descs': [ 'VirtioRingDesc' ], | |
| 'avail': 'VirtioRingAvail', | |
| 'used': 'VirtioRingUsed' } } | |
| ## | |
| # @x-query-virtio-queue-element: | |
| # Return the information about a VirtQueue's VirtQueueElement | |
| # | |
| # @path: VirtIODevice canonical QOM path | |
| # | |
| # @queue: VirtQueue index to examine | |
| # | |
| # @index: Index of the element in the queue (default: head of the | |
| # queue) | |
| # | |
| # Features: | |
| # | |
| # @unstable: This command is meant for debugging. | |
| # | |
| # Since: 7.2 | |
| # | |
| # .. qmp-example:: | |
| # :title: Introspect on virtio-net's VirtQueue 0 at index 5 | |
| # | |
| # -> { "execute": "x-query-virtio-queue-element", | |
| # "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend", | |
| # "queue": 0, | |
| # "index": 5 } | |
| # } | |
| # <- { "return": { | |
| # "index": 5, | |
| # "name": "virtio-net", | |
| # "descs": [ | |
| # { | |
| # "flags": ["write"], | |
| # "len": 1536, | |
| # "addr": 5257305600 | |
| # } | |
| # ], | |
| # "avail": { | |
| # "idx": 256, | |
| # "flags": 0, | |
| # "ring": 5 | |
| # }, | |
| # "used": { | |
| # "idx": 13, | |
| # "flags": 0 | |
| # } | |
| # } | |
| # } | |
| # | |
| # .. qmp-example:: | |
| # :title: Introspect on virtio-crypto's VirtQueue 1 at head | |
| # | |
| # -> { "execute": "x-query-virtio-queue-element", | |
| # "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend", | |
| # "queue": 1 } | |
| # } | |
| # <- { "return": { | |
| # "index": 0, | |
| # "name": "virtio-crypto", | |
| # "descs": [ | |
| # { | |
| # "flags": [], | |
| # "len": 0, | |
| # "addr": 8080268923184214134 | |
| # } | |
| # ], | |
| # "avail": { | |
| # "idx": 280, | |
| # "flags": 0, | |
| # "ring": 0 | |
| # }, | |
| # "used": { | |
| # "idx": 280, | |
| # "flags": 0 | |
| # } | |
| # } | |
| # } | |
| # | |
| # .. qmp-example:: | |
| # :title: Introspect on virtio-scsi's VirtQueue 2 at head | |
| # | |
| # -> { "execute": "x-query-virtio-queue-element", | |
| # "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend", | |
| # "queue": 2 } | |
| # } | |
| # <- { "return": { | |
| # "index": 19, | |
| # "name": "virtio-scsi", | |
| # "descs": [ | |
| # { | |
| # "flags": ["used", "indirect", "write"], | |
| # "len": 4099327944, | |
| # "addr": 12055409292258155293 | |
| # } | |
| # ], | |
| # "avail": { | |
| # "idx": 1147, | |
| # "flags": 0, | |
| # "ring": 19 | |
| # }, | |
| # "used": { | |
| # "idx": 280, | |
| # "flags": 0 | |
| # } | |
| # } | |
| # } | |
| ## | |
| { 'command': 'x-query-virtio-queue-element', | |
| 'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' }, | |
| 'returns': 'VirtioQueueElement', | |
| 'features': [ 'unstable' ] } | |
| ## | |
| # @IOThreadVirtQueueMapping: | |
| # Describes the subset of virtqueues assigned to an IOThread. | |
| # | |
| # @iothread: the id of IOThread object | |
| # | |
| # @vqs: an optional array of virtqueue indices that will be handled by | |
| # this IOThread. When absent, virtqueues are assigned round-robin | |
| # across all IOThreadVirtQueueMappings provided. Either all | |
| # IOThreadVirtQueueMappings must have @vqs or none of them must | |
| # have it. | |
| # | |
| # Since: 9.0 | |
| ## | |
| { 'struct': 'IOThreadVirtQueueMapping', | |
| 'data': { 'iothread': 'str', '*vqs': ['uint16'] } } | |
| ## | |
| # @VirtIOGPUOutput: | |
| # Describes configuration of a VirtIO GPU output. If both @xres | |
| # and @yres are set, they take precedence over root virtio-gpu | |
| # resolution configuration and enable the corresponding output. | |
| # If none of @xres and @yres are set, root virtio-gpu resolution | |
| # configuration takes precedence and only the first output is | |
| # enabled. Only setting one of @xres or @yres is an error. | |
| # | |
| # @name: the name of the output | |
| # | |
| # @xres: horizontal resolution of the output in pixels (since 11.0) | |
| # | |
| # @yres: vertical resolution of the output in pixels (since 11.0) | |
| # | |
| # Since: 10.1 | |
| ## | |
| { 'struct': 'VirtIOGPUOutput', | |
| 'data': { 'name': 'str', '*xres': 'uint16', '*yres': 'uint16' } } | |
| ## | |
| # @DummyVirtioForceArrays: | |
| # Not used by QMP; hack to let us use IOThreadVirtQueueMappingList | |
| # and VirtIOGPUOutputList internally | |
| # | |
| # Since: 9.0 | |
| ## | |
| { 'struct': 'DummyVirtioForceArrays', | |
| 'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'], | |
| 'unused-virtio-gpu-output': ['VirtIOGPUOutput'] } } | |
| ## | |
| # @GranuleMode: | |
| # | |
| # @4k: granule page size of 4KiB | |
| # | |
| # @8k: granule page size of 8KiB | |
| # | |
| # @16k: granule page size of 16KiB | |
| # | |
| # @64k: granule page size of 64KiB | |
| # | |
| # @host: granule matches the host page size | |
| # | |
| # Since: 9.0 | |
| ## | |
| { 'enum': 'GranuleMode', | |
| 'data': [ '4k', '8k', '16k', '64k', 'host' ] } | |
| ## | |
| # @VMAppleVirtioBlkVariant: | |
| # | |
| # @unspecified: The default, not a valid setting. | |
| # | |
| # @root: Block device holding the root volume | |
| # | |
| # @aux: Block device holding auxiliary data required for boot | |
| # | |
| # Since: 9.2 | |
| ## | |
| { 'enum': 'VMAppleVirtioBlkVariant', | |
| 'data': [ 'unspecified', 'root', 'aux' ] } |