xref: /openbmc/qemu/qapi/misc.json (revision 71f364b7)
1# -*- Mode: Python -*-
2# vim: filetype=python
3#
4
5##
6# = Miscellanea
7##
8
9{ 'include': 'common.json' }
10
11##
12# @add_client:
13#
14# Allow client connections for VNC, Spice and socket based
15# character devices to be passed in to QEMU via SCM_RIGHTS.
16#
17# @protocol: protocol name. Valid names are "vnc", "spice" or the
18#            name of a character device (eg. from -chardev id=XXXX)
19#
20# @fdname: file descriptor name previously passed via 'getfd' command
21#
22# @skipauth: whether to skip authentication. Only applies
23#            to "vnc" and "spice" protocols
24#
25# @tls: whether to perform TLS. Only applies to the "spice"
26#       protocol
27#
28# Returns: nothing on success.
29#
30# Since: 0.14.0
31#
32# Example:
33#
34# -> { "execute": "add_client", "arguments": { "protocol": "vnc",
35#                                              "fdname": "myclient" } }
36# <- { "return": {} }
37#
38##
39{ 'command': 'add_client',
40  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
41            '*tls': 'bool' } }
42
43##
44# @NameInfo:
45#
46# Guest name information.
47#
48# @name: The name of the guest
49#
50# Since: 0.14.0
51##
52{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }
53
54##
55# @query-name:
56#
57# Return the name information of a guest.
58#
59# Returns: @NameInfo of the guest
60#
61# Since: 0.14.0
62#
63# Example:
64#
65# -> { "execute": "query-name" }
66# <- { "return": { "name": "qemu-name" } }
67#
68##
69{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
70
71##
72# @KvmInfo:
73#
74# Information about support for KVM acceleration
75#
76# @enabled: true if KVM acceleration is active
77#
78# @present: true if KVM acceleration is built into this executable
79#
80# Since: 0.14.0
81##
82{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
83
84##
85# @query-kvm:
86#
87# Returns information about KVM acceleration
88#
89# Returns: @KvmInfo
90#
91# Since: 0.14.0
92#
93# Example:
94#
95# -> { "execute": "query-kvm" }
96# <- { "return": { "enabled": true, "present": true } }
97#
98##
99{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
100
101##
102# @IOThreadInfo:
103#
104# Information about an iothread
105#
106# @id: the identifier of the iothread
107#
108# @thread-id: ID of the underlying host thread
109#
110# @poll-max-ns: maximum polling time in ns, 0 means polling is disabled
111#               (since 2.9)
112#
113# @poll-grow: how many ns will be added to polling time, 0 means that it's not
114#             configured (since 2.9)
115#
116# @poll-shrink: how many ns will be removed from polling time, 0 means that
117#               it's not configured (since 2.9)
118#
119# Since: 2.0
120##
121{ 'struct': 'IOThreadInfo',
122  'data': {'id': 'str',
123           'thread-id': 'int',
124           'poll-max-ns': 'int',
125           'poll-grow': 'int',
126           'poll-shrink': 'int' } }
127
128##
129# @query-iothreads:
130#
131# Returns a list of information about each iothread.
132#
133# Note: this list excludes the QEMU main loop thread, which is not declared
134#       using the -object iothread command-line option.  It is always the main thread
135#       of the process.
136#
137# Returns: a list of @IOThreadInfo for each iothread
138#
139# Since: 2.0
140#
141# Example:
142#
143# -> { "execute": "query-iothreads" }
144# <- { "return": [
145#          {
146#             "id":"iothread0",
147#             "thread-id":3134
148#          },
149#          {
150#             "id":"iothread1",
151#             "thread-id":3135
152#          }
153#       ]
154#    }
155#
156##
157{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
158  'allow-preconfig': true }
159
160##
161# @stop:
162#
163# Stop all guest VCPU execution.
164#
165# Since:  0.14.0
166#
167# Notes: This function will succeed even if the guest is already in the stopped
168#        state.  In "inmigrate" state, it will ensure that the guest
169#        remains paused once migration finishes, as if the -S option was
170#        passed on the command line.
171#
172# Example:
173#
174# -> { "execute": "stop" }
175# <- { "return": {} }
176#
177##
178{ 'command': 'stop' }
179
180##
181# @system_reset:
182#
183# Performs a hard reset of a guest.
184#
185# Since: 0.14.0
186#
187# Example:
188#
189# -> { "execute": "system_reset" }
190# <- { "return": {} }
191#
192##
193{ 'command': 'system_reset' }
194
195##
196# @system_powerdown:
197#
198# Requests that a guest perform a powerdown operation.
199#
200# Since: 0.14.0
201#
202# Notes: A guest may or may not respond to this command.  This command
203#        returning does not indicate that a guest has accepted the request or
204#        that it has shut down.  Many guests will respond to this command by
205#        prompting the user in some way.
206# Example:
207#
208# -> { "execute": "system_powerdown" }
209# <- { "return": {} }
210#
211##
212{ 'command': 'system_powerdown' }
213
214##
215# @memsave:
216#
217# Save a portion of guest memory to a file.
218#
219# @val: the virtual address of the guest to start from
220#
221# @size: the size of memory region to save
222#
223# @filename: the file to save the memory to as binary data
224#
225# @cpu-index: the index of the virtual CPU to use for translating the
226#             virtual address (defaults to CPU 0)
227#
228# Returns: Nothing on success
229#
230# Since: 0.14.0
231#
232# Notes: Errors were not reliably returned until 1.1
233#
234# Example:
235#
236# -> { "execute": "memsave",
237#      "arguments": { "val": 10,
238#                     "size": 100,
239#                     "filename": "/tmp/virtual-mem-dump" } }
240# <- { "return": {} }
241#
242##
243{ 'command': 'memsave',
244  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
245
246##
247# @pmemsave:
248#
249# Save a portion of guest physical memory to a file.
250#
251# @val: the physical address of the guest to start from
252#
253# @size: the size of memory region to save
254#
255# @filename: the file to save the memory to as binary data
256#
257# Returns: Nothing on success
258#
259# Since: 0.14.0
260#
261# Notes: Errors were not reliably returned until 1.1
262#
263# Example:
264#
265# -> { "execute": "pmemsave",
266#      "arguments": { "val": 10,
267#                     "size": 100,
268#                     "filename": "/tmp/physical-mem-dump" } }
269# <- { "return": {} }
270#
271##
272{ 'command': 'pmemsave',
273  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
274
275##
276# @cont:
277#
278# Resume guest VCPU execution.
279#
280# Since:  0.14.0
281#
282# Returns:  If successful, nothing
283#
284# Notes: This command will succeed if the guest is currently running.  It
285#        will also succeed if the guest is in the "inmigrate" state; in
286#        this case, the effect of the command is to make sure the guest
287#        starts once migration finishes, removing the effect of the -S
288#        command line option if it was passed.
289#
290# Example:
291#
292# -> { "execute": "cont" }
293# <- { "return": {} }
294#
295##
296{ 'command': 'cont' }
297
298##
299# @x-exit-preconfig:
300#
301# Exit from "preconfig" state
302#
303# This command makes QEMU exit the preconfig state and proceed with
304# VM initialization using configuration data provided on the command line
305# and via the QMP monitor during the preconfig state. The command is only
306# available during the preconfig state (i.e. when the --preconfig command
307# line option was in use).
308#
309# Since 3.0
310#
311# Returns: nothing
312#
313# Example:
314#
315# -> { "execute": "x-exit-preconfig" }
316# <- { "return": {} }
317#
318##
319{ 'command': 'x-exit-preconfig', 'allow-preconfig': true }
320
321##
322# @system_wakeup:
323#
324# Wake up guest from suspend. If the guest has wake-up from suspend
325# support enabled (wakeup-suspend-support flag from
326# query-current-machine), wake-up guest from suspend if the guest is
327# in SUSPENDED state. Return an error otherwise.
328#
329# Since:  1.1
330#
331# Returns:  nothing.
332#
333# Note: prior to 4.0, this command does nothing in case the guest
334#       isn't suspended.
335#
336# Example:
337#
338# -> { "execute": "system_wakeup" }
339# <- { "return": {} }
340#
341##
342{ 'command': 'system_wakeup' }
343
344##
345# @inject-nmi:
346#
347# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or all CPUs (ppc64).
348# The command fails when the guest doesn't support injecting.
349#
350# Returns:  If successful, nothing
351#
352# Since:  0.14.0
353#
354# Note: prior to 2.1, this command was only supported for x86 and s390 VMs
355#
356# Example:
357#
358# -> { "execute": "inject-nmi" }
359# <- { "return": {} }
360#
361##
362{ 'command': 'inject-nmi' }
363
364##
365# @human-monitor-command:
366#
367# Execute a command on the human monitor and return the output.
368#
369# @command-line: the command to execute in the human monitor
370#
371# @cpu-index: The CPU to use for commands that require an implicit CPU
372#
373# Features:
374# @savevm-monitor-nodes: If present, HMP command savevm only snapshots
375#                        monitor-owned nodes if they have no parents.
376#                        This allows the use of 'savevm' with
377#                        -blockdev. (since 4.2)
378#
379# Returns: the output of the command as a string
380#
381# Since: 0.14.0
382#
383# Notes: This command only exists as a stop-gap.  Its use is highly
384#        discouraged.  The semantics of this command are not
385#        guaranteed: this means that command names, arguments and
386#        responses can change or be removed at ANY time.  Applications
387#        that rely on long term stability guarantees should NOT
388#        use this command.
389#
390#        Known limitations:
391#
392#        * This command is stateless, this means that commands that depend
393#          on state information (such as getfd) might not work
394#
395#        * Commands that prompt the user for data don't currently work
396#
397# Example:
398#
399# -> { "execute": "human-monitor-command",
400#      "arguments": { "command-line": "info kvm" } }
401# <- { "return": "kvm support: enabled\r\n" }
402#
403##
404{ 'command': 'human-monitor-command',
405  'data': {'command-line': 'str', '*cpu-index': 'int'},
406  'returns': 'str',
407  'features': [ 'savevm-monitor-nodes' ] }
408
409##
410# @change:
411#
412# This command is multiple commands multiplexed together.
413#
414# @device: This is normally the name of a block device but it may also be 'vnc'.
415#          when it's 'vnc', then sub command depends on @target
416#
417# @target: If @device is a block device, then this is the new filename.
418#          If @device is 'vnc', then if the value 'password' selects the vnc
419#          change password command.   Otherwise, this specifies a new server URI
420#          address to listen to for VNC connections.
421#
422# @arg: If @device is a block device, then this is an optional format to open
423#       the device with.
424#       If @device is 'vnc' and @target is 'password', this is the new VNC
425#       password to set.  See change-vnc-password for additional notes.
426#
427# Features:
428# @deprecated: This command is deprecated.  For changing block
429#              devices, use 'blockdev-change-medium' instead; for changing VNC
430#              parameters, use 'change-vnc-password' instead.
431#
432# Returns: - Nothing on success.
433#          - If @device is not a valid block device, DeviceNotFound
434#
435# Since: 0.14.0
436#
437# Example:
438#
439# 1. Change a removable medium
440#
441# -> { "execute": "change",
442#      "arguments": { "device": "ide1-cd0",
443#                     "target": "/srv/images/Fedora-12-x86_64-DVD.iso" } }
444# <- { "return": {} }
445#
446# 2. Change VNC password
447#
448# -> { "execute": "change",
449#      "arguments": { "device": "vnc", "target": "password",
450#                     "arg": "foobar1" } }
451# <- { "return": {} }
452#
453##
454{ 'command': 'change',
455  'data': {'device': 'str', 'target': 'str', '*arg': 'str'},
456  'features': [ 'deprecated' ] }
457
458##
459# @xen-set-global-dirty-log:
460#
461# Enable or disable the global dirty log mode.
462#
463# @enable: true to enable, false to disable.
464#
465# Returns: nothing
466#
467# Since: 1.3
468#
469# Example:
470#
471# -> { "execute": "xen-set-global-dirty-log",
472#      "arguments": { "enable": true } }
473# <- { "return": {} }
474#
475##
476{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
477
478##
479# @getfd:
480#
481# Receive a file descriptor via SCM rights and assign it a name
482#
483# @fdname: file descriptor name
484#
485# Returns: Nothing on success
486#
487# Since: 0.14.0
488#
489# Notes: If @fdname already exists, the file descriptor assigned to
490#        it will be closed and replaced by the received file
491#        descriptor.
492#
493#        The 'closefd' command can be used to explicitly close the
494#        file descriptor when it is no longer needed.
495#
496# Example:
497#
498# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
499# <- { "return": {} }
500#
501##
502{ 'command': 'getfd', 'data': {'fdname': 'str'} }
503
504##
505# @closefd:
506#
507# Close a file descriptor previously passed via SCM rights
508#
509# @fdname: file descriptor name
510#
511# Returns: Nothing on success
512#
513# Since: 0.14.0
514#
515# Example:
516#
517# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
518# <- { "return": {} }
519#
520##
521{ 'command': 'closefd', 'data': {'fdname': 'str'} }
522
523##
524# @AddfdInfo:
525#
526# Information about a file descriptor that was added to an fd set.
527#
528# @fdset-id: The ID of the fd set that @fd was added to.
529#
530# @fd: The file descriptor that was received via SCM rights and
531#      added to the fd set.
532#
533# Since: 1.2.0
534##
535{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
536
537##
538# @add-fd:
539#
540# Add a file descriptor, that was passed via SCM rights, to an fd set.
541#
542# @fdset-id: The ID of the fd set to add the file descriptor to.
543#
544# @opaque: A free-form string that can be used to describe the fd.
545#
546# Returns: - @AddfdInfo on success
547#          - If file descriptor was not received, FdNotSupplied
548#          - If @fdset-id is a negative value, InvalidParameterValue
549#
550# Notes: The list of fd sets is shared by all monitor connections.
551#
552#        If @fdset-id is not specified, a new fd set will be created.
553#
554# Since: 1.2.0
555#
556# Example:
557#
558# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
559# <- { "return": { "fdset-id": 1, "fd": 3 } }
560#
561##
562{ 'command': 'add-fd',
563  'data': { '*fdset-id': 'int',
564            '*opaque': 'str' },
565  'returns': 'AddfdInfo' }
566
567##
568# @remove-fd:
569#
570# Remove a file descriptor from an fd set.
571#
572# @fdset-id: The ID of the fd set that the file descriptor belongs to.
573#
574# @fd: The file descriptor that is to be removed.
575#
576# Returns: - Nothing on success
577#          - If @fdset-id or @fd is not found, FdNotFound
578#
579# Since: 1.2.0
580#
581# Notes: The list of fd sets is shared by all monitor connections.
582#
583#        If @fd is not specified, all file descriptors in @fdset-id
584#        will be removed.
585#
586# Example:
587#
588# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
589# <- { "return": {} }
590#
591##
592{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
593
594##
595# @FdsetFdInfo:
596#
597# Information about a file descriptor that belongs to an fd set.
598#
599# @fd: The file descriptor value.
600#
601# @opaque: A free-form string that can be used to describe the fd.
602#
603# Since: 1.2.0
604##
605{ 'struct': 'FdsetFdInfo',
606  'data': {'fd': 'int', '*opaque': 'str'} }
607
608##
609# @FdsetInfo:
610#
611# Information about an fd set.
612#
613# @fdset-id: The ID of the fd set.
614#
615# @fds: A list of file descriptors that belong to this fd set.
616#
617# Since: 1.2.0
618##
619{ 'struct': 'FdsetInfo',
620  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
621
622##
623# @query-fdsets:
624#
625# Return information describing all fd sets.
626#
627# Returns: A list of @FdsetInfo
628#
629# Since: 1.2.0
630#
631# Note: The list of fd sets is shared by all monitor connections.
632#
633# Example:
634#
635# -> { "execute": "query-fdsets" }
636# <- { "return": [
637#        {
638#          "fds": [
639#            {
640#              "fd": 30,
641#              "opaque": "rdonly:/path/to/file"
642#            },
643#            {
644#              "fd": 24,
645#              "opaque": "rdwr:/path/to/file"
646#            }
647#          ],
648#          "fdset-id": 1
649#        },
650#        {
651#          "fds": [
652#            {
653#              "fd": 28
654#            },
655#            {
656#              "fd": 29
657#            }
658#          ],
659#          "fdset-id": 0
660#        }
661#      ]
662#    }
663#
664##
665{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
666
667##
668# @CommandLineParameterType:
669#
670# Possible types for an option parameter.
671#
672# @string: accepts a character string
673#
674# @boolean: accepts "on" or "off"
675#
676# @number: accepts a number
677#
678# @size: accepts a number followed by an optional suffix (K)ilo,
679#        (M)ega, (G)iga, (T)era
680#
681# Since: 1.5
682##
683{ 'enum': 'CommandLineParameterType',
684  'data': ['string', 'boolean', 'number', 'size'] }
685
686##
687# @CommandLineParameterInfo:
688#
689# Details about a single parameter of a command line option.
690#
691# @name: parameter name
692#
693# @type: parameter @CommandLineParameterType
694#
695# @help: human readable text string, not suitable for parsing.
696#
697# @default: default value string (since 2.1)
698#
699# Since: 1.5
700##
701{ 'struct': 'CommandLineParameterInfo',
702  'data': { 'name': 'str',
703            'type': 'CommandLineParameterType',
704            '*help': 'str',
705            '*default': 'str' } }
706
707##
708# @CommandLineOptionInfo:
709#
710# Details about a command line option, including its list of parameter details
711#
712# @option: option name
713#
714# @parameters: an array of @CommandLineParameterInfo
715#
716# Since: 1.5
717##
718{ 'struct': 'CommandLineOptionInfo',
719  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
720
721##
722# @query-command-line-options:
723#
724# Query command line option schema.
725#
726# @option: option name
727#
728# Returns: list of @CommandLineOptionInfo for all options (or for the given
729#          @option).  Returns an error if the given @option doesn't exist.
730#
731# Since: 1.5
732#
733# Example:
734#
735# -> { "execute": "query-command-line-options",
736#      "arguments": { "option": "option-rom" } }
737# <- { "return": [
738#         {
739#             "parameters": [
740#                 {
741#                     "name": "romfile",
742#                     "type": "string"
743#                 },
744#                 {
745#                     "name": "bootindex",
746#                     "type": "number"
747#                 }
748#             ],
749#             "option": "option-rom"
750#         }
751#      ]
752#    }
753#
754##
755{'command': 'query-command-line-options',
756 'data': { '*option': 'str' },
757 'returns': ['CommandLineOptionInfo'],
758 'allow-preconfig': true }
759
760##
761# @ReplayMode:
762#
763# Mode of the replay subsystem.
764#
765# @none: normal execution mode. Replay or record are not enabled.
766#
767# @record: record mode. All non-deterministic data is written into the
768#          replay log.
769#
770# @play: replay mode. Non-deterministic data required for system execution
771#        is read from the log.
772#
773# Since: 2.5
774##
775{ 'enum': 'ReplayMode',
776  'data': [ 'none', 'record', 'play' ] }
777
778##
779# @xen-load-devices-state:
780#
781# Load the state of all devices from file. The RAM and the block devices
782# of the VM are not loaded by this command.
783#
784# @filename: the file to load the state of the devices from as binary
785#            data. See xen-save-devices-state.txt for a description of the binary
786#            format.
787#
788# Since: 2.7
789#
790# Example:
791#
792# -> { "execute": "xen-load-devices-state",
793#      "arguments": { "filename": "/tmp/resume" } }
794# <- { "return": {} }
795#
796##
797{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
798