summaryrefslogtreecommitdiffstats
path: root/qapi
diff options
context:
space:
mode:
authorPeter Maydell2021-09-27 16:03:42 +0200
committerPeter Maydell2021-09-27 16:03:42 +0200
commitde8ed1055c2ce18c95f597eb10df360dcb534f99 (patch)
tree2554d4c016c5c7cc5bf9a8bc0dcde28b7ceef9b1 /qapi
parentMerge remote-tracking branch 'remotes/vivier2/tags/trivial-branch-for-6.2-pul... (diff)
parenttests/qapi-schema: Make test-qapi.py -u work when files are absent (diff)
downloadqemu-de8ed1055c2ce18c95f597eb10df360dcb534f99.tar.gz
qemu-de8ed1055c2ce18c95f597eb10df360dcb534f99.tar.xz
qemu-de8ed1055c2ce18c95f597eb10df360dcb534f99.zip
Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2021-09-25-v2' into staging
QAPI patches patches for 2021-09-25 # gpg: Signature made Mon 27 Sep 2021 13:44:23 BST # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-qapi-2021-09-25-v2: (25 commits) tests/qapi-schema: Make test-qapi.py -u work when files are absent tests/qapi-schema: Use Python OSError instead of outmoded IOError test-clone-visitor: Correct an accidental rename tests/qapi-schema: Rename flat-union-* test cases to union-* qapi: Drop simple unions tests/qapi-schema: Purge simple unions from tests tests/qapi-schema: Drop simple union __org.qemu_x-Union1 test-clone-visitor: Wean off __org.qemu_x-Union1 tests/qapi-schema: Rewrite simple union TestIfUnion to be flat tests/qapi-schema: Simple union UserDefListUnion is now unused, drop tests/qapi-schema: Wean off UserDefListUnion test-clone-visitor: Wean off UserDefListUnion test-qobject-output-visitor: Wean off UserDefListUnion test-qobject-input-visitor: Wean off UserDefListUnion tests/qapi-schema: Prepare for simple union UserDefListUnion removal qapi: Convert simple union TransactionAction to flat one qapi: Convert simple union ImageInfoSpecific to flat one qapi: Convert simple union SocketAddressLegacy to flat one qapi: Convert simple union ChardevBackend to flat one qapi: Convert simple union MemoryDeviceInfo to flat one ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'qapi')
-rw-r--r--qapi/block-core.json59
-rw-r--r--qapi/char.json190
-rw-r--r--qapi/machine.json42
-rw-r--r--qapi/sockets.json46
-rw-r--r--qapi/tpm.json24
-rw-r--r--qapi/transaction.json139
-rw-r--r--qapi/ui.json72
7 files changed, 498 insertions, 74 deletions
diff --git a/qapi/block-core.json b/qapi/block-core.json
index c8ce1d9d5d..623a4f4a3f 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -140,6 +140,52 @@
} }
##
+# @ImageInfoSpecificKind:
+#
+# @luks: Since 2.7
+# @rbd: Since 6.1
+#
+# Since: 1.7
+##
+{ 'enum': 'ImageInfoSpecificKind',
+ 'data': [ 'qcow2', 'vmdk', 'luks', 'rbd' ] }
+
+##
+# @ImageInfoSpecificQCow2Wrapper:
+#
+# Since: 1.7
+##
+{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
+ 'data': { 'data': 'ImageInfoSpecificQCow2' } }
+
+##
+# @ImageInfoSpecificVmdkWrapper:
+#
+# Since: 6.1
+##
+{ 'struct': 'ImageInfoSpecificVmdkWrapper',
+ 'data': { 'data': 'ImageInfoSpecificVmdk' } }
+
+##
+# @ImageInfoSpecificLUKSWrapper:
+#
+# Since: 2.7
+##
+{ 'struct': 'ImageInfoSpecificLUKSWrapper',
+ 'data': { 'data': 'QCryptoBlockInfoLUKS' } }
+# If we need to add block driver specific parameters for
+# LUKS in future, then we'll subclass QCryptoBlockInfoLUKS
+# to define a ImageInfoSpecificLUKS
+
+##
+# @ImageInfoSpecificRbdWrapper:
+#
+# Since: 6.1
+##
+{ 'struct': 'ImageInfoSpecificRbdWrapper',
+ 'data': { 'data': 'ImageInfoSpecificRbd' } }
+
+##
# @ImageInfoSpecific:
#
# A discriminated record of image format specific information structures.
@@ -147,14 +193,13 @@
# Since: 1.7
##
{ 'union': 'ImageInfoSpecific',
+ 'base': { 'type': 'ImageInfoSpecificKind' },
+ 'discriminator': 'type',
'data': {
- 'qcow2': 'ImageInfoSpecificQCow2',
- 'vmdk': 'ImageInfoSpecificVmdk',
- # If we need to add block driver specific parameters for
- # LUKS in future, then we'll subclass QCryptoBlockInfoLUKS
- # to define a ImageInfoSpecificLUKS
- 'luks': 'QCryptoBlockInfoLUKS',
- 'rbd': 'ImageInfoSpecificRbd'
+ 'qcow2': 'ImageInfoSpecificQCow2Wrapper',
+ 'vmdk': 'ImageInfoSpecificVmdkWrapper',
+ 'luks': 'ImageInfoSpecificLUKSWrapper',
+ 'rbd': 'ImageInfoSpecificRbdWrapper'
} }
##
diff --git a/qapi/char.json b/qapi/char.json
index 9b18ee3305..f5133a5eeb 100644
--- a/qapi/char.json
+++ b/qapi/char.json
@@ -408,38 +408,184 @@
'if': 'CONFIG_SPICE_PROTOCOL' }
##
+# @ChardevBackendKind:
+#
+# @pipe: Since 1.5
+# @udp: Since 1.5
+# @mux: Since 1.5
+# @msmouse: Since 1.5
+# @wctablet: Since 2.9
+# @braille: Since 1.5
+# @testdev: Since 2.2
+# @stdio: Since 1.5
+# @console: Since 1.5
+# @spicevmc: Since 1.5
+# @spiceport: Since 1.5
+# @qemu-vdagent: Since 6.1
+# @vc: v1.5
+# @ringbuf: Since 1.6
+# @memory: Since 1.5
+#
+# Since: 1.4
+##
+{ 'enum': 'ChardevBackendKind',
+ 'data': [ 'file',
+ 'serial',
+ 'parallel',
+ 'pipe',
+ 'socket',
+ 'udp',
+ 'pty',
+ 'null',
+ 'mux',
+ 'msmouse',
+ 'wctablet',
+ 'braille',
+ 'testdev',
+ 'stdio',
+ 'console',
+ { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' },
+ { 'name': 'spiceport', 'if': 'CONFIG_SPICE' },
+ { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' },
+ 'vc',
+ 'ringbuf',
+ # next one is just for compatibility
+ 'memory' ] }
+
+##
+# @ChardevFileWrapper:
+#
+# Since: 1.4
+##
+{ 'struct': 'ChardevFileWrapper',
+ 'data': { 'data': 'ChardevFile' } }
+
+##
+# @ChardevHostdevWrapper:
+#
+# Since: 1.4
+##
+{ 'struct': 'ChardevHostdevWrapper',
+ 'data': { 'data': 'ChardevHostdev' } }
+
+##
+# @ChardevSocketWrapper:
+#
+# Since: 1.4
+##
+{ 'struct': 'ChardevSocketWrapper',
+ 'data': { 'data': 'ChardevSocket' } }
+
+##
+# @ChardevUdpWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevUdpWrapper',
+ 'data': { 'data': 'ChardevUdp' } }
+
+##
+# @ChardevCommonWrapper:
+#
+# Since: 2.6
+##
+{ 'struct': 'ChardevCommonWrapper',
+ 'data': { 'data': 'ChardevCommon' } }
+
+##
+# @ChardevMuxWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevMuxWrapper',
+ 'data': { 'data': 'ChardevMux' } }
+
+##
+# @ChardevStdioWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevStdioWrapper',
+ 'data': { 'data': 'ChardevStdio' } }
+
+##
+# @ChardevSpiceChannelWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevSpiceChannelWrapper',
+ 'data': { 'data': 'ChardevSpiceChannel' },
+ 'if': 'CONFIG_SPICE' }
+
+##
+# @ChardevSpicePortWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevSpicePortWrapper',
+ 'data': { 'data': 'ChardevSpicePort' },
+ 'if': 'CONFIG_SPICE' }
+
+##
+# @ChardevQemuVDAgentWrapper:
+#
+# Since: 6.1
+##
+{ 'struct': 'ChardevQemuVDAgentWrapper',
+ 'data': { 'data': 'ChardevQemuVDAgent' },
+ 'if': 'CONFIG_SPICE_PROTOCOL' }
+
+##
+# @ChardevVCWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevVCWrapper',
+ 'data': { 'data': 'ChardevVC' } }
+
+##
+# @ChardevRingbufWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'ChardevRingbufWrapper',
+ 'data': { 'data': 'ChardevRingbuf' } }
+
+##
# @ChardevBackend:
#
# Configuration info for the new chardev backend.
#
-# Since: 1.4 (testdev since 2.2, wctablet since 2.9, vdagent since 6.1)
+# Since: 1.4
##
{ 'union': 'ChardevBackend',
- 'data': { 'file': 'ChardevFile',
- 'serial': 'ChardevHostdev',
- 'parallel': 'ChardevHostdev',
- 'pipe': 'ChardevHostdev',
- 'socket': 'ChardevSocket',
- 'udp': 'ChardevUdp',
- 'pty': 'ChardevCommon',
- 'null': 'ChardevCommon',
- 'mux': 'ChardevMux',
- 'msmouse': 'ChardevCommon',
- 'wctablet': 'ChardevCommon',
- 'braille': 'ChardevCommon',
- 'testdev': 'ChardevCommon',
- 'stdio': 'ChardevStdio',
- 'console': 'ChardevCommon',
- 'spicevmc': { 'type': 'ChardevSpiceChannel',
+ 'base': { 'type': 'ChardevBackendKind' },
+ 'discriminator': 'type',
+ 'data': { 'file': 'ChardevFileWrapper',
+ 'serial': 'ChardevHostdevWrapper',
+ 'parallel': 'ChardevHostdevWrapper',
+ 'pipe': 'ChardevHostdevWrapper',
+ 'socket': 'ChardevSocketWrapper',
+ 'udp': 'ChardevUdpWrapper',
+ 'pty': 'ChardevCommonWrapper',
+ 'null': 'ChardevCommonWrapper',
+ 'mux': 'ChardevMuxWrapper',
+ 'msmouse': 'ChardevCommonWrapper',
+ 'wctablet': 'ChardevCommonWrapper',
+ 'braille': 'ChardevCommonWrapper',
+ 'testdev': 'ChardevCommonWrapper',
+ 'stdio': 'ChardevStdioWrapper',
+ 'console': 'ChardevCommonWrapper',
+ 'spicevmc': { 'type': 'ChardevSpiceChannelWrapper',
'if': 'CONFIG_SPICE' },
- 'spiceport': { 'type': 'ChardevSpicePort',
+ 'spiceport': { 'type': 'ChardevSpicePortWrapper',
'if': 'CONFIG_SPICE' },
- 'qemu-vdagent': { 'type': 'ChardevQemuVDAgent',
+ 'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper',
'if': 'CONFIG_SPICE_PROTOCOL' },
- 'vc': 'ChardevVC',
- 'ringbuf': 'ChardevRingbuf',
+ 'vc': 'ChardevVCWrapper',
+ 'ringbuf': 'ChardevRingbufWrapper',
# next one is just for compatibility
- 'memory': 'ChardevRingbuf' } }
+ 'memory': 'ChardevRingbufWrapper' } }
##
# @ChardevReturn:
diff --git a/qapi/machine.json b/qapi/machine.json
index 157712f006..32d47f4e35 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1195,6 +1195,38 @@
}
##
+# @MemoryDeviceInfoKind:
+#
+# Since: 2.1
+##
+{ 'enum': 'MemoryDeviceInfoKind',
+ 'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem' ] }
+
+##
+# @PCDIMMDeviceInfoWrapper:
+#
+# Since: 2.1
+##
+{ 'struct': 'PCDIMMDeviceInfoWrapper',
+ 'data': { 'data': 'PCDIMMDeviceInfo' } }
+
+##
+# @VirtioPMEMDeviceInfoWrapper:
+#
+# Since: 2.1
+##
+{ 'struct': 'VirtioPMEMDeviceInfoWrapper',
+ 'data': { 'data': 'VirtioPMEMDeviceInfo' } }
+
+##
+# @VirtioMEMDeviceInfoWrapper:
+#
+# Since: 2.1
+##
+{ 'struct': 'VirtioMEMDeviceInfoWrapper',
+ 'data': { 'data': 'VirtioMEMDeviceInfo' } }
+
+##
# @MemoryDeviceInfo:
#
# Union containing information about a memory device
@@ -1205,10 +1237,12 @@
# Since: 2.1
##
{ 'union': 'MemoryDeviceInfo',
- 'data': { 'dimm': 'PCDIMMDeviceInfo',
- 'nvdimm': 'PCDIMMDeviceInfo',
- 'virtio-pmem': 'VirtioPMEMDeviceInfo',
- 'virtio-mem': 'VirtioMEMDeviceInfo'
+ 'base': { 'type': 'MemoryDeviceInfoKind' },
+ 'discriminator': 'type',
+ 'data': { 'dimm': 'PCDIMMDeviceInfoWrapper',
+ 'nvdimm': 'PCDIMMDeviceInfoWrapper',
+ 'virtio-pmem': 'VirtioPMEMDeviceInfoWrapper',
+ 'virtio-mem': 'VirtioMEMDeviceInfoWrapper'
}
}
diff --git a/qapi/sockets.json b/qapi/sockets.json
index 7866dc27d6..ef4b16d6f2 100644
--- a/qapi/sockets.json
+++ b/qapi/sockets.json
@@ -111,24 +111,56 @@
'port': 'str' } }
##
+# @InetSocketAddressWrapper:
+#
+# Since: 1.3
+##
+{ 'struct': 'InetSocketAddressWrapper',
+ 'data': { 'data': 'InetSocketAddress' } }
+
+##
+# @UnixSocketAddressWrapper:
+#
+# Since: 1.3
+##
+{ 'struct': 'UnixSocketAddressWrapper',
+ 'data': { 'data': 'UnixSocketAddress' } }
+
+##
+# @VsockSocketAddressWrapper:
+#
+# Since: 2.8
+##
+{ 'struct': 'VsockSocketAddressWrapper',
+ 'data': { 'data': 'VsockSocketAddress' } }
+
+##
+# @StringWrapper:
+#
+# Since: 1.3
+##
+{ 'struct': 'StringWrapper',
+ 'data': { 'data': 'String' } }
+
+##
# @SocketAddressLegacy:
#
# Captures the address of a socket, which could also be a named file descriptor
#
# Note: This type is deprecated in favor of SocketAddress. The
# difference between SocketAddressLegacy and SocketAddress is that the
-# latter is a flat union rather than a simple union. Flat is nicer
-# because it avoids nesting on the wire, i.e. that form has fewer {}.
-
+# latter is has fewer {} on the wire.
#
# Since: 1.3
##
{ 'union': 'SocketAddressLegacy',
+ 'base': { 'type': 'SocketAddressType' },
+ 'discriminator': 'type',
'data': {
- 'inet': 'InetSocketAddress',
- 'unix': 'UnixSocketAddress',
- 'vsock': 'VsockSocketAddress',
- 'fd': 'String' } }
+ 'inet': 'InetSocketAddressWrapper',
+ 'unix': 'UnixSocketAddressWrapper',
+ 'vsock': 'VsockSocketAddressWrapper',
+ 'fd': 'StringWrapper' } }
##
# @SocketAddressType:
diff --git a/qapi/tpm.json b/qapi/tpm.json
index f4dde2f646..4e2ea9756a 100644
--- a/qapi/tpm.json
+++ b/qapi/tpm.json
@@ -100,6 +100,24 @@
'if': 'CONFIG_TPM' }
##
+# @TPMPassthroughOptionsWrapper:
+#
+# Since: 1.5
+##
+{ 'struct': 'TPMPassthroughOptionsWrapper',
+ 'data': { 'data': 'TPMPassthroughOptions' },
+ 'if': 'CONFIG_TPM' }
+
+##
+# @TPMEmulatorOptionsWrapper:
+#
+# Since: 2.11
+##
+{ 'struct': 'TPMEmulatorOptionsWrapper',
+ 'data': { 'data': 'TPMEmulatorOptions' },
+ 'if': 'CONFIG_TPM' }
+
+##
# @TpmTypeOptions:
#
# A union referencing different TPM backend types' configuration options
@@ -110,8 +128,10 @@
# Since: 1.5
##
{ 'union': 'TpmTypeOptions',
- 'data': { 'passthrough' : 'TPMPassthroughOptions',
- 'emulator': 'TPMEmulatorOptions' },
+ 'base': { 'type': 'TpmType' },
+ 'discriminator': 'type',
+ 'data': { 'passthrough' : 'TPMPassthroughOptionsWrapper',
+ 'emulator': 'TPMEmulatorOptionsWrapper' },
'if': 'CONFIG_TPM' }
##
diff --git a/qapi/transaction.json b/qapi/transaction.json
index 894258d9e2..d175b5f863 100644
--- a/qapi/transaction.json
+++ b/qapi/transaction.json
@@ -39,40 +39,127 @@
'data': [ 'individual', 'grouped' ] }
##
+# @TransactionActionKind:
+#
+# @abort: Since 1.6
+# @block-dirty-bitmap-add: Since 2.5
+# @block-dirty-bitmap-remove: Since 4.2
+# @block-dirty-bitmap-clear: Since 2.5
+# @block-dirty-bitmap-enable: Since 4.0
+# @block-dirty-bitmap-disable: Since 4.0
+# @block-dirty-bitmap-merge: Since 4.0
+# @blockdev-backup: Since 2.3
+# @blockdev-snapshot: Since 2.5
+# @blockdev-snapshot-internal-sync: Since 1.7
+# @blockdev-snapshot-sync: since 1.1
+# @drive-backup: Since 1.6
+#
+# Since: 1.1
+##
+{ 'enum': 'TransactionActionKind',
+ 'data': [ 'abort', 'block-dirty-bitmap-add', 'block-dirty-bitmap-remove',
+ 'block-dirty-bitmap-clear', 'block-dirty-bitmap-enable',
+ 'block-dirty-bitmap-disable', 'block-dirty-bitmap-merge',
+ 'blockdev-backup', 'blockdev-snapshot',
+ 'blockdev-snapshot-internal-sync', 'blockdev-snapshot-sync',
+ 'drive-backup' ] }
+
+##
+# @AbortWrapper:
+#
+# Since: 1.6
+##
+{ 'struct': 'AbortWrapper',
+ 'data': { 'data': 'Abort' } }
+
+##
+# @BlockDirtyBitmapAddWrapper:
+#
+# Since: 2.5
+##
+{ 'struct': 'BlockDirtyBitmapAddWrapper',
+ 'data': { 'data': 'BlockDirtyBitmapAdd' } }
+
+##
+# @BlockDirtyBitmapWrapper:
+#
+# Since: 2.5
+##
+{ 'struct': 'BlockDirtyBitmapWrapper',
+ 'data': { 'data': 'BlockDirtyBitmap' } }
+
+##
+# @BlockDirtyBitmapMergeWrapper:
+#
+# Since: 4.0
+##
+{ 'struct': 'BlockDirtyBitmapMergeWrapper',
+ 'data': { 'data': 'BlockDirtyBitmapMerge' } }
+
+##
+# @BlockdevBackupWrapper:
+#
+# Since: 2.3
+##
+{ 'struct': 'BlockdevBackupWrapper',
+ 'data': { 'data': 'BlockdevBackup' } }
+
+##
+# @BlockdevSnapshotWrapper:
+#
+# Since: 2.5
+##
+{ 'struct': 'BlockdevSnapshotWrapper',
+ 'data': { 'data': 'BlockdevSnapshot' } }
+
+##
+# @BlockdevSnapshotInternalWrapper:
+#
+# Since: 1.7
+##
+{ 'struct': 'BlockdevSnapshotInternalWrapper',
+ 'data': { 'data': 'BlockdevSnapshotInternal' } }
+
+##
+# @BlockdevSnapshotSyncWrapper:
+#
+# Since: 1.1
+##
+{ 'struct': 'BlockdevSnapshotSyncWrapper',
+ 'data': { 'data': 'BlockdevSnapshotSync' } }
+
+##
+# @DriveBackupWrapper:
+#
+# Since: 1.6
+##
+{ 'struct': 'DriveBackupWrapper',
+ 'data': { 'data': 'DriveBackup' } }
+
+##
# @TransactionAction:
#
# A discriminated record of operations that can be performed with
-# @transaction. Action @type can be:
-#
-# - @abort: since 1.6
-# - @block-dirty-bitmap-add: since 2.5
-# - @block-dirty-bitmap-remove: since 4.2
-# - @block-dirty-bitmap-clear: since 2.5
-# - @block-dirty-bitmap-enable: since 4.0
-# - @block-dirty-bitmap-disable: since 4.0
-# - @block-dirty-bitmap-merge: since 4.0
-# - @blockdev-backup: since 2.3
-# - @blockdev-snapshot: since 2.5
-# - @blockdev-snapshot-internal-sync: since 1.7
-# - @blockdev-snapshot-sync: since 1.1
-# - @drive-backup: since 1.6
+# @transaction.
#
# Since: 1.1
##
{ 'union': 'TransactionAction',
+ 'base': { 'type': 'TransactionActionKind' },
+ 'discriminator': 'type',
'data': {
- 'abort': 'Abort',
- 'block-dirty-bitmap-add': 'BlockDirtyBitmapAdd',
- 'block-dirty-bitmap-remove': 'BlockDirtyBitmap',
- 'block-dirty-bitmap-clear': 'BlockDirtyBitmap',
- 'block-dirty-bitmap-enable': 'BlockDirtyBitmap',
- 'block-dirty-bitmap-disable': 'BlockDirtyBitmap',
- 'block-dirty-bitmap-merge': 'BlockDirtyBitmapMerge',
- 'blockdev-backup': 'BlockdevBackup',
- 'blockdev-snapshot': 'BlockdevSnapshot',
- 'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal',
- 'blockdev-snapshot-sync': 'BlockdevSnapshotSync',
- 'drive-backup': 'DriveBackup'
+ 'abort': 'AbortWrapper',
+ 'block-dirty-bitmap-add': 'BlockDirtyBitmapAddWrapper',
+ 'block-dirty-bitmap-remove': 'BlockDirtyBitmapWrapper',
+ 'block-dirty-bitmap-clear': 'BlockDirtyBitmapWrapper',
+ 'block-dirty-bitmap-enable': 'BlockDirtyBitmapWrapper',
+ 'block-dirty-bitmap-disable': 'BlockDirtyBitmapWrapper',
+ 'block-dirty-bitmap-merge': 'BlockDirtyBitmapMergeWrapper',
+ 'blockdev-backup': 'BlockdevBackupWrapper',
+ 'blockdev-snapshot': 'BlockdevSnapshotWrapper',
+ 'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternalWrapper',
+ 'blockdev-snapshot-sync': 'BlockdevSnapshotSyncWrapper',
+ 'drive-backup': 'DriveBackupWrapper'
} }
##
diff --git a/qapi/ui.json b/qapi/ui.json
index b2cf7a6759..d7567ac866 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -825,6 +825,30 @@
'lang1', 'lang2' ] }
##
+# @KeyValueKind:
+#
+# Since: 1.3
+##
+{ 'enum': 'KeyValueKind',
+ 'data': [ 'number', 'qcode' ] }
+
+##
+# @IntWrapper:
+#
+# Since: 1.3
+##
+{ 'struct': 'IntWrapper',
+ 'data': { 'data': 'int' } }
+
+##
+# @QKeyCodeWrapper:
+#
+# Since: 1.3
+##
+{ 'struct': 'QKeyCodeWrapper',
+ 'data': { 'data': 'QKeyCode' } }
+
+##
# @KeyValue:
#
# Represents a keyboard key.
@@ -832,9 +856,11 @@
# Since: 1.3
##
{ 'union': 'KeyValue',
+ 'base': { 'type': 'KeyValueKind' },
+ 'discriminator': 'type',
'data': {
- 'number': 'int',
- 'qcode': 'QKeyCode' } }
+ 'number': 'IntWrapper',
+ 'qcode': 'QKeyCodeWrapper' } }
##
# @send-key:
@@ -935,6 +961,38 @@
'value' : 'int' } }
##
+# @InputEventKind:
+#
+# Since: 2.0
+##
+{ 'enum': 'InputEventKind',
+ 'data': [ 'key', 'btn', 'rel', 'abs' ] }
+
+##
+# @InputKeyEventWrapper:
+#
+# Since: 2.0
+##
+{ 'struct': 'InputKeyEventWrapper',
+ 'data': { 'data': 'InputKeyEvent' } }
+
+##
+# @InputBtnEventWrapper:
+#
+# Since: 2.0
+##
+{ 'struct': 'InputBtnEventWrapper',
+ 'data': { 'data': 'InputBtnEvent' } }
+
+##
+# @InputMoveEventWrapper:
+#
+# Since: 2.0
+##
+{ 'struct': 'InputMoveEventWrapper',
+ 'data': { 'data': 'InputMoveEvent' } }
+
+##
# @InputEvent:
#
# Input event union.
@@ -949,10 +1007,12 @@
# Since: 2.0
##
{ 'union' : 'InputEvent',
- 'data' : { 'key' : 'InputKeyEvent',
- 'btn' : 'InputBtnEvent',
- 'rel' : 'InputMoveEvent',
- 'abs' : 'InputMoveEvent' } }
+ 'base': { 'type': 'InputEventKind' },
+ 'discriminator': 'type',
+ 'data' : { 'key' : 'InputKeyEventWrapper',
+ 'btn' : 'InputBtnEventWrapper',
+ 'rel' : 'InputMoveEventWrapper',
+ 'abs' : 'InputMoveEventWrapper' } }
##
# @input-send-event: