]> git.proxmox.com Git - mirror_qemu.git/blob - qapi/misc.json
dirty-bitmap: Expose persistent flag to 'query-block'
[mirror_qemu.git] / qapi / misc.json
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 }