| # -*- 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: |
| # |
| # Returns a list of all realized VirtIODevices |
| # |
| # Features: |
| # |
| # @unstable: This command is meant for debugging. |
| # |
| # Returns: List of gathered VirtIODevices |
| # |
| # Since: 7.2 |
| # |
| # 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 |
| # |
| # @backend-features: vhost_dev backend_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', |
| 'backend-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: VirtioStatus of the virtio device |
| # |
| # Since: 7.2 |
| # |
| # Examples: |
| # |
| # 1. 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, |
| # "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 |
| # } |
| # } |
| # |
| # 2. 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 |
| # |
| # Since: 7.2 |
| ## |
| { 'struct': 'VirtioDeviceFeatures', |
| 'data': { 'transports': [ 'str' ], |
| '*dev-features': [ 'str' ], |
| '*unknown-dev-features': '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: VirtQueueStatus of the VirtQueue |
| # |
| # Notes: 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 |
| # |
| # Examples: |
| # |
| # 1. 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 |
| # } |
| # } |
| # |
| # 2. 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 |
| # |
| # @desc: vhost_virtqueue desc |
| # |
| # @avail: vhost_virtqueue avail |
| # |
| # @used: vhost_virtqueue used |
| # |
| # @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', |
| 'desc': 'uint64', |
| 'avail': 'uint64', |
| 'used': 'uint64', |
| '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: VirtVhostQueueStatus of the vhost_virtqueue |
| # |
| # Since: 7.2 |
| # |
| # Examples: |
| # |
| # 1. 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, |
| # "desc": 140141447430144, |
| # "num": 1024, |
| # "call": 0, |
| # "avail": 140141447446528, |
| # "desc-phys": 5216108544, |
| # "used": 140141447448640, |
| # "kick": 0 |
| # } |
| # } |
| # |
| # 2. 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, |
| # "desc": 140141413580800, |
| # "num": 128, |
| # "call": 0, |
| # "avail": 140141413582848, |
| # "desc-phys": 5182259200, |
| # "used": 140141413583168, |
| # "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. |
| # |
| # Returns: VirtioQueueElement information |
| # |
| # Since: 7.2 |
| # |
| # Examples: |
| # |
| # 1. 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 |
| # } |
| # } |
| # } |
| # |
| # 2. 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 |
| # } |
| # } |
| # } |
| # |
| # 3. 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'] } } |
| |
| ## |
| # @DummyVirtioForceArrays: |
| # |
| # Not used by QMP; hack to let us use IOThreadVirtQueueMappingList internally |
| # |
| # Since: 9.0 |
| ## |
| |
| { 'struct': 'DummyVirtioForceArrays', |
| 'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } } |
| |
| ## |
| # @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' ] } |