xref: /openbmc/qemu/qapi/misc.json (revision 0a553c58)
1# -*- Mode: Python -*-
2#
3
4##
5# = Miscellanea
6##
7
8{ 'include': 'common.json' }
9
10##
11# @qmp_capabilities:
12#
13# Enable QMP capabilities.
14#
15# Arguments:
16#
17# @enable:   An optional list of QMPCapability values to enable.  The
18#            client must not enable any capability that is not
19#            mentioned in the QMP greeting message.  If the field is not
20#            provided, it means no QMP capabilities will be enabled.
21#            (since 2.12)
22#
23# Example:
24#
25# -> { "execute": "qmp_capabilities",
26#      "arguments": { "enable": [ "oob" ] } }
27# <- { "return": {} }
28#
29# Notes: This command is valid exactly when first connecting: it must be
30# issued before any other command will be accepted, and will fail once the
31# monitor is accepting other commands. (see qemu docs/interop/qmp-spec.txt)
32#
33# The QMP client needs to explicitly enable QMP capabilities, otherwise
34# all the QMP capabilities will be turned off by default.
35#
36# Since: 0.13
37#
38##
39{ 'command': 'qmp_capabilities',
40  'data': { '*enable': [ 'QMPCapability' ] },
41  'allow-preconfig': true }
42
43##
44# @QMPCapability:
45#
46# Enumeration of capabilities to be advertised during initial client
47# connection, used for agreeing on particular QMP extension behaviors.
48#
49# @oob:   QMP ability to support out-of-band requests.
50#         (Please refer to qmp-spec.txt for more information on OOB)
51#
52# Since: 2.12
53#
54##
55{ 'enum': 'QMPCapability',
56  'data': [ 'oob' ] }
57
58##
59# @VersionTriple:
60#
61# A three-part version number.
62#
63# @major:  The major version number.
64#
65# @minor:  The minor version number.
66#
67# @micro:  The micro version number.
68#
69# Since: 2.4
70##
71{ 'struct': 'VersionTriple',
72  'data': {'major': 'int', 'minor': 'int', 'micro': 'int'} }
73
74
75##
76# @VersionInfo:
77#
78# A description of QEMU's version.
79#
80# @qemu:        The version of QEMU.  By current convention, a micro
81#               version of 50 signifies a development branch.  A micro version
82#               greater than or equal to 90 signifies a release candidate for
83#               the next minor version.  A micro version of less than 50
84#               signifies a stable release.
85#
86# @package:     QEMU will always set this field to an empty string.  Downstream
87#               versions of QEMU should set this to a non-empty string.  The
88#               exact format depends on the downstream however it highly
89#               recommended that a unique name is used.
90#
91# Since: 0.14.0
92##
93{ 'struct': 'VersionInfo',
94  'data': {'qemu': 'VersionTriple', 'package': 'str'} }
95
96##
97# @query-version:
98#
99# Returns the current version of QEMU.
100#
101# Returns:  A @VersionInfo object describing the current version of QEMU.
102#
103# Since: 0.14.0
104#
105# Example:
106#
107# -> { "execute": "query-version" }
108# <- {
109#       "return":{
110#          "qemu":{
111#             "major":0,
112#             "minor":11,
113#             "micro":5
114#          },
115#          "package":""
116#       }
117#    }
118#
119##
120{ 'command': 'query-version', 'returns': 'VersionInfo',
121  'allow-preconfig': true }
122
123##
124# @CommandInfo:
125#
126# Information about a QMP command
127#
128# @name: The command name
129#
130# Since: 0.14.0
131##
132{ 'struct': 'CommandInfo', 'data': {'name': 'str'} }
133
134##
135# @query-commands:
136#
137# Return a list of supported QMP commands by this server
138#
139# Returns: A list of @CommandInfo for all supported commands
140#
141# Since: 0.14.0
142#
143# Example:
144#
145# -> { "execute": "query-commands" }
146# <- {
147#      "return":[
148#         {
149#            "name":"query-balloon"
150#         },
151#         {
152#            "name":"system_powerdown"
153#         }
154#      ]
155#    }
156#
157# Note: This example has been shortened as the real response is too long.
158#
159##
160{ 'command': 'query-commands', 'returns': ['CommandInfo'],
161  'allow-preconfig': true }
162
163##
164# @LostTickPolicy:
165#
166# Policy for handling lost ticks in timer devices.
167#
168# @discard: throw away the missed tick(s) and continue with future injection
169#           normally.  Guest time may be delayed, unless the OS has explicit
170#           handling of lost ticks
171#
172# @delay: continue to deliver ticks at the normal rate.  Guest time will be
173#         delayed due to the late tick
174#
175# @merge: merge the missed tick(s) into one tick and inject.  Guest time
176#         may be delayed, depending on how the OS reacts to the merging
177#         of ticks
178#
179# @slew: deliver ticks at a higher rate to catch up with the missed tick. The
180#        guest time should not be delayed once catchup is complete.
181#
182# Since: 2.0
183##
184{ 'enum': 'LostTickPolicy',
185  'data': ['discard', 'delay', 'merge', 'slew' ] }
186
187##
188# @add_client:
189#
190# Allow client connections for VNC, Spice and socket based
191# character devices to be passed in to QEMU via SCM_RIGHTS.
192#
193# @protocol: protocol name. Valid names are "vnc", "spice" or the
194#            name of a character device (eg. from -chardev id=XXXX)
195#
196# @fdname: file descriptor name previously passed via 'getfd' command
197#
198# @skipauth: whether to skip authentication. Only applies
199#            to "vnc" and "spice" protocols
200#
201# @tls: whether to perform TLS. Only applies to the "spice"
202#       protocol
203#
204# Returns: nothing on success.
205#
206# Since: 0.14.0
207#
208# Example:
209#
210# -> { "execute": "add_client", "arguments": { "protocol": "vnc",
211#                                              "fdname": "myclient" } }
212# <- { "return": {} }
213#
214##
215{ 'command': 'add_client',
216  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
217            '*tls': 'bool' } }
218
219##
220# @NameInfo:
221#
222# Guest name information.
223#
224# @name: The name of the guest
225#
226# Since: 0.14.0
227##
228{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }
229
230##
231# @query-name:
232#
233# Return the name information of a guest.
234#
235# Returns: @NameInfo of the guest
236#
237# Since: 0.14.0
238#
239# Example:
240#
241# -> { "execute": "query-name" }
242# <- { "return": { "name": "qemu-name" } }
243#
244##
245{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
246
247##
248# @KvmInfo:
249#
250# Information about support for KVM acceleration
251#
252# @enabled: true if KVM acceleration is active
253#
254# @present: true if KVM acceleration is built into this executable
255#
256# Since: 0.14.0
257##
258{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
259
260##
261# @query-kvm:
262#
263# Returns information about KVM acceleration
264#
265# Returns: @KvmInfo
266#
267# Since: 0.14.0
268#
269# Example:
270#
271# -> { "execute": "query-kvm" }
272# <- { "return": { "enabled": true, "present": true } }
273#
274##
275{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
276
277##
278# @UuidInfo:
279#
280# Guest UUID information (Universally Unique Identifier).
281#
282# @UUID: the UUID of the guest
283#
284# Since: 0.14.0
285#
286# Notes: If no UUID was specified for the guest, a null UUID is returned.
287##
288{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }
289
290##
291# @query-uuid:
292#
293# Query the guest UUID information.
294#
295# Returns: The @UuidInfo for the guest
296#
297# Since: 0.14.0
298#
299# Example:
300#
301# -> { "execute": "query-uuid" }
302# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
303#
304##
305{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true }
306
307##
308# @EventInfo:
309#
310# Information about a QMP event
311#
312# @name: The event name
313#
314# Since: 1.2.0
315##
316{ 'struct': 'EventInfo', 'data': {'name': 'str'} }
317
318##
319# @query-events:
320#
321# Return information on QMP events.
322#
323# Returns: A list of @EventInfo.
324#
325# Since: 1.2.0
326#
327# Note: This command is deprecated, because its output doesn't reflect
328# compile-time configuration.  Use query-qmp-schema instead.
329#
330# Example:
331#
332# -> { "execute": "query-events" }
333# <- {
334#      "return": [
335#          {
336#             "name":"SHUTDOWN"
337#          },
338#          {
339#             "name":"RESET"
340#          }
341#       ]
342#    }
343#
344# Note: This example has been shortened as the real response is too long.
345#
346##
347{ 'command': 'query-events', 'returns': ['EventInfo'] }
348
349##
350# @CpuInfoArch:
351#
352# An enumeration of cpu types that enable additional information during
353# @query-cpus and @query-cpus-fast.
354#
355# @s390: since 2.12
356#
357# @riscv: since 2.12
358#
359# Since: 2.6
360##
361{ 'enum': 'CpuInfoArch',
362  'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 's390', 'riscv', 'other' ] }
363
364##
365# @CpuInfo:
366#
367# Information about a virtual CPU
368#
369# @CPU: the index of the virtual CPU
370#
371# @current: this only exists for backwards compatibility and should be ignored
372#
373# @halted: true if the virtual CPU is in the halt state.  Halt usually refers
374#          to a processor specific low power mode.
375#
376# @qom_path: path to the CPU object in the QOM tree (since 2.4)
377#
378# @thread_id: ID of the underlying host thread
379#
380# @props: properties describing to which node/socket/core/thread
381#         virtual CPU belongs to, provided if supported by board (since 2.10)
382#
383# @arch: architecture of the cpu, which determines which additional fields
384#        will be listed (since 2.6)
385#
386# Since: 0.14.0
387#
388# Notes: @halted is a transient state that changes frequently.  By the time the
389#        data is sent to the client, the guest may no longer be halted.
390##
391{ 'union': 'CpuInfo',
392  'base': {'CPU': 'int', 'current': 'bool', 'halted': 'bool',
393           'qom_path': 'str', 'thread_id': 'int',
394           '*props': 'CpuInstanceProperties', 'arch': 'CpuInfoArch' },
395  'discriminator': 'arch',
396  'data': { 'x86': 'CpuInfoX86',
397            'sparc': 'CpuInfoSPARC',
398            'ppc': 'CpuInfoPPC',
399            'mips': 'CpuInfoMIPS',
400            'tricore': 'CpuInfoTricore',
401            's390': 'CpuInfoS390',
402            'riscv': 'CpuInfoRISCV' } }
403
404##
405# @CpuInfoX86:
406#
407# Additional information about a virtual i386 or x86_64 CPU
408#
409# @pc: the 64-bit instruction pointer
410#
411# Since: 2.6
412##
413{ 'struct': 'CpuInfoX86', 'data': { 'pc': 'int' } }
414
415##
416# @CpuInfoSPARC:
417#
418# Additional information about a virtual SPARC CPU
419#
420# @pc: the PC component of the instruction pointer
421#
422# @npc: the NPC component of the instruction pointer
423#
424# Since: 2.6
425##
426{ 'struct': 'CpuInfoSPARC', 'data': { 'pc': 'int', 'npc': 'int' } }
427
428##
429# @CpuInfoPPC:
430#
431# Additional information about a virtual PPC CPU
432#
433# @nip: the instruction pointer
434#
435# Since: 2.6
436##
437{ 'struct': 'CpuInfoPPC', 'data': { 'nip': 'int' } }
438
439##
440# @CpuInfoMIPS:
441#
442# Additional information about a virtual MIPS CPU
443#
444# @PC: the instruction pointer
445#
446# Since: 2.6
447##
448{ 'struct': 'CpuInfoMIPS', 'data': { 'PC': 'int' } }
449
450##
451# @CpuInfoTricore:
452#
453# Additional information about a virtual Tricore CPU
454#
455# @PC: the instruction pointer
456#
457# Since: 2.6
458##
459{ 'struct': 'CpuInfoTricore', 'data': { 'PC': 'int' } }
460
461##
462# @CpuInfoRISCV:
463#
464# Additional information about a virtual RISCV CPU
465#
466# @pc: the instruction pointer
467#
468# Since 2.12
469##
470{ 'struct': 'CpuInfoRISCV', 'data': { 'pc': 'int' } }
471
472##
473# @CpuS390State:
474#
475# An enumeration of cpu states that can be assumed by a virtual
476# S390 CPU
477#
478# Since: 2.12
479##
480{ 'enum': 'CpuS390State',
481  'prefix': 'S390_CPU_STATE',
482  'data': [ 'uninitialized', 'stopped', 'check-stop', 'operating', 'load' ] }
483
484##
485# @CpuInfoS390:
486#
487# Additional information about a virtual S390 CPU
488#
489# @cpu-state: the virtual CPU's state
490#
491# Since: 2.12
492##
493{ 'struct': 'CpuInfoS390', 'data': { 'cpu-state': 'CpuS390State' } }
494
495##
496# @query-cpus:
497#
498# Returns a list of information about each virtual CPU.
499#
500# This command causes vCPU threads to exit to userspace, which causes
501# a small interruption to guest CPU execution. This will have a negative
502# impact on realtime guests and other latency sensitive guest workloads.
503# It is recommended to use @query-cpus-fast instead of this command to
504# avoid the vCPU interruption.
505#
506# Returns: a list of @CpuInfo for each virtual CPU
507#
508# Since: 0.14.0
509#
510# Example:
511#
512# -> { "execute": "query-cpus" }
513# <- { "return": [
514#          {
515#             "CPU":0,
516#             "current":true,
517#             "halted":false,
518#             "qom_path":"/machine/unattached/device[0]",
519#             "arch":"x86",
520#             "pc":3227107138,
521#             "thread_id":3134
522#          },
523#          {
524#             "CPU":1,
525#             "current":false,
526#             "halted":true,
527#             "qom_path":"/machine/unattached/device[2]",
528#             "arch":"x86",
529#             "pc":7108165,
530#             "thread_id":3135
531#          }
532#       ]
533#    }
534#
535# Notes: This interface is deprecated (since 2.12.0), and it is strongly
536#        recommended that you avoid using it. Use @query-cpus-fast to
537#        obtain information about virtual CPUs.
538#
539##
540{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
541
542##
543# @CpuInfoFast:
544#
545# Information about a virtual CPU
546#
547# @cpu-index: index of the virtual CPU
548#
549# @qom-path: path to the CPU object in the QOM tree
550#
551# @thread-id: ID of the underlying host thread
552#
553# @props: properties describing to which node/socket/core/thread
554#         virtual CPU belongs to, provided if supported by board
555#
556# @arch: base architecture of the cpu; deprecated since 3.0.0 in favor
557#        of @target
558#
559# @target: the QEMU system emulation target, which determines which
560#          additional fields will be listed (since 3.0)
561#
562# Since: 2.12
563#
564##
565{ 'union'         : 'CpuInfoFast',
566  'base'          : { 'cpu-index'    : 'int',
567                      'qom-path'     : 'str',
568                      'thread-id'    : 'int',
569                      '*props'       : 'CpuInstanceProperties',
570                      'arch'         : 'CpuInfoArch',
571                      'target'       : 'SysEmuTarget' },
572  'discriminator' : 'target',
573  'data'          : { 's390x'        : 'CpuInfoS390' } }
574
575##
576# @query-cpus-fast:
577#
578# Returns information about all virtual CPUs. This command does not
579# incur a performance penalty and should be used in production
580# instead of query-cpus.
581#
582# Returns: list of @CpuInfoFast
583#
584# Since: 2.12
585#
586# Example:
587#
588# -> { "execute": "query-cpus-fast" }
589# <- { "return": [
590#         {
591#             "thread-id": 25627,
592#             "props": {
593#                 "core-id": 0,
594#                 "thread-id": 0,
595#                 "socket-id": 0
596#             },
597#             "qom-path": "/machine/unattached/device[0]",
598#             "arch":"x86",
599#             "target":"x86_64",
600#             "cpu-index": 0
601#         },
602#         {
603#             "thread-id": 25628,
604#             "props": {
605#                 "core-id": 0,
606#                 "thread-id": 0,
607#                 "socket-id": 1
608#             },
609#             "qom-path": "/machine/unattached/device[2]",
610#             "arch":"x86",
611#             "target":"x86_64",
612#             "cpu-index": 1
613#         }
614#     ]
615# }
616##
617{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] }
618
619##
620# @IOThreadInfo:
621#
622# Information about an iothread
623#
624# @id: the identifier of the iothread
625#
626# @thread-id: ID of the underlying host thread
627#
628# @poll-max-ns: maximum polling time in ns, 0 means polling is disabled
629#               (since 2.9)
630#
631# @poll-grow: how many ns will be added to polling time, 0 means that it's not
632#             configured (since 2.9)
633#
634# @poll-shrink: how many ns will be removed from polling time, 0 means that
635#               it's not configured (since 2.9)
636#
637# Since: 2.0
638##
639{ 'struct': 'IOThreadInfo',
640  'data': {'id': 'str',
641           'thread-id': 'int',
642           'poll-max-ns': 'int',
643           'poll-grow': 'int',
644           'poll-shrink': 'int' } }
645
646##
647# @query-iothreads:
648#
649# Returns a list of information about each iothread.
650#
651# Note: this list excludes the QEMU main loop thread, which is not declared
652# using the -object iothread command-line option.  It is always the main thread
653# of the process.
654#
655# Returns: a list of @IOThreadInfo for each iothread
656#
657# Since: 2.0
658#
659# Example:
660#
661# -> { "execute": "query-iothreads" }
662# <- { "return": [
663#          {
664#             "id":"iothread0",
665#             "thread-id":3134
666#          },
667#          {
668#             "id":"iothread1",
669#             "thread-id":3135
670#          }
671#       ]
672#    }
673#
674##
675{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
676  'allow-preconfig': true }
677
678##
679# @BalloonInfo:
680#
681# Information about the guest balloon device.
682#
683# @actual: the number of bytes the balloon currently contains
684#
685# Since: 0.14.0
686#
687##
688{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
689
690##
691# @query-balloon:
692#
693# Return information about the balloon device.
694#
695# Returns: @BalloonInfo on success
696#
697#          If the balloon driver is enabled but not functional because the KVM
698#          kernel module cannot support it, KvmMissingCap
699#
700#          If no balloon device is present, DeviceNotActive
701#
702# Since: 0.14.0
703#
704# Example:
705#
706# -> { "execute": "query-balloon" }
707# <- { "return": {
708#          "actual": 1073741824,
709#       }
710#    }
711#
712##
713{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
714
715##
716# @BALLOON_CHANGE:
717#
718# Emitted when the guest changes the actual BALLOON level. This value is
719# equivalent to the @actual field return by the 'query-balloon' command
720#
721# @actual: actual level of the guest memory balloon in bytes
722#
723# Note: this event is rate-limited.
724#
725# Since: 1.2
726#
727# Example:
728#
729# <- { "event": "BALLOON_CHANGE",
730#      "data": { "actual": 944766976 },
731#      "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
732#
733##
734{ 'event': 'BALLOON_CHANGE',
735  'data': { 'actual': 'int' } }
736
737##
738# @PciMemoryRange:
739#
740# A PCI device memory region
741#
742# @base: the starting address (guest physical)
743#
744# @limit: the ending address (guest physical)
745#
746# Since: 0.14.0
747##
748{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
749
750##
751# @PciMemoryRegion:
752#
753# Information about a PCI device I/O region.
754#
755# @bar: the index of the Base Address Register for this region
756#
757# @type: 'io' if the region is a PIO region
758#        'memory' if the region is a MMIO region
759#
760# @size: memory size
761#
762# @prefetch: if @type is 'memory', true if the memory is prefetchable
763#
764# @mem_type_64: if @type is 'memory', true if the BAR is 64-bit
765#
766# Since: 0.14.0
767##
768{ 'struct': 'PciMemoryRegion',
769  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
770           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
771
772##
773# @PciBusInfo:
774#
775# Information about a bus of a PCI Bridge device
776#
777# @number: primary bus interface number.  This should be the number of the
778#          bus the device resides on.
779#
780# @secondary: secondary bus interface number.  This is the number of the
781#             main bus for the bridge
782#
783# @subordinate: This is the highest number bus that resides below the
784#               bridge.
785#
786# @io_range: The PIO range for all devices on this bridge
787#
788# @memory_range: The MMIO range for all devices on this bridge
789#
790# @prefetchable_range: The range of prefetchable MMIO for all devices on
791#                      this bridge
792#
793# Since: 2.4
794##
795{ 'struct': 'PciBusInfo',
796  'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
797           'io_range': 'PciMemoryRange',
798           'memory_range': 'PciMemoryRange',
799           'prefetchable_range': 'PciMemoryRange' } }
800
801##
802# @PciBridgeInfo:
803#
804# Information about a PCI Bridge device
805#
806# @bus: information about the bus the device resides on
807#
808# @devices: a list of @PciDeviceInfo for each device on this bridge
809#
810# Since: 0.14.0
811##
812{ 'struct': 'PciBridgeInfo',
813  'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
814
815##
816# @PciDeviceClass:
817#
818# Information about the Class of a PCI device
819#
820# @desc: a string description of the device's class
821#
822# @class: the class code of the device
823#
824# Since: 2.4
825##
826{ 'struct': 'PciDeviceClass',
827  'data': {'*desc': 'str', 'class': 'int'} }
828
829##
830# @PciDeviceId:
831#
832# Information about the Id of a PCI device
833#
834# @device: the PCI device id
835#
836# @vendor: the PCI vendor id
837#
838# @subsystem: the PCI subsystem id (since 3.1)
839#
840# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
841#
842# Since: 2.4
843##
844{ 'struct': 'PciDeviceId',
845  'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
846            '*subsystem-vendor': 'int'} }
847
848##
849# @PciDeviceInfo:
850#
851# Information about a PCI device
852#
853# @bus: the bus number of the device
854#
855# @slot: the slot the device is located in
856#
857# @function: the function of the slot used by the device
858#
859# @class_info: the class of the device
860#
861# @id: the PCI device id
862#
863# @irq: if an IRQ is assigned to the device, the IRQ number
864#
865# @qdev_id: the device name of the PCI device
866#
867# @pci_bridge: if the device is a PCI bridge, the bridge information
868#
869# @regions: a list of the PCI I/O regions associated with the device
870#
871# Notes: the contents of @class_info.desc are not stable and should only be
872#        treated as informational.
873#
874# Since: 0.14.0
875##
876{ 'struct': 'PciDeviceInfo',
877  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
878           'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
879           '*irq': 'int', 'qdev_id': 'str', '*pci_bridge': 'PciBridgeInfo',
880           'regions': ['PciMemoryRegion']} }
881
882##
883# @PciInfo:
884#
885# Information about a PCI bus
886#
887# @bus: the bus index
888#
889# @devices: a list of devices on this bus
890#
891# Since: 0.14.0
892##
893{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
894
895##
896# @query-pci:
897#
898# Return information about the PCI bus topology of the guest.
899#
900# Returns: a list of @PciInfo for each PCI bus. Each bus is
901# represented by a json-object, which has a key with a json-array of
902# all PCI devices attached to it. Each device is represented by a
903# json-object.
904#
905# Since: 0.14.0
906#
907# Example:
908#
909# -> { "execute": "query-pci" }
910# <- { "return": [
911#          {
912#             "bus": 0,
913#             "devices": [
914#                {
915#                   "bus": 0,
916#                   "qdev_id": "",
917#                   "slot": 0,
918#                   "class_info": {
919#                      "class": 1536,
920#                      "desc": "Host bridge"
921#                   },
922#                   "id": {
923#                      "device": 32902,
924#                      "vendor": 4663
925#                   },
926#                   "function": 0,
927#                   "regions": [
928#                   ]
929#                },
930#                {
931#                   "bus": 0,
932#                   "qdev_id": "",
933#                   "slot": 1,
934#                   "class_info": {
935#                      "class": 1537,
936#                      "desc": "ISA bridge"
937#                   },
938#                   "id": {
939#                      "device": 32902,
940#                      "vendor": 28672
941#                   },
942#                   "function": 0,
943#                   "regions": [
944#                   ]
945#                },
946#                {
947#                   "bus": 0,
948#                   "qdev_id": "",
949#                   "slot": 1,
950#                   "class_info": {
951#                      "class": 257,
952#                      "desc": "IDE controller"
953#                   },
954#                   "id": {
955#                      "device": 32902,
956#                      "vendor": 28688
957#                   },
958#                   "function": 1,
959#                   "regions": [
960#                      {
961#                         "bar": 4,
962#                         "size": 16,
963#                         "address": 49152,
964#                         "type": "io"
965#                      }
966#                   ]
967#                },
968#                {
969#                   "bus": 0,
970#                   "qdev_id": "",
971#                   "slot": 2,
972#                   "class_info": {
973#                      "class": 768,
974#                      "desc": "VGA controller"
975#                   },
976#                   "id": {
977#                      "device": 4115,
978#                      "vendor": 184
979#                   },
980#                   "function": 0,
981#                   "regions": [
982#                      {
983#                         "prefetch": true,
984#                         "mem_type_64": false,
985#                         "bar": 0,
986#                         "size": 33554432,
987#                         "address": 4026531840,
988#                         "type": "memory"
989#                      },
990#                      {
991#                         "prefetch": false,
992#                         "mem_type_64": false,
993#                         "bar": 1,
994#                         "size": 4096,
995#                         "address": 4060086272,
996#                         "type": "memory"
997#                      },
998#                      {
999#                         "prefetch": false,
1000#                         "mem_type_64": false,
1001#                         "bar": 6,
1002#                         "size": 65536,
1003#                         "address": -1,
1004#                         "type": "memory"
1005#                      }
1006#                   ]
1007#                },
1008#                {
1009#                   "bus": 0,
1010#                   "qdev_id": "",
1011#                   "irq": 11,
1012#                   "slot": 4,
1013#                   "class_info": {
1014#                      "class": 1280,
1015#                      "desc": "RAM controller"
1016#                   },
1017#                   "id": {
1018#                      "device": 6900,
1019#                      "vendor": 4098
1020#                   },
1021#                   "function": 0,
1022#                   "regions": [
1023#                      {
1024#                         "bar": 0,
1025#                         "size": 32,
1026#                         "address": 49280,
1027#                         "type": "io"
1028#                      }
1029#                   ]
1030#                }
1031#             ]
1032#          }
1033#       ]
1034#    }
1035#
1036# Note: This example has been shortened as the real response is too long.
1037#
1038##
1039{ 'command': 'query-pci', 'returns': ['PciInfo'] }
1040
1041##
1042# @quit:
1043#
1044# This command will cause the QEMU process to exit gracefully.  While every
1045# attempt is made to send the QMP response before terminating, this is not
1046# guaranteed.  When using this interface, a premature EOF would not be
1047# unexpected.
1048#
1049# Since: 0.14.0
1050#
1051# Example:
1052#
1053# -> { "execute": "quit" }
1054# <- { "return": {} }
1055##
1056{ 'command': 'quit' }
1057
1058##
1059# @stop:
1060#
1061# Stop all guest VCPU execution.
1062#
1063# Since:  0.14.0
1064#
1065# Notes:  This function will succeed even if the guest is already in the stopped
1066#         state.  In "inmigrate" state, it will ensure that the guest
1067#         remains paused once migration finishes, as if the -S option was
1068#         passed on the command line.
1069#
1070# Example:
1071#
1072# -> { "execute": "stop" }
1073# <- { "return": {} }
1074#
1075##
1076{ 'command': 'stop' }
1077
1078##
1079# @system_reset:
1080#
1081# Performs a hard reset of a guest.
1082#
1083# Since: 0.14.0
1084#
1085# Example:
1086#
1087# -> { "execute": "system_reset" }
1088# <- { "return": {} }
1089#
1090##
1091{ 'command': 'system_reset' }
1092
1093##
1094# @system_powerdown:
1095#
1096# Requests that a guest perform a powerdown operation.
1097#
1098# Since: 0.14.0
1099#
1100# Notes: A guest may or may not respond to this command.  This command
1101#        returning does not indicate that a guest has accepted the request or
1102#        that it has shut down.  Many guests will respond to this command by
1103#        prompting the user in some way.
1104# Example:
1105#
1106# -> { "execute": "system_powerdown" }
1107# <- { "return": {} }
1108#
1109##
1110{ 'command': 'system_powerdown' }
1111
1112##
1113# @cpu-add:
1114#
1115# Adds CPU with specified ID.
1116#
1117# @id: ID of CPU to be created, valid values [0..max_cpus)
1118#
1119# Returns: Nothing on success
1120#
1121# Since: 1.5
1122#
1123# Note: This command is deprecated.  The `device_add` command should be
1124#       used instead.  See the `query-hotpluggable-cpus` command for
1125#       details.
1126#
1127# Example:
1128#
1129# -> { "execute": "cpu-add", "arguments": { "id": 2 } }
1130# <- { "return": {} }
1131#
1132##
1133{ 'command': 'cpu-add', 'data': {'id': 'int'} }
1134
1135##
1136# @memsave:
1137#
1138# Save a portion of guest memory to a file.
1139#
1140# @val: the virtual address of the guest to start from
1141#
1142# @size: the size of memory region to save
1143#
1144# @filename: the file to save the memory to as binary data
1145#
1146# @cpu-index: the index of the virtual CPU to use for translating the
1147#                       virtual address (defaults to CPU 0)
1148#
1149# Returns: Nothing on success
1150#
1151# Since: 0.14.0
1152#
1153# Notes: Errors were not reliably returned until 1.1
1154#
1155# Example:
1156#
1157# -> { "execute": "memsave",
1158#      "arguments": { "val": 10,
1159#                     "size": 100,
1160#                     "filename": "/tmp/virtual-mem-dump" } }
1161# <- { "return": {} }
1162#
1163##
1164{ 'command': 'memsave',
1165  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
1166
1167##
1168# @pmemsave:
1169#
1170# Save a portion of guest physical memory to a file.
1171#
1172# @val: the physical address of the guest to start from
1173#
1174# @size: the size of memory region to save
1175#
1176# @filename: the file to save the memory to as binary data
1177#
1178# Returns: Nothing on success
1179#
1180# Since: 0.14.0
1181#
1182# Notes: Errors were not reliably returned until 1.1
1183#
1184# Example:
1185#
1186# -> { "execute": "pmemsave",
1187#      "arguments": { "val": 10,
1188#                     "size": 100,
1189#                     "filename": "/tmp/physical-mem-dump" } }
1190# <- { "return": {} }
1191#
1192##
1193{ 'command': 'pmemsave',
1194  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
1195
1196##
1197# @cont:
1198#
1199# Resume guest VCPU execution.
1200#
1201# Since:  0.14.0
1202#
1203# Returns:  If successful, nothing
1204#
1205# Notes:  This command will succeed if the guest is currently running.  It
1206#         will also succeed if the guest is in the "inmigrate" state; in
1207#         this case, the effect of the command is to make sure the guest
1208#         starts once migration finishes, removing the effect of the -S
1209#         command line option if it was passed.
1210#
1211# Example:
1212#
1213# -> { "execute": "cont" }
1214# <- { "return": {} }
1215#
1216##
1217{ 'command': 'cont' }
1218
1219##
1220# @x-exit-preconfig:
1221#
1222# Exit from "preconfig" state
1223#
1224# This command makes QEMU exit the preconfig state and proceed with
1225# VM initialization using configuration data provided on the command line
1226# and via the QMP monitor during the preconfig state. The command is only
1227# available during the preconfig state (i.e. when the --preconfig command
1228# line option was in use).
1229#
1230# Since 3.0
1231#
1232# Returns: nothing
1233#
1234# Example:
1235#
1236# -> { "execute": "x-exit-preconfig" }
1237# <- { "return": {} }
1238#
1239##
1240{ 'command': 'x-exit-preconfig', 'allow-preconfig': true }
1241
1242##
1243# @system_wakeup:
1244#
1245# Wake up guest from suspend. If the guest has wake-up from suspend
1246# support enabled (wakeup-suspend-support flag from
1247# query-current-machine), wake-up guest from suspend if the guest is
1248# in SUSPENDED state. Return an error otherwise.
1249#
1250# Since:  1.1
1251#
1252# Returns:  nothing.
1253#
1254# Note: prior to 4.0, this command does nothing in case the guest
1255# isn't suspended.
1256#
1257# Example:
1258#
1259# -> { "execute": "system_wakeup" }
1260# <- { "return": {} }
1261#
1262##
1263{ 'command': 'system_wakeup' }
1264
1265##
1266# @inject-nmi:
1267#
1268# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or all CPUs (ppc64).
1269# The command fails when the guest doesn't support injecting.
1270#
1271# Returns:  If successful, nothing
1272#
1273# Since:  0.14.0
1274#
1275# Note: prior to 2.1, this command was only supported for x86 and s390 VMs
1276#
1277# Example:
1278#
1279# -> { "execute": "inject-nmi" }
1280# <- { "return": {} }
1281#
1282##
1283{ 'command': 'inject-nmi' }
1284
1285##
1286# @balloon:
1287#
1288# Request the balloon driver to change its balloon size.
1289#
1290# @value: the target size of the balloon in bytes
1291#
1292# Returns: Nothing on success
1293#          If the balloon driver is enabled but not functional because the KVM
1294#            kernel module cannot support it, KvmMissingCap
1295#          If no balloon device is present, DeviceNotActive
1296#
1297# Notes: This command just issues a request to the guest.  When it returns,
1298#        the balloon size may not have changed.  A guest can change the balloon
1299#        size independent of this command.
1300#
1301# Since: 0.14.0
1302#
1303# Example:
1304#
1305# -> { "execute": "balloon", "arguments": { "value": 536870912 } }
1306# <- { "return": {} }
1307#
1308##
1309{ 'command': 'balloon', 'data': {'value': 'int'} }
1310
1311##
1312# @human-monitor-command:
1313#
1314# Execute a command on the human monitor and return the output.
1315#
1316# @command-line: the command to execute in the human monitor
1317#
1318# @cpu-index: The CPU to use for commands that require an implicit CPU
1319#
1320# Returns: the output of the command as a string
1321#
1322# Since: 0.14.0
1323#
1324# Notes: This command only exists as a stop-gap.  Its use is highly
1325#        discouraged.  The semantics of this command are not
1326#        guaranteed: this means that command names, arguments and
1327#        responses can change or be removed at ANY time.  Applications
1328#        that rely on long term stability guarantees should NOT
1329#        use this command.
1330#
1331#        Known limitations:
1332#
1333#        * This command is stateless, this means that commands that depend
1334#          on state information (such as getfd) might not work
1335#
1336#        * Commands that prompt the user for data don't currently work
1337#
1338# Example:
1339#
1340# -> { "execute": "human-monitor-command",
1341#      "arguments": { "command-line": "info kvm" } }
1342# <- { "return": "kvm support: enabled\r\n" }
1343#
1344##
1345{ 'command': 'human-monitor-command',
1346  'data': {'command-line': 'str', '*cpu-index': 'int'},
1347  'returns': 'str' }
1348
1349##
1350# @ObjectPropertyInfo:
1351#
1352# @name: the name of the property
1353#
1354# @type: the type of the property.  This will typically come in one of four
1355#        forms:
1356#
1357#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
1358#           These types are mapped to the appropriate JSON type.
1359#
1360#        2) A child type in the form 'child<subtype>' where subtype is a qdev
1361#           device type name.  Child properties create the composition tree.
1362#
1363#        3) A link type in the form 'link<subtype>' where subtype is a qdev
1364#           device type name.  Link properties form the device model graph.
1365#
1366# @description: if specified, the description of the property.
1367#
1368# Since: 1.2
1369##
1370{ 'struct': 'ObjectPropertyInfo',
1371  'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
1372
1373##
1374# @qom-list:
1375#
1376# This command will list any properties of a object given a path in the object
1377# model.
1378#
1379# @path: the path within the object model.  See @qom-get for a description of
1380#        this parameter.
1381#
1382# Returns: a list of @ObjectPropertyInfo that describe the properties of the
1383#          object.
1384#
1385# Since: 1.2
1386#
1387# Example:
1388#
1389# -> { "execute": "qom-list",
1390#      "arguments": { "path": "/chardevs" } }
1391# <- { "return": [ { "name": "type", "type": "string" },
1392#                  { "name": "parallel0", "type": "child<chardev-vc>" },
1393#                  { "name": "serial0", "type": "child<chardev-vc>" },
1394#                  { "name": "mon0", "type": "child<chardev-stdio>" } ] }
1395#
1396##
1397{ 'command': 'qom-list',
1398  'data': { 'path': 'str' },
1399  'returns': [ 'ObjectPropertyInfo' ],
1400  'allow-preconfig': true }
1401
1402##
1403# @qom-get:
1404#
1405# This command will get a property from a object model path and return the
1406# value.
1407#
1408# @path: The path within the object model.  There are two forms of supported
1409#        paths--absolute and partial paths.
1410#
1411#        Absolute paths are derived from the root object and can follow child<>
1412#        or link<> properties.  Since they can follow link<> properties, they
1413#        can be arbitrarily long.  Absolute paths look like absolute filenames
1414#        and are prefixed  with a leading slash.
1415#
1416#        Partial paths look like relative filenames.  They do not begin
1417#        with a prefix.  The matching rules for partial paths are subtle but
1418#        designed to make specifying objects easy.  At each level of the
1419#        composition tree, the partial path is matched as an absolute path.
1420#        The first match is not returned.  At least two matches are searched
1421#        for.  A successful result is only returned if only one match is
1422#        found.  If more than one match is found, a flag is return to
1423#        indicate that the match was ambiguous.
1424#
1425# @property: The property name to read
1426#
1427# Returns: The property value.  The type depends on the property
1428#          type. child<> and link<> properties are returned as #str
1429#          pathnames.  All integer property types (u8, u16, etc) are
1430#          returned as #int.
1431#
1432# Since: 1.2
1433#
1434# Example:
1435#
1436# 1. Use absolute path
1437#
1438# -> { "execute": "qom-get",
1439#      "arguments": { "path": "/machine/unattached/device[0]",
1440#                     "property": "hotplugged" } }
1441# <- { "return": false }
1442#
1443# 2. Use partial path
1444#
1445# -> { "execute": "qom-get",
1446#      "arguments": { "path": "unattached/sysbus",
1447#                     "property": "type" } }
1448# <- { "return": "System" }
1449#
1450##
1451{ 'command': 'qom-get',
1452  'data': { 'path': 'str', 'property': 'str' },
1453  'returns': 'any',
1454  'allow-preconfig': true }
1455
1456##
1457# @qom-set:
1458#
1459# This command will set a property from a object model path.
1460#
1461# @path: see @qom-get for a description of this parameter
1462#
1463# @property: the property name to set
1464#
1465# @value: a value who's type is appropriate for the property type.  See @qom-get
1466#         for a description of type mapping.
1467#
1468# Since: 1.2
1469#
1470# Example:
1471#
1472# -> { "execute": "qom-set",
1473#      "arguments": { "path": "/machine",
1474#                     "property": "graphics",
1475#                     "value": false } }
1476# <- { "return": {} }
1477#
1478##
1479{ 'command': 'qom-set',
1480  'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
1481  'allow-preconfig': true }
1482
1483##
1484# @change:
1485#
1486# This command is multiple commands multiplexed together.
1487#
1488# @device: This is normally the name of a block device but it may also be 'vnc'.
1489#          when it's 'vnc', then sub command depends on @target
1490#
1491# @target: If @device is a block device, then this is the new filename.
1492#          If @device is 'vnc', then if the value 'password' selects the vnc
1493#          change password command.   Otherwise, this specifies a new server URI
1494#          address to listen to for VNC connections.
1495#
1496# @arg:    If @device is a block device, then this is an optional format to open
1497#          the device with.
1498#          If @device is 'vnc' and @target is 'password', this is the new VNC
1499#          password to set.  See change-vnc-password for additional notes.
1500#
1501# Returns: Nothing on success.
1502#          If @device is not a valid block device, DeviceNotFound
1503#
1504# Notes:  This interface is deprecated, and it is strongly recommended that you
1505#         avoid using it.  For changing block devices, use
1506#         blockdev-change-medium; for changing VNC parameters, use
1507#         change-vnc-password.
1508#
1509# Since: 0.14.0
1510#
1511# Example:
1512#
1513# 1. Change a removable medium
1514#
1515# -> { "execute": "change",
1516#      "arguments": { "device": "ide1-cd0",
1517#                     "target": "/srv/images/Fedora-12-x86_64-DVD.iso" } }
1518# <- { "return": {} }
1519#
1520# 2. Change VNC password
1521#
1522# -> { "execute": "change",
1523#      "arguments": { "device": "vnc", "target": "password",
1524#                     "arg": "foobar1" } }
1525# <- { "return": {} }
1526#
1527##
1528{ 'command': 'change',
1529  'data': {'device': 'str', 'target': 'str', '*arg': 'str'} }
1530
1531##
1532# @ObjectTypeInfo:
1533#
1534# This structure describes a search result from @qom-list-types
1535#
1536# @name: the type name found in the search
1537#
1538# @abstract: the type is abstract and can't be directly instantiated.
1539#            Omitted if false. (since 2.10)
1540#
1541# @parent: Name of parent type, if any (since 2.10)
1542#
1543# Since: 1.1
1544##
1545{ 'struct': 'ObjectTypeInfo',
1546  'data': { 'name': 'str', '*abstract': 'bool', '*parent': 'str' } }
1547
1548##
1549# @qom-list-types:
1550#
1551# This command will return a list of types given search parameters
1552#
1553# @implements: if specified, only return types that implement this type name
1554#
1555# @abstract: if true, include abstract types in the results
1556#
1557# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
1558#
1559# Since: 1.1
1560##
1561{ 'command': 'qom-list-types',
1562  'data': { '*implements': 'str', '*abstract': 'bool' },
1563  'returns': [ 'ObjectTypeInfo' ],
1564  'allow-preconfig': true }
1565
1566##
1567# @device-list-properties:
1568#
1569# List properties associated with a device.
1570#
1571# @typename: the type name of a device
1572#
1573# Returns: a list of ObjectPropertyInfo describing a devices properties
1574#
1575# Note: objects can create properties at runtime, for example to describe
1576# links between different devices and/or objects. These properties
1577# are not included in the output of this command.
1578#
1579# Since: 1.2
1580##
1581{ 'command': 'device-list-properties',
1582  'data': { 'typename': 'str'},
1583  'returns': [ 'ObjectPropertyInfo' ] }
1584
1585##
1586# @qom-list-properties:
1587#
1588# List properties associated with a QOM object.
1589#
1590# @typename: the type name of an object
1591#
1592# Note: objects can create properties at runtime, for example to describe
1593# links between different devices and/or objects. These properties
1594# are not included in the output of this command.
1595#
1596# Returns: a list of ObjectPropertyInfo describing object properties
1597#
1598# Since: 2.12
1599##
1600{ 'command': 'qom-list-properties',
1601  'data': { 'typename': 'str'},
1602  'returns': [ 'ObjectPropertyInfo' ],
1603  'allow-preconfig': true }
1604
1605##
1606# @xen-set-global-dirty-log:
1607#
1608# Enable or disable the global dirty log mode.
1609#
1610# @enable: true to enable, false to disable.
1611#
1612# Returns: nothing
1613#
1614# Since: 1.3
1615#
1616# Example:
1617#
1618# -> { "execute": "xen-set-global-dirty-log",
1619#      "arguments": { "enable": true } }
1620# <- { "return": {} }
1621#
1622##
1623{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
1624
1625##
1626# @device_add:
1627#
1628# @driver: the name of the new device's driver
1629#
1630# @bus: the device's parent bus (device tree path)
1631#
1632# @id: the device's ID, must be unique
1633#
1634# Additional arguments depend on the type.
1635#
1636# Add a device.
1637#
1638# Notes:
1639# 1. For detailed information about this command, please refer to the
1640#    'docs/qdev-device-use.txt' file.
1641#
1642# 2. It's possible to list device properties by running QEMU with the
1643#    "-device DEVICE,help" command-line argument, where DEVICE is the
1644#    device's name
1645#
1646# Example:
1647#
1648# -> { "execute": "device_add",
1649#      "arguments": { "driver": "e1000", "id": "net1",
1650#                     "bus": "pci.0",
1651#                     "mac": "52:54:00:12:34:56" } }
1652# <- { "return": {} }
1653#
1654# TODO: This command effectively bypasses QAPI completely due to its
1655# "additional arguments" business.  It shouldn't have been added to
1656# the schema in this form.  It should be qapified properly, or
1657# replaced by a properly qapified command.
1658#
1659# Since: 0.13
1660##
1661{ 'command': 'device_add',
1662  'data': {'driver': 'str', '*bus': 'str', '*id': 'str'},
1663  'gen': false } # so we can get the additional arguments
1664
1665##
1666# @device_del:
1667#
1668# Remove a device from a guest
1669#
1670# @id: the device's ID or QOM path
1671#
1672# Returns: Nothing on success
1673#          If @id is not a valid device, DeviceNotFound
1674#
1675# Notes: When this command completes, the device may not be removed from the
1676#        guest.  Hot removal is an operation that requires guest cooperation.
1677#        This command merely requests that the guest begin the hot removal
1678#        process.  Completion of the device removal process is signaled with a
1679#        DEVICE_DELETED event. Guest reset will automatically complete removal
1680#        for all devices.
1681#
1682# Since: 0.14.0
1683#
1684# Example:
1685#
1686# -> { "execute": "device_del",
1687#      "arguments": { "id": "net1" } }
1688# <- { "return": {} }
1689#
1690# -> { "execute": "device_del",
1691#      "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
1692# <- { "return": {} }
1693#
1694##
1695{ 'command': 'device_del', 'data': {'id': 'str'} }
1696
1697##
1698# @DEVICE_DELETED:
1699#
1700# Emitted whenever the device removal completion is acknowledged by the guest.
1701# At this point, it's safe to reuse the specified device ID. Device removal can
1702# be initiated by the guest or by HMP/QMP commands.
1703#
1704# @device: device name
1705#
1706# @path: device path
1707#
1708# Since: 1.5
1709#
1710# Example:
1711#
1712# <- { "event": "DEVICE_DELETED",
1713#      "data": { "device": "virtio-net-pci-0",
1714#                "path": "/machine/peripheral/virtio-net-pci-0" },
1715#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
1716#
1717##
1718{ 'event': 'DEVICE_DELETED',
1719  'data': { '*device': 'str', 'path': 'str' } }
1720
1721##
1722# @DumpGuestMemoryFormat:
1723#
1724# An enumeration of guest-memory-dump's format.
1725#
1726# @elf: elf format
1727#
1728# @kdump-zlib: kdump-compressed format with zlib-compressed
1729#
1730# @kdump-lzo: kdump-compressed format with lzo-compressed
1731#
1732# @kdump-snappy: kdump-compressed format with snappy-compressed
1733#
1734# @win-dmp: Windows full crashdump format,
1735#           can be used instead of ELF converting (since 2.13)
1736#
1737# Since: 2.0
1738##
1739{ 'enum': 'DumpGuestMemoryFormat',
1740  'data': [ 'elf', 'kdump-zlib', 'kdump-lzo', 'kdump-snappy', 'win-dmp' ] }
1741
1742##
1743# @dump-guest-memory:
1744#
1745# Dump guest's memory to vmcore. It is a synchronous operation that can take
1746# very long depending on the amount of guest memory.
1747#
1748# @paging: if true, do paging to get guest's memory mapping. This allows
1749#          using gdb to process the core file.
1750#
1751#          IMPORTANT: this option can make QEMU allocate several gigabytes
1752#                     of RAM. This can happen for a large guest, or a
1753#                     malicious guest pretending to be large.
1754#
1755#          Also, paging=true has the following limitations:
1756#
1757#             1. The guest may be in a catastrophic state or can have corrupted
1758#                memory, which cannot be trusted
1759#             2. The guest can be in real-mode even if paging is enabled. For
1760#                example, the guest uses ACPI to sleep, and ACPI sleep state
1761#                goes in real-mode
1762#             3. Currently only supported on i386 and x86_64.
1763#
1764# @protocol: the filename or file descriptor of the vmcore. The supported
1765#            protocols are:
1766#
1767#            1. file: the protocol starts with "file:", and the following
1768#               string is the file's path.
1769#            2. fd: the protocol starts with "fd:", and the following string
1770#               is the fd's name.
1771#
1772# @detach: if true, QMP will return immediately rather than
1773#          waiting for the dump to finish. The user can track progress
1774#          using "query-dump". (since 2.6).
1775#
1776# @begin: if specified, the starting physical address.
1777#
1778# @length: if specified, the memory size, in bytes. If you don't
1779#          want to dump all guest's memory, please specify the start @begin
1780#          and @length
1781#
1782# @format: if specified, the format of guest memory dump. But non-elf
1783#          format is conflict with paging and filter, ie. @paging, @begin and
1784#          @length is not allowed to be specified with non-elf @format at the
1785#          same time (since 2.0)
1786#
1787# Note: All boolean arguments default to false
1788#
1789# Returns: nothing on success
1790#
1791# Since: 1.2
1792#
1793# Example:
1794#
1795# -> { "execute": "dump-guest-memory",
1796#      "arguments": { "protocol": "fd:dump" } }
1797# <- { "return": {} }
1798#
1799##
1800{ 'command': 'dump-guest-memory',
1801  'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
1802            '*begin': 'int', '*length': 'int',
1803            '*format': 'DumpGuestMemoryFormat'} }
1804
1805##
1806# @DumpStatus:
1807#
1808# Describe the status of a long-running background guest memory dump.
1809#
1810# @none: no dump-guest-memory has started yet.
1811#
1812# @active: there is one dump running in background.
1813#
1814# @completed: the last dump has finished successfully.
1815#
1816# @failed: the last dump has failed.
1817#
1818# Since: 2.6
1819##
1820{ 'enum': 'DumpStatus',
1821  'data': [ 'none', 'active', 'completed', 'failed' ] }
1822
1823##
1824# @DumpQueryResult:
1825#
1826# The result format for 'query-dump'.
1827#
1828# @status: enum of @DumpStatus, which shows current dump status
1829#
1830# @completed: bytes written in latest dump (uncompressed)
1831#
1832# @total: total bytes to be written in latest dump (uncompressed)
1833#
1834# Since: 2.6
1835##
1836{ 'struct': 'DumpQueryResult',
1837  'data': { 'status': 'DumpStatus',
1838            'completed': 'int',
1839            'total': 'int' } }
1840
1841##
1842# @query-dump:
1843#
1844# Query latest dump status.
1845#
1846# Returns: A @DumpStatus object showing the dump status.
1847#
1848# Since: 2.6
1849#
1850# Example:
1851#
1852# -> { "execute": "query-dump" }
1853# <- { "return": { "status": "active", "completed": 1024000,
1854#                  "total": 2048000 } }
1855#
1856##
1857{ 'command': 'query-dump', 'returns': 'DumpQueryResult' }
1858
1859##
1860# @DUMP_COMPLETED:
1861#
1862# Emitted when background dump has completed
1863#
1864# @result: final dump status
1865#
1866# @error: human-readable error string that provides
1867#         hint on why dump failed. Only presents on failure. The
1868#         user should not try to interpret the error string.
1869#
1870# Since: 2.6
1871#
1872# Example:
1873#
1874# { "event": "DUMP_COMPLETED",
1875#   "data": {"result": {"total": 1090650112, "status": "completed",
1876#                       "completed": 1090650112} } }
1877#
1878##
1879{ 'event': 'DUMP_COMPLETED' ,
1880  'data': { 'result': 'DumpQueryResult', '*error': 'str' } }
1881
1882##
1883# @DumpGuestMemoryCapability:
1884#
1885# A list of the available formats for dump-guest-memory
1886#
1887# Since: 2.0
1888##
1889{ 'struct': 'DumpGuestMemoryCapability',
1890  'data': {
1891      'formats': ['DumpGuestMemoryFormat'] } }
1892
1893##
1894# @query-dump-guest-memory-capability:
1895#
1896# Returns the available formats for dump-guest-memory
1897#
1898# Returns:  A @DumpGuestMemoryCapability object listing available formats for
1899#           dump-guest-memory
1900#
1901# Since: 2.0
1902#
1903# Example:
1904#
1905# -> { "execute": "query-dump-guest-memory-capability" }
1906# <- { "return": { "formats":
1907#                  ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] }
1908#
1909##
1910{ 'command': 'query-dump-guest-memory-capability',
1911  'returns': 'DumpGuestMemoryCapability' }
1912
1913##
1914# @object-add:
1915#
1916# Create a QOM object.
1917#
1918# @qom-type: the class name for the object to be created
1919#
1920# @id: the name of the new object
1921#
1922# @props: a dictionary of properties to be passed to the backend
1923#
1924# Returns: Nothing on success
1925#          Error if @qom-type is not a valid class name
1926#
1927# Since: 2.0
1928#
1929# Example:
1930#
1931# -> { "execute": "object-add",
1932#      "arguments": { "qom-type": "rng-random", "id": "rng1",
1933#                     "props": { "filename": "/dev/hwrng" } } }
1934# <- { "return": {} }
1935#
1936##
1937{ 'command': 'object-add',
1938  'data': {'qom-type': 'str', 'id': 'str', '*props': 'any'} }
1939
1940##
1941# @object-del:
1942#
1943# Remove a QOM object.
1944#
1945# @id: the name of the QOM object to remove
1946#
1947# Returns: Nothing on success
1948#          Error if @id is not a valid id for a QOM object
1949#
1950# Since: 2.0
1951#
1952# Example:
1953#
1954# -> { "execute": "object-del", "arguments": { "id": "rng1" } }
1955# <- { "return": {} }
1956#
1957##
1958{ 'command': 'object-del', 'data': {'id': 'str'} }
1959
1960##
1961# @getfd:
1962#
1963# Receive a file descriptor via SCM rights and assign it a name
1964#
1965# @fdname: file descriptor name
1966#
1967# Returns: Nothing on success
1968#
1969# Since: 0.14.0
1970#
1971# Notes: If @fdname already exists, the file descriptor assigned to
1972#        it will be closed and replaced by the received file
1973#        descriptor.
1974#
1975#        The 'closefd' command can be used to explicitly close the
1976#        file descriptor when it is no longer needed.
1977#
1978# Example:
1979#
1980# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
1981# <- { "return": {} }
1982#
1983##
1984{ 'command': 'getfd', 'data': {'fdname': 'str'} }
1985
1986##
1987# @closefd:
1988#
1989# Close a file descriptor previously passed via SCM rights
1990#
1991# @fdname: file descriptor name
1992#
1993# Returns: Nothing on success
1994#
1995# Since: 0.14.0
1996#
1997# Example:
1998#
1999# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
2000# <- { "return": {} }
2001#
2002##
2003{ 'command': 'closefd', 'data': {'fdname': 'str'} }
2004
2005##
2006# @MachineInfo:
2007#
2008# Information describing a machine.
2009#
2010# @name: the name of the machine
2011#
2012# @alias: an alias for the machine name
2013#
2014# @is-default: whether the machine is default
2015#
2016# @cpu-max: maximum number of CPUs supported by the machine type
2017#           (since 1.5.0)
2018#
2019# @hotpluggable-cpus: cpu hotplug via -device is supported (since 2.7.0)
2020#
2021# Since: 1.2.0
2022##
2023{ 'struct': 'MachineInfo',
2024  'data': { 'name': 'str', '*alias': 'str',
2025            '*is-default': 'bool', 'cpu-max': 'int',
2026            'hotpluggable-cpus': 'bool'} }
2027
2028##
2029# @query-machines:
2030#
2031# Return a list of supported machines
2032#
2033# Returns: a list of MachineInfo
2034#
2035# Since: 1.2.0
2036##
2037{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
2038
2039##
2040# @CurrentMachineParams:
2041#
2042# Information describing the running machine parameters.
2043#
2044# @wakeup-suspend-support: true if the machine supports wake up from
2045#                          suspend
2046#
2047# Since: 4.0
2048##
2049{ 'struct': 'CurrentMachineParams',
2050  'data': { 'wakeup-suspend-support': 'bool'} }
2051
2052##
2053# @query-current-machine:
2054#
2055# Return information on the current virtual machine.
2056#
2057# Returns: CurrentMachineParams
2058#
2059# Since: 4.0
2060##
2061{ 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' }
2062
2063##
2064# @MemoryInfo:
2065#
2066# Actual memory information in bytes.
2067#
2068# @base-memory: size of "base" memory specified with command line
2069#               option -m.
2070#
2071# @plugged-memory: size of memory that can be hot-unplugged. This field
2072#                  is omitted if target doesn't support memory hotplug
2073#                  (i.e. CONFIG_MEM_DEVICE not defined at build time).
2074#
2075# Since: 2.11.0
2076##
2077{ 'struct': 'MemoryInfo',
2078  'data'  : { 'base-memory': 'size', '*plugged-memory': 'size' } }
2079
2080##
2081# @query-memory-size-summary:
2082#
2083# Return the amount of initially allocated and present hotpluggable (if
2084# enabled) memory in bytes.
2085#
2086# Example:
2087#
2088# -> { "execute": "query-memory-size-summary" }
2089# <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } }
2090#
2091# Since: 2.11.0
2092##
2093{ 'command': 'query-memory-size-summary', 'returns': 'MemoryInfo' }
2094
2095
2096##
2097# @CpuModelInfo:
2098#
2099# Virtual CPU model.
2100#
2101# A CPU model consists of the name of a CPU definition, to which
2102# delta changes are applied (e.g. features added/removed). Most magic values
2103# that an architecture might require should be hidden behind the name.
2104# However, if required, architectures can expose relevant properties.
2105#
2106# @name: the name of the CPU definition the model is based on
2107# @props: a dictionary of QOM properties to be applied
2108#
2109# Since: 2.8.0
2110##
2111{ 'struct': 'CpuModelInfo',
2112  'data': { 'name': 'str',
2113            '*props': 'any' } }
2114
2115##
2116# @CpuModelExpansionType:
2117#
2118# An enumeration of CPU model expansion types.
2119#
2120# @static: Expand to a static CPU model, a combination of a static base
2121#          model name and property delta changes. As the static base model will
2122#          never change, the expanded CPU model will be the same, independent of
2123#          QEMU version, machine type, machine options, and accelerator options.
2124#          Therefore, the resulting model can be used by tooling without having
2125#          to specify a compatibility machine - e.g. when displaying the "host"
2126#          model. The @static CPU models are migration-safe.
2127
2128# @full: Expand all properties. The produced model is not guaranteed to be
2129#        migration-safe, but allows tooling to get an insight and work with
2130#        model details.
2131#
2132# Note: When a non-migration-safe CPU model is expanded in static mode, some
2133# features enabled by the CPU model may be omitted, because they can't be
2134# implemented by a static CPU model definition (e.g. cache info passthrough and
2135# PMU passthrough in x86). If you need an accurate representation of the
2136# features enabled by a non-migration-safe CPU model, use @full. If you need a
2137# static representation that will keep ABI compatibility even when changing QEMU
2138# version or machine-type, use @static (but keep in mind that some features may
2139# be omitted).
2140#
2141# Since: 2.8.0
2142##
2143{ 'enum': 'CpuModelExpansionType',
2144  'data': [ 'static', 'full' ] }
2145
2146
2147##
2148# @CpuModelCompareResult:
2149#
2150# An enumeration of CPU model comparison results. The result is usually
2151# calculated using e.g. CPU features or CPU generations.
2152#
2153# @incompatible: If model A is incompatible to model B, model A is not
2154#                guaranteed to run where model B runs and the other way around.
2155#
2156# @identical: If model A is identical to model B, model A is guaranteed to run
2157#             where model B runs and the other way around.
2158#
2159# @superset: If model A is a superset of model B, model B is guaranteed to run
2160#            where model A runs. There are no guarantees about the other way.
2161#
2162# @subset: If model A is a subset of model B, model A is guaranteed to run
2163#          where model B runs. There are no guarantees about the other way.
2164#
2165# Since: 2.8.0
2166##
2167{ 'enum': 'CpuModelCompareResult',
2168  'data': [ 'incompatible', 'identical', 'superset', 'subset' ] }
2169
2170##
2171# @AddfdInfo:
2172#
2173# Information about a file descriptor that was added to an fd set.
2174#
2175# @fdset-id: The ID of the fd set that @fd was added to.
2176#
2177# @fd: The file descriptor that was received via SCM rights and
2178#      added to the fd set.
2179#
2180# Since: 1.2.0
2181##
2182{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
2183
2184##
2185# @add-fd:
2186#
2187# Add a file descriptor, that was passed via SCM rights, to an fd set.
2188#
2189# @fdset-id: The ID of the fd set to add the file descriptor to.
2190#
2191# @opaque: A free-form string that can be used to describe the fd.
2192#
2193# Returns: @AddfdInfo on success
2194#
2195#          If file descriptor was not received, FdNotSupplied
2196#
2197#          If @fdset-id is a negative value, InvalidParameterValue
2198#
2199# Notes: The list of fd sets is shared by all monitor connections.
2200#
2201#        If @fdset-id is not specified, a new fd set will be created.
2202#
2203# Since: 1.2.0
2204#
2205# Example:
2206#
2207# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
2208# <- { "return": { "fdset-id": 1, "fd": 3 } }
2209#
2210##
2211{ 'command': 'add-fd',
2212  'data': { '*fdset-id': 'int',
2213            '*opaque': 'str' },
2214  'returns': 'AddfdInfo' }
2215
2216##
2217# @remove-fd:
2218#
2219# Remove a file descriptor from an fd set.
2220#
2221# @fdset-id: The ID of the fd set that the file descriptor belongs to.
2222#
2223# @fd: The file descriptor that is to be removed.
2224#
2225# Returns: Nothing on success
2226#          If @fdset-id or @fd is not found, FdNotFound
2227#
2228# Since: 1.2.0
2229#
2230# Notes: The list of fd sets is shared by all monitor connections.
2231#
2232#        If @fd is not specified, all file descriptors in @fdset-id
2233#        will be removed.
2234#
2235# Example:
2236#
2237# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
2238# <- { "return": {} }
2239#
2240##
2241{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
2242
2243##
2244# @FdsetFdInfo:
2245#
2246# Information about a file descriptor that belongs to an fd set.
2247#
2248# @fd: The file descriptor value.
2249#
2250# @opaque: A free-form string that can be used to describe the fd.
2251#
2252# Since: 1.2.0
2253##
2254{ 'struct': 'FdsetFdInfo',
2255  'data': {'fd': 'int', '*opaque': 'str'} }
2256
2257##
2258# @FdsetInfo:
2259#
2260# Information about an fd set.
2261#
2262# @fdset-id: The ID of the fd set.
2263#
2264# @fds: A list of file descriptors that belong to this fd set.
2265#
2266# Since: 1.2.0
2267##
2268{ 'struct': 'FdsetInfo',
2269  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
2270
2271##
2272# @query-fdsets:
2273#
2274# Return information describing all fd sets.
2275#
2276# Returns: A list of @FdsetInfo
2277#
2278# Since: 1.2.0
2279#
2280# Note: The list of fd sets is shared by all monitor connections.
2281#
2282# Example:
2283#
2284# -> { "execute": "query-fdsets" }
2285# <- { "return": [
2286#        {
2287#          "fds": [
2288#            {
2289#              "fd": 30,
2290#              "opaque": "rdonly:/path/to/file"
2291#            },
2292#            {
2293#              "fd": 24,
2294#              "opaque": "rdwr:/path/to/file"
2295#            }
2296#          ],
2297#          "fdset-id": 1
2298#        },
2299#        {
2300#          "fds": [
2301#            {
2302#              "fd": 28
2303#            },
2304#            {
2305#              "fd": 29
2306#            }
2307#          ],
2308#          "fdset-id": 0
2309#        }
2310#      ]
2311#    }
2312#
2313##
2314{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
2315
2316##
2317# @TargetInfo:
2318#
2319# Information describing the QEMU target.
2320#
2321# @arch: the target architecture
2322#
2323# Since: 1.2.0
2324##
2325{ 'struct': 'TargetInfo',
2326  'data': { 'arch': 'SysEmuTarget' } }
2327
2328##
2329# @query-target:
2330#
2331# Return information about the target for this QEMU
2332#
2333# Returns: TargetInfo
2334#
2335# Since: 1.2.0
2336##
2337{ 'command': 'query-target', 'returns': 'TargetInfo' }
2338
2339##
2340# @AcpiTableOptions:
2341#
2342# Specify an ACPI table on the command line to load.
2343#
2344# At most one of @file and @data can be specified. The list of files specified
2345# by any one of them is loaded and concatenated in order. If both are omitted,
2346# @data is implied.
2347#
2348# Other fields / optargs can be used to override fields of the generic ACPI
2349# table header; refer to the ACPI specification 5.0, section 5.2.6 System
2350# Description Table Header. If a header field is not overridden, then the
2351# corresponding value from the concatenated blob is used (in case of @file), or
2352# it is filled in with a hard-coded value (in case of @data).
2353#
2354# String fields are copied into the matching ACPI member from lowest address
2355# upwards, and silently truncated / NUL-padded to length.
2356#
2357# @sig: table signature / identifier (4 bytes)
2358#
2359# @rev: table revision number (dependent on signature, 1 byte)
2360#
2361# @oem_id: OEM identifier (6 bytes)
2362#
2363# @oem_table_id: OEM table identifier (8 bytes)
2364#
2365# @oem_rev: OEM-supplied revision number (4 bytes)
2366#
2367# @asl_compiler_id: identifier of the utility that created the table
2368#                   (4 bytes)
2369#
2370# @asl_compiler_rev: revision number of the utility that created the
2371#                    table (4 bytes)
2372#
2373# @file: colon (:) separated list of pathnames to load and
2374#        concatenate as table data. The resultant binary blob is expected to
2375#        have an ACPI table header. At least one file is required. This field
2376#        excludes @data.
2377#
2378# @data: colon (:) separated list of pathnames to load and
2379#        concatenate as table data. The resultant binary blob must not have an
2380#        ACPI table header. At least one file is required. This field excludes
2381#        @file.
2382#
2383# Since: 1.5
2384##
2385{ 'struct': 'AcpiTableOptions',
2386  'data': {
2387    '*sig':               'str',
2388    '*rev':               'uint8',
2389    '*oem_id':            'str',
2390    '*oem_table_id':      'str',
2391    '*oem_rev':           'uint32',
2392    '*asl_compiler_id':   'str',
2393    '*asl_compiler_rev':  'uint32',
2394    '*file':              'str',
2395    '*data':              'str' }}
2396
2397##
2398# @CommandLineParameterType:
2399#
2400# Possible types for an option parameter.
2401#
2402# @string: accepts a character string
2403#
2404# @boolean: accepts "on" or "off"
2405#
2406# @number: accepts a number
2407#
2408# @size: accepts a number followed by an optional suffix (K)ilo,
2409#        (M)ega, (G)iga, (T)era
2410#
2411# Since: 1.5
2412##
2413{ 'enum': 'CommandLineParameterType',
2414  'data': ['string', 'boolean', 'number', 'size'] }
2415
2416##
2417# @CommandLineParameterInfo:
2418#
2419# Details about a single parameter of a command line option.
2420#
2421# @name: parameter name
2422#
2423# @type: parameter @CommandLineParameterType
2424#
2425# @help: human readable text string, not suitable for parsing.
2426#
2427# @default: default value string (since 2.1)
2428#
2429# Since: 1.5
2430##
2431{ 'struct': 'CommandLineParameterInfo',
2432  'data': { 'name': 'str',
2433            'type': 'CommandLineParameterType',
2434            '*help': 'str',
2435            '*default': 'str' } }
2436
2437##
2438# @CommandLineOptionInfo:
2439#
2440# Details about a command line option, including its list of parameter details
2441#
2442# @option: option name
2443#
2444# @parameters: an array of @CommandLineParameterInfo
2445#
2446# Since: 1.5
2447##
2448{ 'struct': 'CommandLineOptionInfo',
2449  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
2450
2451##
2452# @query-command-line-options:
2453#
2454# Query command line option schema.
2455#
2456# @option: option name
2457#
2458# Returns: list of @CommandLineOptionInfo for all options (or for the given
2459#          @option).  Returns an error if the given @option doesn't exist.
2460#
2461# Since: 1.5
2462#
2463# Example:
2464#
2465# -> { "execute": "query-command-line-options",
2466#      "arguments": { "option": "option-rom" } }
2467# <- { "return": [
2468#         {
2469#             "parameters": [
2470#                 {
2471#                     "name": "romfile",
2472#                     "type": "string"
2473#                 },
2474#                 {
2475#                     "name": "bootindex",
2476#                     "type": "number"
2477#                 }
2478#             ],
2479#             "option": "option-rom"
2480#         }
2481#      ]
2482#    }
2483#
2484##
2485{'command': 'query-command-line-options',
2486 'data': { '*option': 'str' },
2487 'returns': ['CommandLineOptionInfo'],
2488 'allow-preconfig': true }
2489
2490##
2491# @X86CPURegister32:
2492#
2493# A X86 32-bit register
2494#
2495# Since: 1.5
2496##
2497{ 'enum': 'X86CPURegister32',
2498  'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] }
2499
2500##
2501# @X86CPUFeatureWordInfo:
2502#
2503# Information about a X86 CPU feature word
2504#
2505# @cpuid-input-eax: Input EAX value for CPUID instruction for that feature word
2506#
2507# @cpuid-input-ecx: Input ECX value for CPUID instruction for that
2508#                   feature word
2509#
2510# @cpuid-register: Output register containing the feature bits
2511#
2512# @features: value of output register, containing the feature bits
2513#
2514# Since: 1.5
2515##
2516{ 'struct': 'X86CPUFeatureWordInfo',
2517  'data': { 'cpuid-input-eax': 'int',
2518            '*cpuid-input-ecx': 'int',
2519            'cpuid-register': 'X86CPURegister32',
2520            'features': 'int' } }
2521
2522##
2523# @DummyForceArrays:
2524#
2525# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList internally
2526#
2527# Since: 2.5
2528##
2529{ 'struct': 'DummyForceArrays',
2530  'data': { 'unused': ['X86CPUFeatureWordInfo'] } }
2531
2532
2533##
2534# @NumaOptionsType:
2535#
2536# @node: NUMA nodes configuration
2537#
2538# @dist: NUMA distance configuration (since 2.10)
2539#
2540# @cpu: property based CPU(s) to node mapping (Since: 2.10)
2541#
2542# Since: 2.1
2543##
2544{ 'enum': 'NumaOptionsType',
2545  'data': [ 'node', 'dist', 'cpu' ] }
2546
2547##
2548# @NumaOptions:
2549#
2550# A discriminated record of NUMA options. (for OptsVisitor)
2551#
2552# Since: 2.1
2553##
2554{ 'union': 'NumaOptions',
2555  'base': { 'type': 'NumaOptionsType' },
2556  'discriminator': 'type',
2557  'data': {
2558    'node': 'NumaNodeOptions',
2559    'dist': 'NumaDistOptions',
2560    'cpu': 'NumaCpuOptions' }}
2561
2562##
2563# @NumaNodeOptions:
2564#
2565# Create a guest NUMA node. (for OptsVisitor)
2566#
2567# @nodeid: NUMA node ID (increase by 1 from 0 if omitted)
2568#
2569# @cpus: VCPUs belonging to this node (assign VCPUS round-robin
2570#         if omitted)
2571#
2572# @mem: memory size of this node; mutually exclusive with @memdev.
2573#       Equally divide total memory among nodes if both @mem and @memdev are
2574#       omitted.
2575#
2576# @memdev: memory backend object.  If specified for one node,
2577#          it must be specified for all nodes.
2578#
2579# Since: 2.1
2580##
2581{ 'struct': 'NumaNodeOptions',
2582  'data': {
2583   '*nodeid': 'uint16',
2584   '*cpus':   ['uint16'],
2585   '*mem':    'size',
2586   '*memdev': 'str' }}
2587
2588##
2589# @NumaDistOptions:
2590#
2591# Set the distance between 2 NUMA nodes.
2592#
2593# @src: source NUMA node.
2594#
2595# @dst: destination NUMA node.
2596#
2597# @val: NUMA distance from source node to destination node.
2598#       When a node is unreachable from another node, set the distance
2599#       between them to 255.
2600#
2601# Since: 2.10
2602##
2603{ 'struct': 'NumaDistOptions',
2604  'data': {
2605   'src': 'uint16',
2606   'dst': 'uint16',
2607   'val': 'uint8' }}
2608
2609##
2610# @NumaCpuOptions:
2611#
2612# Option "-numa cpu" overrides default cpu to node mapping.
2613# It accepts the same set of cpu properties as returned by
2614# query-hotpluggable-cpus[].props, where node-id could be used to
2615# override default node mapping.
2616#
2617# Since: 2.10
2618##
2619{ 'struct': 'NumaCpuOptions',
2620   'base': 'CpuInstanceProperties',
2621   'data' : {} }
2622
2623##
2624# @HostMemPolicy:
2625#
2626# Host memory policy types
2627#
2628# @default: restore default policy, remove any nondefault policy
2629#
2630# @preferred: set the preferred host nodes for allocation
2631#
2632# @bind: a strict policy that restricts memory allocation to the
2633#        host nodes specified
2634#
2635# @interleave: memory allocations are interleaved across the set
2636#              of host nodes specified
2637#
2638# Since: 2.1
2639##
2640{ 'enum': 'HostMemPolicy',
2641  'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
2642
2643##
2644# @Memdev:
2645#
2646# Information about memory backend
2647#
2648# @id: backend's ID if backend has 'id' property (since 2.9)
2649#
2650# @size: memory backend size
2651#
2652# @merge: enables or disables memory merge support
2653#
2654# @dump: includes memory backend's memory in a core dump or not
2655#
2656# @prealloc: enables or disables memory preallocation
2657#
2658# @host-nodes: host nodes for its memory policy
2659#
2660# @policy: memory policy of memory backend
2661#
2662# Since: 2.1
2663##
2664{ 'struct': 'Memdev',
2665  'data': {
2666    '*id':        'str',
2667    'size':       'size',
2668    'merge':      'bool',
2669    'dump':       'bool',
2670    'prealloc':   'bool',
2671    'host-nodes': ['uint16'],
2672    'policy':     'HostMemPolicy' }}
2673
2674##
2675# @query-memdev:
2676#
2677# Returns information for all memory backends.
2678#
2679# Returns: a list of @Memdev.
2680#
2681# Since: 2.1
2682#
2683# Example:
2684#
2685# -> { "execute": "query-memdev" }
2686# <- { "return": [
2687#        {
2688#          "id": "mem1",
2689#          "size": 536870912,
2690#          "merge": false,
2691#          "dump": true,
2692#          "prealloc": false,
2693#          "host-nodes": [0, 1],
2694#          "policy": "bind"
2695#        },
2696#        {
2697#          "size": 536870912,
2698#          "merge": false,
2699#          "dump": true,
2700#          "prealloc": true,
2701#          "host-nodes": [2, 3],
2702#          "policy": "preferred"
2703#        }
2704#      ]
2705#    }
2706#
2707##
2708{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }
2709
2710##
2711# @PCDIMMDeviceInfo:
2712#
2713# PCDIMMDevice state information
2714#
2715# @id: device's ID
2716#
2717# @addr: physical address, where device is mapped
2718#
2719# @size: size of memory that the device provides
2720#
2721# @slot: slot number at which device is plugged in
2722#
2723# @node: NUMA node number where device is plugged in
2724#
2725# @memdev: memory backend linked with device
2726#
2727# @hotplugged: true if device was hotplugged
2728#
2729# @hotpluggable: true if device if could be added/removed while machine is running
2730#
2731# Since: 2.1
2732##
2733{ 'struct': 'PCDIMMDeviceInfo',
2734  'data': { '*id': 'str',
2735            'addr': 'int',
2736            'size': 'int',
2737            'slot': 'int',
2738            'node': 'int',
2739            'memdev': 'str',
2740            'hotplugged': 'bool',
2741            'hotpluggable': 'bool'
2742          }
2743}
2744
2745##
2746# @MemoryDeviceInfo:
2747#
2748# Union containing information about a memory device
2749#
2750# Since: 2.1
2751##
2752{ 'union': 'MemoryDeviceInfo',
2753  'data': { 'dimm': 'PCDIMMDeviceInfo',
2754            'nvdimm': 'PCDIMMDeviceInfo'
2755          }
2756}
2757
2758##
2759# @query-memory-devices:
2760#
2761# Lists available memory devices and their state
2762#
2763# Since: 2.1
2764#
2765# Example:
2766#
2767# -> { "execute": "query-memory-devices" }
2768# <- { "return": [ { "data":
2769#                       { "addr": 5368709120,
2770#                         "hotpluggable": true,
2771#                         "hotplugged": true,
2772#                         "id": "d1",
2773#                         "memdev": "/objects/memX",
2774#                         "node": 0,
2775#                         "size": 1073741824,
2776#                         "slot": 0},
2777#                    "type": "dimm"
2778#                  } ] }
2779#
2780##
2781{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }
2782
2783##
2784# @MEM_UNPLUG_ERROR:
2785#
2786# Emitted when memory hot unplug error occurs.
2787#
2788# @device: device name
2789#
2790# @msg: Informative message
2791#
2792# Since: 2.4
2793#
2794# Example:
2795#
2796# <- { "event": "MEM_UNPLUG_ERROR"
2797#      "data": { "device": "dimm1",
2798#                "msg": "acpi: device unplug for unsupported device"
2799#      },
2800#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
2801#
2802##
2803{ 'event': 'MEM_UNPLUG_ERROR',
2804  'data': { 'device': 'str', 'msg': 'str' } }
2805
2806##
2807# @ACPISlotType:
2808#
2809# @DIMM: memory slot
2810# @CPU: logical CPU slot (since 2.7)
2811##
2812{ 'enum': 'ACPISlotType', 'data': [ 'DIMM', 'CPU' ] }
2813
2814##
2815# @ACPIOSTInfo:
2816#
2817# OSPM Status Indication for a device
2818# For description of possible values of @source and @status fields
2819# see "_OST (OSPM Status Indication)" chapter of ACPI5.0 spec.
2820#
2821# @device: device ID associated with slot
2822#
2823# @slot: slot ID, unique per slot of a given @slot-type
2824#
2825# @slot-type: type of the slot
2826#
2827# @source: an integer containing the source event
2828#
2829# @status: an integer containing the status code
2830#
2831# Since: 2.1
2832##
2833{ 'struct': 'ACPIOSTInfo',
2834  'data'  : { '*device': 'str',
2835              'slot': 'str',
2836              'slot-type': 'ACPISlotType',
2837              'source': 'int',
2838              'status': 'int' } }
2839
2840##
2841# @query-acpi-ospm-status:
2842#
2843# Return a list of ACPIOSTInfo for devices that support status
2844# reporting via ACPI _OST method.
2845#
2846# Since: 2.1
2847#
2848# Example:
2849#
2850# -> { "execute": "query-acpi-ospm-status" }
2851# <- { "return": [ { "device": "d1", "slot": "0", "slot-type": "DIMM", "source": 1, "status": 0},
2852#                  { "slot": "1", "slot-type": "DIMM", "source": 0, "status": 0},
2853#                  { "slot": "2", "slot-type": "DIMM", "source": 0, "status": 0},
2854#                  { "slot": "3", "slot-type": "DIMM", "source": 0, "status": 0}
2855#    ]}
2856#
2857##
2858{ 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }
2859
2860##
2861# @ACPI_DEVICE_OST:
2862#
2863# Emitted when guest executes ACPI _OST method.
2864#
2865# @info: OSPM Status Indication
2866#
2867# Since: 2.1
2868#
2869# Example:
2870#
2871# <- { "event": "ACPI_DEVICE_OST",
2872#      "data": { "device": "d1", "slot": "0",
2873#                "slot-type": "DIMM", "source": 1, "status": 0 } }
2874#
2875##
2876{ 'event': 'ACPI_DEVICE_OST',
2877     'data': { 'info': 'ACPIOSTInfo' } }
2878
2879##
2880# @ReplayMode:
2881#
2882# Mode of the replay subsystem.
2883#
2884# @none: normal execution mode. Replay or record are not enabled.
2885#
2886# @record: record mode. All non-deterministic data is written into the
2887#          replay log.
2888#
2889# @play: replay mode. Non-deterministic data required for system execution
2890#        is read from the log.
2891#
2892# Since: 2.5
2893##
2894{ 'enum': 'ReplayMode',
2895  'data': [ 'none', 'record', 'play' ] }
2896
2897##
2898# @xen-load-devices-state:
2899#
2900# Load the state of all devices from file. The RAM and the block devices
2901# of the VM are not loaded by this command.
2902#
2903# @filename: the file to load the state of the devices from as binary
2904# data. See xen-save-devices-state.txt for a description of the binary
2905# format.
2906#
2907# Since: 2.7
2908#
2909# Example:
2910#
2911# -> { "execute": "xen-load-devices-state",
2912#      "arguments": { "filename": "/tmp/resume" } }
2913# <- { "return": {} }
2914#
2915##
2916{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
2917
2918##
2919# @CpuInstanceProperties:
2920#
2921# List of properties to be used for hotplugging a CPU instance,
2922# it should be passed by management with device_add command when
2923# a CPU is being hotplugged.
2924#
2925# @node-id: NUMA node ID the CPU belongs to
2926# @socket-id: socket number within node/board the CPU belongs to
2927# @core-id: core number within socket the CPU belongs to
2928# @thread-id: thread number within core the CPU belongs to
2929#
2930# Note: currently there are 4 properties that could be present
2931# but management should be prepared to pass through other
2932# properties with device_add command to allow for future
2933# interface extension. This also requires the filed names to be kept in
2934# sync with the properties passed to -device/device_add.
2935#
2936# Since: 2.7
2937##
2938{ 'struct': 'CpuInstanceProperties',
2939  'data': { '*node-id': 'int',
2940            '*socket-id': 'int',
2941            '*core-id': 'int',
2942            '*thread-id': 'int'
2943  }
2944}
2945
2946##
2947# @HotpluggableCPU:
2948#
2949# @type: CPU object type for usage with device_add command
2950# @props: list of properties to be used for hotplugging CPU
2951# @vcpus-count: number of logical VCPU threads @HotpluggableCPU provides
2952# @qom-path: link to existing CPU object if CPU is present or
2953#            omitted if CPU is not present.
2954#
2955# Since: 2.7
2956##
2957{ 'struct': 'HotpluggableCPU',
2958  'data': { 'type': 'str',
2959            'vcpus-count': 'int',
2960            'props': 'CpuInstanceProperties',
2961            '*qom-path': 'str'
2962          }
2963}
2964
2965##
2966# @query-hotpluggable-cpus:
2967#
2968# TODO: Better documentation; currently there is none.
2969#
2970# Returns: a list of HotpluggableCPU objects.
2971#
2972# Since: 2.7
2973#
2974# Example:
2975#
2976# For pseries machine type started with -smp 2,cores=2,maxcpus=4 -cpu POWER8:
2977#
2978# -> { "execute": "query-hotpluggable-cpus" }
2979# <- {"return": [
2980#      { "props": { "core": 8 }, "type": "POWER8-spapr-cpu-core",
2981#        "vcpus-count": 1 },
2982#      { "props": { "core": 0 }, "type": "POWER8-spapr-cpu-core",
2983#        "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
2984#    ]}'
2985#
2986# For pc machine type started with -smp 1,maxcpus=2:
2987#
2988# -> { "execute": "query-hotpluggable-cpus" }
2989# <- {"return": [
2990#      {
2991#         "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
2992#         "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
2993#      },
2994#      {
2995#         "qom-path": "/machine/unattached/device[0]",
2996#         "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
2997#         "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
2998#      }
2999#    ]}
3000#
3001# For s390x-virtio-ccw machine type started with -smp 1,maxcpus=2 -cpu qemu
3002# (Since: 2.11):
3003#
3004# -> { "execute": "query-hotpluggable-cpus" }
3005# <- {"return": [
3006#      {
3007#         "type": "qemu-s390x-cpu", "vcpus-count": 1,
3008#         "props": { "core-id": 1 }
3009#      },
3010#      {
3011#         "qom-path": "/machine/unattached/device[0]",
3012#         "type": "qemu-s390x-cpu", "vcpus-count": 1,
3013#         "props": { "core-id": 0 }
3014#      }
3015#    ]}
3016#
3017##
3018{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'],
3019             'allow-preconfig': true }
3020
3021##
3022# @GuidInfo:
3023#
3024# GUID information.
3025#
3026# @guid: the globally unique identifier
3027#
3028# Since: 2.9
3029##
3030{ 'struct': 'GuidInfo', 'data': {'guid': 'str'} }
3031
3032##
3033# @query-vm-generation-id:
3034#
3035# Show Virtual Machine Generation ID
3036#
3037# Since: 2.9
3038##
3039{ 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' }
3040
3041##
3042# @set-numa-node:
3043#
3044# Runtime equivalent of '-numa' CLI option, available at
3045# preconfigure stage to configure numa mapping before initializing
3046# machine.
3047#
3048# Since 3.0
3049##
3050{ 'command': 'set-numa-node', 'boxed': true,
3051  'data': 'NumaOptions',
3052  'allow-preconfig': true
3053}
3054