]> git.proxmox.com Git - mirror_qemu.git/blame - qapi/misc.json
audio: fix audio timer rate conversion bug
[mirror_qemu.git] / qapi / misc.json
CommitLineData
112ed241
MA
1# -*- Mode: Python -*-
2#
3
4##
5# = Miscellanea
6##
7
b47aa7b3
LE
8{ 'include': 'common.json' }
9
112ed241
MA
10##
11# @qmp_capabilities:
12#
13# Enable QMP capabilities.
14#
02130314
PX
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)
112ed241
MA
22#
23# Example:
24#
02130314
PX
25# -> { "execute": "qmp_capabilities",
26# "arguments": { "enable": [ "oob" ] } }
112ed241
MA
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#
02130314
PX
33# The QMP client needs to explicitly enable QMP capabilities, otherwise
34# all the QMP capabilities will be turned off by default.
35#
112ed241
MA
36# Since: 0.13
37#
38##
02130314 39{ 'command': 'qmp_capabilities',
d6fe3d02
IM
40 'data': { '*enable': [ 'QMPCapability' ] },
41 'allow-preconfig': true }
02130314
PX
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#
c0698212 49# @oob: QMP ability to support out-of-band requests.
02130314
PX
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' ] }
112ed241
MA
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##
a87706c8
IM
120{ 'command': 'query-version', 'returns': 'VersionInfo',
121 'allow-preconfig': true }
112ed241
MA
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##
d6fe3d02
IM
160{ 'command': 'query-commands', 'returns': ['CommandInfo'],
161 'allow-preconfig': true }
112ed241
MA
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##
a87706c8 245{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
112ed241
MA
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##
a87706c8 305{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true }
112ed241
MA
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#
9d7b7086 321# Return information on QMP events.
112ed241 322#
9d7b7086 323# Returns: A list of @EventInfo.
112ed241
MA
324#
325# Since: 1.2.0
326#
9d7b7086
MA
327# Note: This command is deprecated, because its output doesn't reflect
328# compile-time configuration. Use query-qmp-schema instead.
329#
112ed241
MA
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#
25fa194b
MC
357# @riscv: since 2.12
358#
112ed241
MA
359# Since: 2.6
360##
361{ 'enum': 'CpuInfoArch',
25fa194b 362 'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 's390', 'riscv', 'other' ] }
112ed241
MA
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',
29cd0403 402 'riscv': 'CpuInfoRISCV' } }
112ed241
MA
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
25fa194b
MC
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
112ed241
MA
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#
51f63ec7 556# @arch: base architecture of the cpu; deprecated since 3.0.0 in favor
6ffa3ab4 557# of @target
daa9d2bc 558#
6ffa3ab4 559# @target: the QEMU system emulation target, which determines which
51f63ec7 560# additional fields will be listed (since 3.0)
112ed241
MA
561#
562# Since: 2.12
563#
564##
daa9d2bc
LE
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',
29cd0403 573 'data' : { 's390x' : 'CpuInfoS390' } }
112ed241
MA
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",
daa9d2bc 599# "target":"x86_64",
112ed241
MA
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",
daa9d2bc 611# "target":"x86_64",
112ed241
MA
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##
a87706c8
IM
675{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
676 'allow-preconfig': true }
112ed241
MA
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#
5383a705
DL
838# @subsystem: the PCI subsystem id (since 3.1)
839#
840# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
841#
112ed241
MA
842# Since: 2.4
843##
844{ 'struct': 'PciDeviceId',
18613dc6
DL
845 'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
846 '*subsystem-vendor': 'int'} }
112ed241
MA
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#
3800db78 1115# Adds CPU with specified ID.
112ed241
MA
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#
3800db78
KC
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#
112ed241
MA
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
047f7038 1219##
361ac948 1220# @x-exit-preconfig:
047f7038
IM
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#
361ac948 1236# -> { "execute": "x-exit-preconfig" }
047f7038
IM
1237# <- { "return": {} }
1238#
1239##
361ac948 1240{ 'command': 'x-exit-preconfig', 'allow-preconfig': true }
047f7038 1241
112ed241
MA
1242##
1243# @system_wakeup:
1244#
fb064112
DHB
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.
112ed241
MA
1249#
1250# Since: 1.1
1251#
1252# Returns: nothing.
1253#
fb064112
DHB
1254# Note: prior to 4.0, this command does nothing in case the guest
1255# isn't suspended.
1256#
112ed241
MA
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#
35f63767
AK
1366# @description: if specified, the description of the property.
1367#
112ed241
MA
1368# Since: 1.2
1369##
1370{ 'struct': 'ObjectPropertyInfo',
35f63767 1371 'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
112ed241
MA
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
dd49d9d8
WSM
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#
112ed241
MA
1396##
1397{ 'command': 'qom-list',
1398 'data': { 'path': 'str' },
a87706c8
IM
1399 'returns': [ 'ObjectPropertyInfo' ],
1400 'allow-preconfig': true }
112ed241
MA
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
dd49d9d8
WSM
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#
112ed241
MA
1450##
1451{ 'command': 'qom-get',
1452 'data': { 'path': 'str', 'property': 'str' },
a87706c8
IM
1453 'returns': 'any',
1454 'allow-preconfig': true }
112ed241
MA
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
dd49d9d8
WSM
1469#
1470# Example:
1471#
1472# -> { "execute": "qom-set",
1473# "arguments": { "path": "/machine",
1474# "property": "graphics",
1475# "value": false } }
1476# <- { "return": {} }
1477#
112ed241
MA
1478##
1479{ 'command': 'qom-set',
a87706c8
IM
1480 'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
1481 'allow-preconfig': true }
112ed241
MA
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' },
a87706c8
IM
1563 'returns': [ 'ObjectTypeInfo' ],
1564 'allow-preconfig': true }
112ed241 1565
112ed241
MA
1566##
1567# @device-list-properties:
1568#
1569# List properties associated with a device.
1570#
1571# @typename: the type name of a device
1572#
35f63767 1573# Returns: a list of ObjectPropertyInfo describing a devices properties
112ed241 1574#
24ed1172
AK
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#
112ed241
MA
1579# Since: 1.2
1580##
1581{ 'command': 'device-list-properties',
1582 'data': { 'typename': 'str'},
35f63767 1583 'returns': [ 'ObjectPropertyInfo' ] }
112ed241 1584
961c47bb
AK
1585##
1586# @qom-list-properties:
1587#
1588# List properties associated with a QOM object.
1589#
1590# @typename: the type name of an object
1591#
24ed1172
AK
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#
961c47bb
AK
1596# Returns: a list of ObjectPropertyInfo describing object properties
1597#
1598# Since: 2.12
1599##
1600{ 'command': 'qom-list-properties',
1601 'data': { 'typename': 'str'},
a87706c8
IM
1602 'returns': [ 'ObjectPropertyInfo' ],
1603 'allow-preconfig': true }
961c47bb 1604
112ed241
MA
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#
2da91b54
VP
1734# @win-dmp: Windows full crashdump format,
1735# can be used instead of ELF converting (since 2.13)
1736#
112ed241
MA
1737# Since: 2.0
1738##
1739{ 'enum': 'DumpGuestMemoryFormat',
2da91b54 1740 'data': [ 'elf', 'kdump-zlib', 'kdump-lzo', 'kdump-snappy', 'win-dmp' ] }
112ed241
MA
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#
eb815e24 1864# @result: final dump status
112ed241
MA
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
112ed241
MA
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
46ea94ca
DHB
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
112ed241
MA
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
15cea5ae 2073# (i.e. CONFIG_MEM_DEVICE not defined at build time).
112ed241
MA
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
112ed241
MA
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
22801817
KC
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
112ed241
MA
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
112ed241
MA
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
112ed241
MA
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##
b0ddeba2
MAL
2211{ 'command': 'add-fd',
2212 'data': { '*fdset-id': 'int',
2213 '*opaque': 'str' },
112ed241
MA
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#
b47aa7b3 2321# @arch: the target architecture
112ed241
MA
2322#
2323# Since: 1.2.0
2324##
2325{ 'struct': 'TargetInfo',
b47aa7b3 2326 'data': { 'arch': 'SysEmuTarget' } }
112ed241
MA
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##
b0ddeba2
MAL
2485{'command': 'query-command-line-options',
2486 'data': { '*option': 'str' },
d6fe3d02
IM
2487 'returns': ['CommandLineOptionInfo'],
2488 'allow-preconfig': true }
112ed241
MA
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##
a87706c8 2708{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }
112ed241
MA
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##
6388e18d
HZ
2752{ 'union': 'MemoryDeviceInfo',
2753 'data': { 'dimm': 'PCDIMMDeviceInfo',
2754 'nvdimm': 'PCDIMMDeviceInfo'
2755 }
2756}
112ed241
MA
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#
eb815e24 2865# @info: OSPM Status Indication
112ed241
MA
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
112ed241
MA
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
112ed241
MA
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#
3800db78
KC
2968# TODO: Better documentation; currently there is none.
2969#
112ed241
MA
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##
899eaab4
IM
3018{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'],
3019 'allow-preconfig': true }
112ed241
MA
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' }
08a161fd 3040
f3be6781
IM
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}