# -*- Mode: Python -*-
# vim: filetype=python
#

##
# ***********
# Miscellanea
# ***********
##

{ 'include': 'common.json' }

##
# @add_client:
#
# Allow client connections for VNC, Spice and socket based character
# devices to be passed in to QEMU via SCM_RIGHTS.
#
# If the FD associated with @fdname is not a socket, the command will
# fail and the FD will be closed.
#
# @protocol: protocol name.  Valid names are "vnc", "spice",
#     "@dbus-display" or the name of a character device (e.g. from
#     -chardev id=XXXX)
#
# @fdname: file descriptor name previously passed via `getfd` command
#
# @skipauth: whether to skip authentication.  Only applies to "vnc"
#     and "spice" protocols
#
# @tls: whether to perform TLS.  Only applies to the "spice" protocol
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "add_client", "arguments": { "protocol": "vnc",
#                                                  "fdname": "myclient" } }
#     <- { "return": {} }
##
{ 'command': 'add_client',
  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
            '*tls': 'bool' } }

##
# @NameInfo:
#
# Guest name information.
#
# @name: The name of the guest
#
# Since: 0.14
##
{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }

##
# @query-name:
#
# Return the name information of a guest.
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "query-name" }
#     <- { "return": { "name": "qemu-name" } }
##
{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }

##
# @IOThreadInfo:
#
# Information about an iothread
#
# @id: the identifier of the iothread
#
# @thread-id: ID of the underlying host thread
#
# @poll-max-ns: maximum polling time in ns, 0 means polling is
#     disabled (since 2.9)
#
# @poll-grow: how many ns will be added to polling time, 0 means that
#     it's not configured (since 2.9)
#
# @poll-shrink: how many ns will be removed from polling time, 0 means
#     that it's not configured (since 2.9)
#
# @poll-weight: the weight factor for adaptive polling.
#     Determines how much the current event interval contributes to
#     the next polling time calculation.  Valid values are 1 or
#     greater (since 11.1)
#
# @aio-max-batch: maximum number of requests in a batch for the AIO
#     engine, 0 means that the engine will use its default (since 6.1)
#
# Since: 2.0
##
{ 'struct': 'IOThreadInfo',
  'data': {'id': 'str',
           'thread-id': 'int',
           'poll-max-ns': 'int',
           'poll-grow': 'int',
           'poll-shrink': 'int',
           'poll-weight': 'int',
           'aio-max-batch': 'int' } }

##
# @query-iothreads:
#
# Return a list of information about each iothread.
#
# .. note:: This list excludes the QEMU main loop thread, which is not
#    declared using the ``-object iothread`` command-line option.  It
#    is always the main thread of the process.
#
# Returns: a list of info for each iothread
#
# Since: 2.0
#
# .. qmp-example::
#
#     -> { "execute": "query-iothreads" }
#     <- { "return": [
#              {
#                 "id":"iothread0",
#                 "thread-id":3134
#              },
#              {
#                 "id":"iothread1",
#                 "thread-id":3135
#              }
#           ]
#        }
##
{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
  'allow-preconfig': true }

##
# @stop:
#
# Stop guest VM execution.
#
# Since: 0.14
#
# .. note:: This function will succeed even if the guest is already in
#    the stopped state.  In "inmigrate" state, it will ensure that the
#    guest remains paused once migration finishes, as if the ``-S``
#    option was passed on the command line.
#
#    In the "suspended" state, it will completely stop the VM and
#    cause a transition to the "paused" state.  (Since 9.0)
#
# .. qmp-example::
#
#     -> { "execute": "stop" }
#     <- { "return": {} }
##
{ 'command': 'stop' }

##
# @cont:
#
# Resume guest VM execution.
#
# Since: 0.14
#
# .. note:: This command will succeed if the guest is currently
#    running.  It will also succeed if the guest is in the "inmigrate"
#    state; in this case, the effect of the command is to make sure
#    the guest starts once migration finishes, removing the effect of
#    the ``-S`` command line option if it was passed.
#
#    If the VM was previously suspended, and not been reset or woken,
#    this command will transition back to the "suspended" state.
#    (Since 9.0)
#
# .. qmp-example::
#
#     -> { "execute": "cont" }
#     <- { "return": {} }
##
{ 'command': 'cont' }

##
# @x-exit-preconfig:
#
# Exit from "preconfig" state
#
# This command makes QEMU exit the preconfig state and proceed with VM
# initialization using configuration data provided on the command line
# and via the QMP monitor during the preconfig state.  The command is
# only available during the preconfig state (i.e. when the --preconfig
# command line option was in use).
#
# Features:
#
# @unstable: This command is experimental.
#
# Since: 3.0
#
# .. qmp-example::
#
#     -> { "execute": "x-exit-preconfig" }
#     <- { "return": {} }
##
{ 'command': 'x-exit-preconfig', 'allow-preconfig': true,
  'features': [ 'unstable' ] }

##
# @human-monitor-command:
#
# Execute a command on the human monitor and return the output.
#
# @command-line: the command to execute in the human monitor
#
# @cpu-index: The CPU to use for commands that require an implicit CPU
#
# Features:
#
# @savevm-monitor-nodes: If present, HMP command savevm only snapshots
#     monitor-owned nodes if they have no parents.  This allows the
#     use of 'savevm' with -blockdev.  (since 4.2)
#
# Returns: the output of the command as a string
#
# Since: 0.14
#
# .. note:: This command only exists as a stop-gap.  Its use is highly
#    discouraged.  The semantics of this command are not guaranteed:
#    this means that command names, arguments and responses can change
#    or be removed at **any** time.  Applications that rely on long
#    term stability guarantees should **not** use this command.
#
#    Known limitations:
#
#    * This command is stateless, this means that commands that depend
#      on state information (such as `getfd`) might not work.
#
#    * Commands that prompt the user for data don't currently work.
#
# .. qmp-example::
#
#     -> { "execute": "human-monitor-command",
#          "arguments": { "command-line": "info kvm" } }
#     <- { "return": "kvm support: enabled\r\n" }
##
{ 'command': 'human-monitor-command',
  'data': {'command-line': 'str', '*cpu-index': 'int'},
  'returns': 'str',
  'features': [ 'savevm-monitor-nodes' ] }

##
# @getfd:
#
# Receive a file descriptor via SCM rights and assign it a name
#
# @fdname: file descriptor name
#
# Since: 0.14
#
# .. note:: If @fdname already exists, the file descriptor assigned to
#    it will be closed and replaced by the received file descriptor.
#
#    The `closefd` command can be used to explicitly close the file
#    descriptor when it is no longer needed.
#
# .. qmp-example::
#
#     -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
#     <- { "return": {} }
##
{ 'command': 'getfd', 'data': {'fdname': 'str'}, 'if': 'CONFIG_POSIX' }

##
# @get-win32-socket:
#
# Add a socket that was duplicated to QEMU process with
# WSADuplicateSocketW() via WSASocket() & WSAPROTOCOL_INFOW structure
# and assign it a name (the SOCKET is associated with a CRT file
# descriptor)
#
# @info: the WSAPROTOCOL_INFOW structure (encoded in base64)
#
# @fdname: file descriptor name
#
# Since: 8.0
#
# .. note:: If @fdname already exists, the file descriptor assigned to
#    it will be closed and replaced by the received file descriptor.
#
#    The `closefd` command can be used to explicitly close the file
#    descriptor when it is no longer needed.
#
# .. qmp-example::
#
#     -> { "execute": "get-win32-socket",
#          "arguments": { "info": "abcd123..", "fdname": "skclient" } }
#     <- { "return": {} }
##
{ 'command': 'get-win32-socket', 'data': {'info': 'str', 'fdname': 'str'}, 'if': 'CONFIG_WIN32' }

##
# @closefd:
#
# Close a file descriptor previously passed via SCM rights
#
# @fdname: file descriptor name
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
#     <- { "return": {} }
##
{ 'command': 'closefd', 'data': {'fdname': 'str'} }

##
# @AddfdInfo:
#
# Information about a file descriptor that was added to an fd set.
#
# @fdset-id: The ID of the fd set that @fd was added to.
#
# @fd: The file descriptor that was received via SCM rights and added
#     to the fd set.
#
# Since: 1.2
##
{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }

##
# @add-fd:
#
# Add a file descriptor, that was passed via SCM rights, to an fd set.
#
# @fdset-id: The ID of the fd set to add the file descriptor to.
#
# @opaque: A free-form string that can be used to describe the fd.
#
# Errors:
#     - If file descriptor was not received, GenericError
#     - If @fdset-id is a negative value, GenericError
#
# .. note:: The list of fd sets is shared by all monitor connections.
#
# .. note:: If @fdset-id is not specified, a new fd set will be
#    created.
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
#     <- { "return": { "fdset-id": 1, "fd": 3 } }
##
{ 'command': 'add-fd',
  'data': { '*fdset-id': 'int',
            '*opaque': 'str' },
  'returns': 'AddfdInfo' }

##
# @remove-fd:
#
# Remove a file descriptor from an fd set.
#
# @fdset-id: The ID of the fd set that the file descriptor belongs to.
#
# @fd: The file descriptor that is to be removed.
#
# Errors:
#     - If @fdset-id or @fd is not found, GenericError
#
# Since: 1.2
#
# .. note:: The list of fd sets is shared by all monitor connections.
#
# .. note:: If @fd is not specified, all file descriptors in @fdset-id
#    will be removed.
#
# .. qmp-example::
#
#     -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
#     <- { "return": {} }
##
{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }

##
# @FdsetFdInfo:
#
# Information about a file descriptor that belongs to an fd set.
#
# @fd: The file descriptor value.
#
# @opaque: A free-form string that can be used to describe the fd.
#
# Since: 1.2
##
{ 'struct': 'FdsetFdInfo',
  'data': {'fd': 'int', '*opaque': 'str'} }

##
# @FdsetInfo:
#
# Information about an fd set.
#
# @fdset-id: The ID of the fd set.
#
# @fds: A list of file descriptors that belong to this fd set.
#
# Since: 1.2
##
{ 'struct': 'FdsetInfo',
  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }

##
# @query-fdsets:
#
# Return information describing all fd sets.
#
# Since: 1.2
#
# .. note:: The list of fd sets is shared by all monitor connections.
#
# .. qmp-example::
#
#     -> { "execute": "query-fdsets" }
#     <- { "return": [
#            {
#              "fds": [
#                {
#                  "fd": 30,
#                  "opaque": "rdonly:/path/to/file"
#                },
#                {
#                  "fd": 24,
#                  "opaque": "rdwr:/path/to/file"
#                }
#              ],
#              "fdset-id": 1
#            },
#            {
#              "fds": [
#                {
#                  "fd": 28
#                },
#                {
#                  "fd": 29
#                }
#              ],
#              "fdset-id": 0
#            }
#          ]
#        }
##
{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }

##
# @CommandLineParameterType:
#
# Possible types for an option parameter.
#
# @string: accepts a character string
#
# @boolean: accepts "on" or "off"
#
# @number: accepts a number
#
# @size: accepts a number followed by an optional suffix (K)ilo,
#     (M)ega, (G)iga, (T)era
#
# Since: 1.5
##
{ 'enum': 'CommandLineParameterType',
  'data': ['string', 'boolean', 'number', 'size'] }

##
# @CommandLineParameterInfo:
#
# Details about a single parameter of a command line option.
#
# @name: parameter name
#
# @type: parameter `CommandLineParameterType`
#
# @help: human readable text string, not suitable for parsing.
#
# @default: default value string (since 2.1)
#
# Since: 1.5
##
{ 'struct': 'CommandLineParameterInfo',
  'data': { 'name': 'str',
            'type': 'CommandLineParameterType',
            '*help': 'str',
            '*default': 'str' } }

##
# @CommandLineOptionInfo:
#
# Details about a command line option, including its list of parameter
# details
#
# @option: option name
#
# @parameters: an array of `CommandLineParameterInfo`
#
# Since: 1.5
##
{ 'struct': 'CommandLineOptionInfo',
  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }

##
# @query-command-line-options:
#
# Query command line option schema.
#
# @option: option name
#
# Returns: list of objects for all options (or for the given @option).
#
# Errors:
#     - if the given @option doesn't exist
#
# Since: 1.5
#
# .. qmp-example::
#
#     -> { "execute": "query-command-line-options",
#          "arguments": { "option": "option-rom" } }
#     <- { "return": [
#             {
#                 "parameters": [
#                     {
#                         "name": "romfile",
#                         "type": "string"
#                     },
#                     {
#                         "name": "bootindex",
#                         "type": "number"
#                     }
#                 ],
#                 "option": "option-rom"
#             }
#          ]
#        }
##
{'command': 'query-command-line-options',
 'data': {'*option': 'str'},
 'returns': ['CommandLineOptionInfo'],
 'allow-preconfig': true}

##
# @RTC_CHANGE:
#
# Emitted when the guest changes the RTC time.
#
# @offset: offset in seconds between base RTC clock (as specified by
#     -rtc base), and new RTC clock value
#
# @qom-path: path to the RTC object in the QOM tree
#
# .. note:: This event is rate-limited.  It is not guaranteed that the
#    RTC in the system implements this event, or even that the system
#    has an RTC at all.
#
# Since: 0.13
#
# .. qmp-example::
#
#     <- { "event": "RTC_CHANGE",
#          "data": { "offset": 78 },
#          "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
##
{ 'event': 'RTC_CHANGE',
  'data': { 'offset': 'int', 'qom-path': 'str' } }

##
# @VFU_CLIENT_HANGUP:
#
# Emitted when the client of a TYPE_VFIO_USER_SERVER closes the
# communication channel
#
# @vfu-id: ID of the TYPE_VFIO_USER_SERVER object.  It is the last
#     component of @vfu-qom-path referenced below
#
# @vfu-qom-path: path to the TYPE_VFIO_USER_SERVER object in the QOM
#     tree
#
# @dev-id: ID of attached PCI device
#
# @dev-qom-path: path to attached PCI device in the QOM tree
#
# Since: 7.1
#
# .. qmp-example::
#
#     <- { "event": "VFU_CLIENT_HANGUP",
#          "data": { "vfu-id": "vfu1",
#                    "vfu-qom-path": "/objects/vfu1",
#                    "dev-id": "sas1",
#                    "dev-qom-path": "/machine/peripheral/sas1" },
#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'VFU_CLIENT_HANGUP',
  'data': { 'vfu-id': 'str', 'vfu-qom-path': 'str',
            'dev-id': 'str', 'dev-qom-path': 'str' } }
