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