# -*- Mode: Python -*-
# vim: filetype=python
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.

##
# = Machines
##

{ 'include': 'common.json' }
{ 'include': 'machine-common.json' }

##
# @SysEmuTarget:
#
# The comprehensive enumeration of QEMU system emulation ("softmmu")
# targets.  Run "./configure --help" in the project root directory,
# and look for the \*-softmmu targets near the "--target-list" option.
# The individual target constants are not documented here, for the
# time being.
#
# @rx: since 5.0
#
# @avr: since 5.1
#
# .. note:: The resulting QMP strings can be appended to the
#    "qemu-system-" prefix to produce the corresponding QEMU executable
#    name.  This is true even for "qemu-system-x86_64".
#
# Since: 3.0
##
{ 'enum' : 'SysEmuTarget',
  'data' : [ 'aarch64', 'alpha', 'arm', 'avr', 'cris', 'hppa', 'i386',
             'loongarch64', 'm68k', 'microblaze', 'microblazeel', 'mips', 'mips64',
             'mips64el', 'mipsel', 'or1k', 'ppc',
             'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4',
             'sh4eb', 'sparc', 'sparc64', 'tricore',
             'x86_64', 'xtensa', 'xtensaeb' ] }

##
# @CpuS390State:
#
# An enumeration of cpu states that can be assumed by a virtual S390
# CPU
#
# Since: 2.12
##
{ 'enum': 'CpuS390State',
  'prefix': 'S390_CPU_STATE',
  'data': [ 'uninitialized', 'stopped', 'check-stop', 'operating', 'load' ] }

##
# @CpuInfoS390:
#
# Additional information about a virtual S390 CPU
#
# @cpu-state: the virtual CPU's state
#
# @dedicated: the virtual CPU's dedication (since 8.2)
#
# @entitlement: the virtual CPU's entitlement (since 8.2)
#
# Since: 2.12
##
{ 'struct': 'CpuInfoS390',
  'data': { 'cpu-state': 'CpuS390State',
            '*dedicated': 'bool',
            '*entitlement': 'CpuS390Entitlement' } }

##
# @CpuInfoFast:
#
# Information about a virtual CPU
#
# @cpu-index: index of the virtual CPU
#
# @qom-path: path to the CPU object in the QOM tree
#
# @thread-id: ID of the underlying host thread
#
# @props: properties associated with a virtual CPU, e.g. the socket id
#
# @target: the QEMU system emulation target, which determines which
#     additional fields will be listed (since 3.0)
#
# Since: 2.12
##
{ 'union'         : 'CpuInfoFast',
  'base'          : { 'cpu-index'    : 'int',
                      'qom-path'     : 'str',
                      'thread-id'    : 'int',
                      '*props'       : 'CpuInstanceProperties',
                      'target'       : 'SysEmuTarget' },
  'discriminator' : 'target',
  'data'          : { 's390x'        : 'CpuInfoS390' } }

##
# @query-cpus-fast:
#
# Returns information about all virtual CPUs.
#
# Returns: list of @CpuInfoFast
#
# Since: 2.12
#
# .. qmp-example::
#
#     -> { "execute": "query-cpus-fast" }
#     <- { "return": [
#             {
#                 "thread-id": 25627,
#                 "props": {
#                     "core-id": 0,
#                     "thread-id": 0,
#                     "socket-id": 0
#                 },
#                 "qom-path": "/machine/unattached/device[0]",
#                 "target":"x86_64",
#                 "cpu-index": 0
#             },
#             {
#                 "thread-id": 25628,
#                 "props": {
#                     "core-id": 0,
#                     "thread-id": 0,
#                     "socket-id": 1
#                 },
#                 "qom-path": "/machine/unattached/device[2]",
#                 "target":"x86_64",
#                 "cpu-index": 1
#             }
#         ]
#     }
##
{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] }

##
# @CompatProperty:
#
# Property default values specific to a machine type, for use by
# scripts/compare-machine-types.
#
# @qom-type: name of the QOM type to which the default applies
#
# @property: name of its property to which the default applies
#
# @value: the default value (machine-specific default can overwrite
#     the "default" default, to avoid this use -machine none)
#
# Since: 9.1
##
{ 'struct': 'CompatProperty',
  'data': { 'qom-type': 'str',
            'property': 'str',
            'value': 'str' } }

##
# @MachineInfo:
#
# Information describing a machine.
#
# @name: the name of the machine
#
# @alias: an alias for the machine name
#
# @is-default: whether the machine is default
#
# @cpu-max: maximum number of CPUs supported by the machine type
#     (since 1.5)
#
# @hotpluggable-cpus: cpu hotplug via -device is supported (since 2.7)
#
# @numa-mem-supported: true if '-numa node,mem' option is supported by
#     the machine type and false otherwise (since 4.1)
#
# @deprecated: if true, the machine type is deprecated and may be
#     removed in future versions of QEMU according to the QEMU
#     deprecation policy (since 4.1)
#
# @default-cpu-type: default CPU model typename if none is requested
#     via the -cpu argument.  (since 4.2)
#
# @default-ram-id: the default ID of initial RAM memory backend (since
#     5.2)
#
# @acpi: machine type supports ACPI (since 8.0)
#
# @compat-props: The machine type's compatibility properties.  Only
#     present when query-machines argument @compat-props is true.
#     (since 9.1)
#
# Features:
#
# @unstable: Member @compat-props is experimental.
#
# Since: 1.2
##
{ 'struct': 'MachineInfo',
  'data': { 'name': 'str', '*alias': 'str',
            '*is-default': 'bool', 'cpu-max': 'int',
            'hotpluggable-cpus': 'bool',  'numa-mem-supported': 'bool',
            'deprecated': 'bool', '*default-cpu-type': 'str',
            '*default-ram-id': 'str', 'acpi': 'bool',
            '*compat-props': { 'type': ['CompatProperty'],
                               'features': ['unstable'] } } }

##
# @query-machines:
#
# Return a list of supported machines
#
# @compat-props: if true, also return compatibility properties.
#     (default: false) (since 9.1)
#
# Features:
#
# @unstable: Argument @compat-props is experimental.
#
# Returns: a list of MachineInfo
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "query-machines", "arguments": { "compat-props": true } }
#     <- { "return": [
#               {
#                  "hotpluggable-cpus": true,
#                  "name": "pc-q35-6.2",
#                  "compat-props": [
#                       {
#                          "qom-type": "virtio-mem",
#                          "property": "unplugged-inaccessible",
#                          "value": "off"
#                       }
#                   ],
#                   "numa-mem-supported": false,
#                   "default-cpu-type": "qemu64-x86_64-cpu",
#                   "cpu-max": 288,
#                   "deprecated": false,
#                   "default-ram-id": "pc.ram"
#               },
#               ...
#        }
##
{ 'command': 'query-machines',
  'data': { '*compat-props': { 'type': 'bool',
                               'features': [ 'unstable' ] } },
  'returns': ['MachineInfo'] }

##
# @CurrentMachineParams:
#
# Information describing the running machine parameters.
#
# @wakeup-suspend-support: true if the machine supports wake up from
#     suspend
#
# Since: 4.0
##
{ 'struct': 'CurrentMachineParams',
  'data': { 'wakeup-suspend-support': 'bool'} }

##
# @query-current-machine:
#
# Return information on the current virtual machine.
#
# Returns: CurrentMachineParams
#
# Since: 4.0
##
{ 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' }

##
# @TargetInfo:
#
# Information describing the QEMU target.
#
# @arch: the target architecture
#
# Since: 1.2
##
{ 'struct': 'TargetInfo',
  'data': { 'arch': 'SysEmuTarget' } }

##
# @query-target:
#
# Return information about the target for this QEMU
#
# Returns: TargetInfo
#
# Since: 1.2
##
{ 'command': 'query-target', 'returns': 'TargetInfo' }

##
# @UuidInfo:
#
# Guest UUID information (Universally Unique Identifier).
#
# @UUID: the UUID of the guest
#
# Since: 0.14
#
# .. note:: If no UUID was specified for the guest, the nil UUID (all
#    zeroes) is returned.
##
{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }

##
# @query-uuid:
#
# Query the guest UUID information.
#
# Returns: The @UuidInfo for the guest
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "query-uuid" }
#     <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
##
{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true }

##
# @GuidInfo:
#
# GUID information.
#
# @guid: the globally unique identifier
#
# Since: 2.9
##
{ 'struct': 'GuidInfo', 'data': {'guid': 'str'} }

##
# @query-vm-generation-id:
#
# Show Virtual Machine Generation ID
#
# Since: 2.9
##
{ 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' }

##
# @system_reset:
#
# Performs a hard reset of a guest.
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "system_reset" }
#     <- { "return": {} }
##
{ 'command': 'system_reset' }

##
# @system_powerdown:
#
# Requests that a guest perform a powerdown operation.
#
# Since: 0.14
#
# .. note:: A guest may or may not respond to this command.  This
#    command returning does not indicate that a guest has accepted the
#    request or that it has shut down.  Many guests will respond to this
#    command by prompting the user in some way.
#
# .. qmp-example::
#
#     -> { "execute": "system_powerdown" }
#     <- { "return": {} }
##
{ 'command': 'system_powerdown' }

##
# @system_wakeup:
#
# Wake up guest from suspend.  If the guest has wake-up from suspend
# support enabled (wakeup-suspend-support flag from
# query-current-machine), wake-up guest from suspend if the guest is
# in SUSPENDED state.  Return an error otherwise.
#
# Since: 1.1
#
# .. note:: Prior to 4.0, this command does nothing in case the guest
#    isn't suspended.
#
# .. qmp-example::
#
#     -> { "execute": "system_wakeup" }
#     <- { "return": {} }
##
{ 'command': 'system_wakeup' }

##
# @LostTickPolicy:
#
# Policy for handling lost ticks in timer devices.  Ticks end up
# getting lost when, for example, the guest is paused.
#
# @discard: throw away the missed ticks and continue with future
#     injection normally.  The guest OS will see the timer jump ahead
#     by a potentially quite significant amount all at once, as if the
#     intervening chunk of time had simply not existed; needless to
#     say, such a sudden jump can easily confuse a guest OS which is
#     not specifically prepared to deal with it.  Assuming the guest
#     OS can deal correctly with the time jump, the time in the guest
#     and in the host should now match.
#
# @delay: continue to deliver ticks at the normal rate.  The guest OS
#     will not notice anything is amiss, as from its point of view
#     time will have continued to flow normally.  The time in the
#     guest should now be behind the time in the host by exactly the
#     amount of time during which ticks have been missed.
#
# @slew: deliver ticks at a higher rate to catch up with the missed
#     ticks.  The guest OS will not notice anything is amiss, as from
#     its point of view time will have continued to flow normally.
#     Once the timer has managed to catch up with all the missing
#     ticks, the time in the guest and in the host should match.
#
# Since: 2.0
##
{ 'enum': 'LostTickPolicy',
  'data': ['discard', 'delay', 'slew' ] }

##
# @inject-nmi:
#
# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or
# all CPUs (ppc64). The command fails when the guest doesn't support
# injecting.
#
# Since: 0.14
#
# .. note:: Prior to 2.1, this command was only supported for x86 and
#    s390 VMs.
#
# .. qmp-example::
#
#     -> { "execute": "inject-nmi" }
#     <- { "return": {} }
##
{ 'command': 'inject-nmi' }

##
# @KvmInfo:
#
# Information about support for KVM acceleration
#
# @enabled: true if KVM acceleration is active
#
# @present: true if KVM acceleration is built into this executable
#
# Since: 0.14
##
{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }

##
# @query-kvm:
#
# Returns information about KVM acceleration
#
# Returns: @KvmInfo
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "query-kvm" }
#     <- { "return": { "enabled": true, "present": true } }
##
{ 'command': 'query-kvm', 'returns': 'KvmInfo' }

##
# @NumaOptionsType:
#
# @node: NUMA nodes configuration
#
# @dist: NUMA distance configuration (since 2.10)
#
# @cpu: property based CPU(s) to node mapping (Since: 2.10)
#
# @hmat-lb: memory latency and bandwidth information (Since: 5.0)
#
# @hmat-cache: memory side cache information (Since: 5.0)
#
# Since: 2.1
##
{ 'enum': 'NumaOptionsType',
  'data': [ 'node', 'dist', 'cpu', 'hmat-lb', 'hmat-cache' ] }

##
# @NumaOptions:
#
# A discriminated record of NUMA options.  (for OptsVisitor)
#
# @type: NUMA option type
#
# Since: 2.1
##
{ 'union': 'NumaOptions',
  'base': { 'type': 'NumaOptionsType' },
  'discriminator': 'type',
  'data': {
    'node': 'NumaNodeOptions',
    'dist': 'NumaDistOptions',
    'cpu': 'NumaCpuOptions',
    'hmat-lb': 'NumaHmatLBOptions',
    'hmat-cache': 'NumaHmatCacheOptions' }}

##
# @NumaNodeOptions:
#
# Create a guest NUMA node.  (for OptsVisitor)
#
# @nodeid: NUMA node ID (increase by 1 from 0 if omitted)
#
# @cpus: VCPUs belonging to this node (assign VCPUS round-robin if
#     omitted)
#
# @mem: memory size of this node; mutually exclusive with @memdev.
#     Equally divide total memory among nodes if both @mem and @memdev
#     are omitted.
#
# @memdev: memory backend object.  If specified for one node, it must
#     be specified for all nodes.
#
# @initiator: defined in ACPI 6.3 Chapter 5.2.27.3 Table 5-145, points
#     to the nodeid which has the memory controller responsible for
#     this NUMA node.  This field provides additional information as
#     to the initiator node that is closest (as in directly attached)
#     to this node, and therefore has the best performance (since 5.0)
#
# Since: 2.1
##
{ 'struct': 'NumaNodeOptions',
  'data': {
   '*nodeid': 'uint16',
   '*cpus':   ['uint16'],
   '*mem':    'size',
   '*memdev': 'str',
   '*initiator': 'uint16' }}

##
# @NumaDistOptions:
#
# Set the distance between 2 NUMA nodes.
#
# @src: source NUMA node.
#
# @dst: destination NUMA node.
#
# @val: NUMA distance from source node to destination node.  When a
#     node is unreachable from another node, set the distance between
#     them to 255.
#
# Since: 2.10
##
{ 'struct': 'NumaDistOptions',
  'data': {
   'src': 'uint16',
   'dst': 'uint16',
   'val': 'uint8' }}

##
# @CXLFixedMemoryWindowOptions:
#
# Create a CXL Fixed Memory Window
#
# @size: Size of the Fixed Memory Window in bytes.  Must be a multiple
#     of 256MiB.
#
# @interleave-granularity: Number of contiguous bytes for which
#     accesses will go to a given interleave target.  Accepted values
#     [256, 512, 1k, 2k, 4k, 8k, 16k]
#
# @targets: Target root bridge IDs from -device ...,id=<ID> for each
#     root bridge.
#
# Since: 7.1
##
{ 'struct': 'CXLFixedMemoryWindowOptions',
  'data': {
      'size': 'size',
      '*interleave-granularity': 'size',
      'targets': ['str'] }}

##
# @CXLFMWProperties:
#
# List of CXL Fixed Memory Windows.
#
# @cxl-fmw: List of CXLFixedMemoryWindowOptions
#
# Since: 7.1
##
{ 'struct' : 'CXLFMWProperties',
  'data': { 'cxl-fmw': ['CXLFixedMemoryWindowOptions'] }
}

##
# @X86CPURegister32:
#
# A X86 32-bit register
#
# Since: 1.5
##
{ 'enum': 'X86CPURegister32',
  'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] }

##
# @X86CPUFeatureWordInfo:
#
# Information about a X86 CPU feature word
#
# @cpuid-input-eax: Input EAX value for CPUID instruction for that
#     feature word
#
# @cpuid-input-ecx: Input ECX value for CPUID instruction for that
#     feature word
#
# @cpuid-register: Output register containing the feature bits
#
# @features: value of output register, containing the feature bits
#
# Since: 1.5
##
{ 'struct': 'X86CPUFeatureWordInfo',
  'data': { 'cpuid-input-eax': 'int',
            '*cpuid-input-ecx': 'int',
            'cpuid-register': 'X86CPURegister32',
            'features': 'int' } }

##
# @DummyForceArrays:
#
# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList
# internally
#
# Since: 2.5
##
{ 'struct': 'DummyForceArrays',
  'data': { 'unused': ['X86CPUFeatureWordInfo'] } }

##
# @NumaCpuOptions:
#
# Option "-numa cpu" overrides default cpu to node mapping.  It
# accepts the same set of cpu properties as returned by
# query-hotpluggable-cpus[].props, where node-id could be used to
# override default node mapping.
#
# Since: 2.10
##
{ 'struct': 'NumaCpuOptions',
   'base': 'CpuInstanceProperties',
   'data' : {} }

##
# @HmatLBMemoryHierarchy:
#
# The memory hierarchy in the System Locality Latency and Bandwidth
# Information Structure of HMAT (Heterogeneous Memory Attribute Table)
#
# For more information about @HmatLBMemoryHierarchy, see chapter
# 5.2.27.4: Table 5-146: Field "Flags" of ACPI 6.3 spec.
#
# @memory: the structure represents the memory performance
#
# @first-level: first level of memory side cache
#
# @second-level: second level of memory side cache
#
# @third-level: third level of memory side cache
#
# Since: 5.0
##
{ 'enum': 'HmatLBMemoryHierarchy',
  'data': [ 'memory', 'first-level', 'second-level', 'third-level' ] }

##
# @HmatLBDataType:
#
# Data type in the System Locality Latency and Bandwidth Information
# Structure of HMAT (Heterogeneous Memory Attribute Table)
#
# For more information about @HmatLBDataType, see chapter 5.2.27.4:
# Table 5-146:  Field "Data Type" of ACPI 6.3 spec.
#
# @access-latency: access latency (nanoseconds)
#
# @read-latency: read latency (nanoseconds)
#
# @write-latency: write latency (nanoseconds)
#
# @access-bandwidth: access bandwidth (Bytes per second)
#
# @read-bandwidth: read bandwidth (Bytes per second)
#
# @write-bandwidth: write bandwidth (Bytes per second)
#
# Since: 5.0
##
{ 'enum': 'HmatLBDataType',
  'data': [ 'access-latency', 'read-latency', 'write-latency',
            'access-bandwidth', 'read-bandwidth', 'write-bandwidth' ] }

##
# @NumaHmatLBOptions:
#
# Set the system locality latency and bandwidth information between
# Initiator and Target proximity Domains.
#
# For more information about @NumaHmatLBOptions, see chapter 5.2.27.4:
# Table 5-146 of ACPI 6.3 spec.
#
# @initiator: the Initiator Proximity Domain.
#
# @target: the Target Proximity Domain.
#
# @hierarchy: the Memory Hierarchy.  Indicates the performance of
#     memory or side cache.
#
# @data-type: presents the type of data, access/read/write latency or
#     hit latency.
#
# @latency: the value of latency from @initiator to @target proximity
#     domain, the latency unit is "ns(nanosecond)".
#
# @bandwidth: the value of bandwidth between @initiator and @target
#     proximity domain, the bandwidth unit is "Bytes per second".
#
# Since: 5.0
##
{ 'struct': 'NumaHmatLBOptions',
    'data': {
    'initiator': 'uint16',
    'target': 'uint16',
    'hierarchy': 'HmatLBMemoryHierarchy',
    'data-type': 'HmatLBDataType',
    '*latency': 'uint64',
    '*bandwidth': 'size' }}

##
# @HmatCacheAssociativity:
#
# Cache associativity in the Memory Side Cache Information Structure
# of HMAT
#
# For more information of @HmatCacheAssociativity, see chapter
# 5.2.27.5: Table 5-147 of ACPI 6.3 spec.
#
# @none: None (no memory side cache in this proximity domain, or cache
#     associativity unknown)
#
# @direct: Direct Mapped
#
# @complex: Complex Cache Indexing (implementation specific)
#
# Since: 5.0
##
{ 'enum': 'HmatCacheAssociativity',
  'data': [ 'none', 'direct', 'complex' ] }

##
# @HmatCacheWritePolicy:
#
# Cache write policy in the Memory Side Cache Information Structure of
# HMAT
#
# For more information of @HmatCacheWritePolicy, see chapter 5.2.27.5:
# Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec.
#
# @none: None (no memory side cache in this proximity domain, or cache
#     write policy unknown)
#
# @write-back: Write Back (WB)
#
# @write-through: Write Through (WT)
#
# Since: 5.0
##
{ 'enum': 'HmatCacheWritePolicy',
  'data': [ 'none', 'write-back', 'write-through' ] }

##
# @NumaHmatCacheOptions:
#
# Set the memory side cache information for a given memory domain.
#
# For more information of @NumaHmatCacheOptions, see chapter 5.2.27.5:
# Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec.
#
# @node-id: the memory proximity domain to which the memory belongs.
#
# @size: the size of memory side cache in bytes.
#
# @level: the cache level described in this structure.
#
# @associativity: the cache associativity,
#     none/direct-mapped/complex(complex cache indexing).
#
# @policy: the write policy, none/write-back/write-through.
#
# @line: the cache Line size in bytes.
#
# Since: 5.0
##
{ 'struct': 'NumaHmatCacheOptions',
  'data': {
   'node-id': 'uint32',
   'size': 'size',
   'level': 'uint8',
   'associativity': 'HmatCacheAssociativity',
   'policy': 'HmatCacheWritePolicy',
   'line': 'uint16' }}

##
# @memsave:
#
# Save a portion of guest memory to a file.
#
# @val: the virtual address of the guest to start from
#
# @size: the size of memory region to save
#
# @filename: the file to save the memory to as binary data
#
# @cpu-index: the index of the virtual CPU to use for translating the
#     virtual address (defaults to CPU 0)
#
# Since: 0.14
#
# .. caution:: Errors were not reliably returned until 1.1.
#
# .. qmp-example::
#
#     -> { "execute": "memsave",
#          "arguments": { "val": 10,
#                         "size": 100,
#                         "filename": "/tmp/virtual-mem-dump" } }
#     <- { "return": {} }
##
{ 'command': 'memsave',
  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }

##
# @pmemsave:
#
# Save a portion of guest physical memory to a file.
#
# @val: the physical address of the guest to start from
#
# @size: the size of memory region to save
#
# @filename: the file to save the memory to as binary data
#
# Since: 0.14
#
# .. caution:: Errors were not reliably returned until 1.1.
#
# .. qmp-example::
#
#     -> { "execute": "pmemsave",
#          "arguments": { "val": 10,
#                         "size": 100,
#                         "filename": "/tmp/physical-mem-dump" } }
#     <- { "return": {} }
##
{ 'command': 'pmemsave',
  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }

##
# @Memdev:
#
# Information about memory backend
#
# @id: backend's ID if backend has 'id' property (since 2.9)
#
# @size: memory backend size
#
# @merge: whether memory merge support is enabled
#
# @dump: whether memory backend's memory is included in a core dump
#
# @prealloc: whether memory was preallocated
#
# @share: whether memory is private to QEMU or shared (since 6.1)
#
# @reserve: whether swap space (or huge pages) was reserved if
#     applicable.  This corresponds to the user configuration and not
#     the actual behavior implemented in the OS to perform the
#     reservation.  For example, Linux will never reserve swap space
#     for shared file mappings.  (since 6.1)
#
# @host-nodes: host nodes for its memory policy
#
# @policy: memory policy of memory backend
#
# Since: 2.1
##
{ 'struct': 'Memdev',
  'data': {
    '*id':        'str',
    'size':       'size',
    'merge':      'bool',
    'dump':       'bool',
    'prealloc':   'bool',
    'share':      'bool',
    '*reserve':    'bool',
    'host-nodes': ['uint16'],
    'policy':     'HostMemPolicy' }}

##
# @query-memdev:
#
# Returns information for all memory backends.
#
# Returns: a list of @Memdev.
#
# Since: 2.1
#
# .. qmp-example::
#
#     -> { "execute": "query-memdev" }
#     <- { "return": [
#            {
#              "id": "mem1",
#              "size": 536870912,
#              "merge": false,
#              "dump": true,
#              "prealloc": false,
#              "share": false,
#              "host-nodes": [0, 1],
#              "policy": "bind"
#            },
#            {
#              "size": 536870912,
#              "merge": false,
#              "dump": true,
#              "prealloc": true,
#              "share": false,
#              "host-nodes": [2, 3],
#              "policy": "preferred"
#            }
#          ]
#        }
##
{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }

##
# @CpuInstanceProperties:
#
# Properties identifying a CPU.
#
# Which members are optional and which mandatory depends on the
# architecture and board.
#
# For s390x see :ref:`cpu-topology-s390x`.
#
# The ids other than the node-id specify the position of the CPU
# within the CPU topology (as defined by the machine property "smp",
# thus see also type @SMPConfiguration)
#
# @node-id: NUMA node ID the CPU belongs to
#
# @drawer-id: drawer number within CPU topology the CPU belongs to
#     (since 8.2)
#
# @book-id: book number within parent container the CPU belongs to
#     (since 8.2)
#
# @socket-id: socket number within parent container the CPU belongs to
#
# @die-id: die number within the parent container the CPU belongs to
#     (since 4.1)
#
# @cluster-id: cluster number within the parent container the CPU
#     belongs to (since 7.1)
#
# @module-id: module number within the parent container the CPU belongs
#     to (since 9.1)
#
# @core-id: core number within the parent container the CPU belongs to
#
# @thread-id: thread number within the core the CPU  belongs to
#
# Since: 2.7
##
{ 'struct': 'CpuInstanceProperties',
  # Keep these in sync with the properties device_add accepts
  'data': { '*node-id': 'int',
            '*drawer-id': 'int',
            '*book-id': 'int',
            '*socket-id': 'int',
            '*die-id': 'int',
            '*cluster-id': 'int',
            '*module-id': 'int',
            '*core-id': 'int',
            '*thread-id': 'int'
  }
}

##
# @HotpluggableCPU:
#
# @type: CPU object type for usage with device_add command
#
# @props: list of properties to pass for hotplugging a CPU with
#     device_add
#
# @vcpus-count: number of logical VCPU threads @HotpluggableCPU
#     provides
#
# @qom-path: link to existing CPU object if CPU is present or omitted
#     if CPU is not present.
#
# .. note:: Management should be prepared to pass through additional
#    properties with device_add.
#
# Since: 2.7
##
{ 'struct': 'HotpluggableCPU',
  'data': { 'type': 'str',
            'vcpus-count': 'int',
            'props': 'CpuInstanceProperties',
            '*qom-path': 'str'
          }
}

##
# @query-hotpluggable-cpus:
#
# TODO: Better documentation; currently there is none.
#
# Returns: a list of HotpluggableCPU objects.
#
# Since: 2.7
#
# .. qmp-example::
#    :annotated:
#
#    For pseries machine type started with
#    ``-smp 2,cores=2,maxcpus=4 -cpu POWER8``::
#
#     -> { "execute": "query-hotpluggable-cpus" }
#     <- {"return": [
#          { "props": { "core-id": 8 }, "type": "POWER8-spapr-cpu-core",
#            "vcpus-count": 1 },
#          { "props": { "core-id": 0 }, "type": "POWER8-spapr-cpu-core",
#            "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
#        ]}
#
# .. qmp-example::
#    :annotated:
#
#    For pc machine type started with ``-smp 1,maxcpus=2``::
#
#     -> { "execute": "query-hotpluggable-cpus" }
#     <- {"return": [
#          {
#             "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
#             "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
#          },
#          {
#             "qom-path": "/machine/unattached/device[0]",
#             "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
#             "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
#          }
#        ]}
#
# .. qmp-example::
#    :annotated:
#
#    For s390x-virtio-ccw machine type started with
#    ``-smp 1,maxcpus=2 -cpu qemu`` (Since: 2.11)::
#
#     -> { "execute": "query-hotpluggable-cpus" }
#     <- {"return": [
#          {
#             "type": "qemu-s390x-cpu", "vcpus-count": 1,
#             "props": { "core-id": 1 }
#          },
#          {
#             "qom-path": "/machine/unattached/device[0]",
#             "type": "qemu-s390x-cpu", "vcpus-count": 1,
#             "props": { "core-id": 0 }
#          }
#        ]}
##
{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'],
             'allow-preconfig': true }

##
# @set-numa-node:
#
# Runtime equivalent of '-numa' CLI option, available at preconfigure
# stage to configure numa mapping before initializing machine.
#
# Since: 3.0
##
{ 'command': 'set-numa-node', 'boxed': true,
  'data': 'NumaOptions',
  'allow-preconfig': true
}

##
# @balloon:
#
# Request the balloon driver to change its balloon size.
#
# @value: the target logical size of the VM in bytes.  We can deduce
#     the size of the balloon using this formula:
#
#        logical_vm_size = vm_ram_size - balloon_size
#
#     From it we have: balloon_size = vm_ram_size - @value
#
# Errors:
#     - If the balloon driver is enabled but not functional because
#       the KVM kernel module cannot support it, KVMMissingCap
#     - If no balloon device is present, DeviceNotActive
#
# .. note:: This command just issues a request to the guest.  When it
#    returns, the balloon size may not have changed.  A guest can change
#    the balloon size independent of this command.
#
# Since: 0.14
#
# .. qmp-example::
#    :annotated:
#
#    ::
#
#      -> { "execute": "balloon", "arguments": { "value": 536870912 } }
#      <- { "return": {} }
#
#    With a 2.5GiB guest this command inflated the ballon to 3GiB.
##
{ 'command': 'balloon', 'data': {'value': 'int'} }

##
# @BalloonInfo:
#
# Information about the guest balloon device.
#
# @actual: the logical size of the VM in bytes Formula used:
#     logical_vm_size = vm_ram_size - balloon_size
#
# Since: 0.14
##
{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }

##
# @query-balloon:
#
# Return information about the balloon device.
#
# Returns:
#     @BalloonInfo
#
# Errors:
#     - If the balloon driver is enabled but not functional because
#       the KVM kernel module cannot support it, KVMMissingCap
#     - If no balloon device is present, DeviceNotActive
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "query-balloon" }
#     <- { "return": {
#              "actual": 1073741824
#           }
#        }
##
{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }

##
# @BALLOON_CHANGE:
#
# Emitted when the guest changes the actual BALLOON level.  This value
# is equivalent to the @actual field return by the 'query-balloon'
# command
#
# @actual: the logical size of the VM in bytes Formula used:
#     logical_vm_size = vm_ram_size - balloon_size
#
# .. note:: This event is rate-limited.
#
# Since: 1.2
#
# .. qmp-example::
#
#     <- { "event": "BALLOON_CHANGE",
#          "data": { "actual": 944766976 },
#          "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
##
{ 'event': 'BALLOON_CHANGE',
  'data': { 'actual': 'int' } }

##
# @HvBalloonInfo:
#
# hv-balloon guest-provided memory status information.
#
# @committed: the amount of memory in use inside the guest plus the
#     amount of the memory unusable inside the guest (ballooned out,
#     offline, etc.)
#
# @available: the amount of the memory inside the guest available for
#     new allocations ("free")
#
# Since: 8.2
##
{ 'struct': 'HvBalloonInfo',
  'data': { 'committed': 'size', 'available': 'size' } }

##
# @query-hv-balloon-status-report:
#
# Returns the hv-balloon driver data contained in the last received
# "STATUS" message from the guest.
#
# Returns:
#     @HvBalloonInfo
#
# Errors:
#     - If no hv-balloon device is present, guest memory status
#       reporting is not enabled or no guest memory status report
#       received yet, GenericError
#
# Since: 8.2
#
# .. qmp-example::
#
#     -> { "execute": "query-hv-balloon-status-report" }
#     <- { "return": {
#              "committed": 816640000,
#              "available": 3333054464
#           }
#        }
##
{ 'command': 'query-hv-balloon-status-report', 'returns': 'HvBalloonInfo' }

##
# @HV_BALLOON_STATUS_REPORT:
#
# Emitted when the hv-balloon driver receives a "STATUS" message from
# the guest.
#
# .. note:: This event is rate-limited.
#
# Since: 8.2
#
# .. qmp-example::
#
#     <- { "event": "HV_BALLOON_STATUS_REPORT",
#          "data": { "committed": 816640000, "available": 3333054464 },
#          "timestamp": { "seconds": 1600295492, "microseconds": 661044 } }
##
{ 'event': 'HV_BALLOON_STATUS_REPORT',
  'data': 'HvBalloonInfo' }

##
# @MemoryInfo:
#
# Actual memory information in bytes.
#
# @base-memory: size of "base" memory specified with command line
#     option -m.
#
# @plugged-memory: size of memory that can be hot-unplugged.  This
#     field is omitted if target doesn't support memory hotplug (i.e.
#     CONFIG_MEM_DEVICE not defined at build time).
#
# Since: 2.11
##
{ 'struct': 'MemoryInfo',
  'data'  : { 'base-memory': 'size', '*plugged-memory': 'size' } }

##
# @query-memory-size-summary:
#
# Return the amount of initially allocated and present hotpluggable
# (if enabled) memory in bytes.
#
# .. qmp-example::
#
#     -> { "execute": "query-memory-size-summary" }
#     <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } }
#
# Since: 2.11
##
{ 'command': 'query-memory-size-summary', 'returns': 'MemoryInfo' }

##
# @PCDIMMDeviceInfo:
#
# PCDIMMDevice state information
#
# @id: device's ID
#
# @addr: physical address, where device is mapped
#
# @size: size of memory that the device provides
#
# @slot: slot number at which device is plugged in
#
# @node: NUMA node number where device is plugged in
#
# @memdev: memory backend linked with device
#
# @hotplugged: true if device was hotplugged
#
# @hotpluggable: true if device if could be added/removed while
#     machine is running
#
# Since: 2.1
##
{ 'struct': 'PCDIMMDeviceInfo',
  'data': { '*id': 'str',
            'addr': 'int',
            'size': 'int',
            'slot': 'int',
            'node': 'int',
            'memdev': 'str',
            'hotplugged': 'bool',
            'hotpluggable': 'bool'
          }
}

##
# @VirtioPMEMDeviceInfo:
#
# VirtioPMEM state information
#
# @id: device's ID
#
# @memaddr: physical address in memory, where device is mapped
#
# @size: size of memory that the device provides
#
# @memdev: memory backend linked with device
#
# Since: 4.1
##
{ 'struct': 'VirtioPMEMDeviceInfo',
  'data': { '*id': 'str',
            'memaddr': 'size',
            'size': 'size',
            'memdev': 'str'
          }
}

##
# @VirtioMEMDeviceInfo:
#
# VirtioMEMDevice state information
#
# @id: device's ID
#
# @memaddr: physical address in memory, where device is mapped
#
# @requested-size: the user requested size of the device
#
# @size: the (current) size of memory that the device provides
#
# @max-size: the maximum size of memory that the device can provide
#
# @block-size: the block size of memory that the device provides
#
# @node: NUMA node number where device is assigned to
#
# @memdev: memory backend linked with the region
#
# Since: 5.1
##
{ 'struct': 'VirtioMEMDeviceInfo',
  'data': { '*id': 'str',
            'memaddr': 'size',
            'requested-size': 'size',
            'size': 'size',
            'max-size': 'size',
            'block-size': 'size',
            'node': 'int',
            'memdev': 'str'
          }
}

##
# @SgxEPCDeviceInfo:
#
# Sgx EPC state information
#
# @id: device's ID
#
# @memaddr: physical address in memory, where device is mapped
#
# @size: size of memory that the device provides
#
# @memdev: memory backend linked with device
#
# @node: the numa node (Since: 7.0)
#
# Since: 6.2
##
{ 'struct': 'SgxEPCDeviceInfo',
  'data': { '*id': 'str',
            'memaddr': 'size',
            'size': 'size',
            'node': 'int',
            'memdev': 'str'
          }
}

##
# @HvBalloonDeviceInfo:
#
# hv-balloon provided memory state information
#
# @id: device's ID
#
# @memaddr: physical address in memory, where device is mapped
#
# @max-size: the maximum size of memory that the device can provide
#
# @memdev: memory backend linked with device
#
# Since: 8.2
##
{ 'struct': 'HvBalloonDeviceInfo',
  'data': { '*id': 'str',
            '*memaddr': 'size',
            'max-size': 'size',
            '*memdev': 'str'
          }
}

##
# @MemoryDeviceInfoKind:
#
# @nvdimm: since 2.12
#
# @virtio-pmem: since 4.1
#
# @virtio-mem: since 5.1
#
# @sgx-epc: since 6.2.
#
# @hv-balloon: since 8.2.
#
# Since: 2.1
##
{ 'enum': 'MemoryDeviceInfoKind',
  'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem', 'sgx-epc',
            'hv-balloon' ] }

##
# @PCDIMMDeviceInfoWrapper:
#
# @data: PCDIMMDevice state information
#
# Since: 2.1
##
{ 'struct': 'PCDIMMDeviceInfoWrapper',
  'data': { 'data': 'PCDIMMDeviceInfo' } }

##
# @VirtioPMEMDeviceInfoWrapper:
#
# @data: VirtioPMEM state information
#
# Since: 2.1
##
{ 'struct': 'VirtioPMEMDeviceInfoWrapper',
  'data': { 'data': 'VirtioPMEMDeviceInfo' } }

##
# @VirtioMEMDeviceInfoWrapper:
#
# @data: VirtioMEMDevice state information
#
# Since: 2.1
##
{ 'struct': 'VirtioMEMDeviceInfoWrapper',
  'data': { 'data': 'VirtioMEMDeviceInfo' } }

##
# @SgxEPCDeviceInfoWrapper:
#
# @data: Sgx EPC state information
#
# Since: 6.2
##
{ 'struct': 'SgxEPCDeviceInfoWrapper',
  'data': { 'data': 'SgxEPCDeviceInfo' } }

##
# @HvBalloonDeviceInfoWrapper:
#
# @data: hv-balloon provided memory state information
#
# Since: 8.2
##
{ 'struct': 'HvBalloonDeviceInfoWrapper',
  'data': { 'data': 'HvBalloonDeviceInfo' } }

##
# @MemoryDeviceInfo:
#
# Union containing information about a memory device
#
# @type: memory device type
#
# Since: 2.1
##
{ 'union': 'MemoryDeviceInfo',
  'base': { 'type': 'MemoryDeviceInfoKind' },
  'discriminator': 'type',
  'data': { 'dimm': 'PCDIMMDeviceInfoWrapper',
            'nvdimm': 'PCDIMMDeviceInfoWrapper',
            'virtio-pmem': 'VirtioPMEMDeviceInfoWrapper',
            'virtio-mem': 'VirtioMEMDeviceInfoWrapper',
            'sgx-epc': 'SgxEPCDeviceInfoWrapper',
            'hv-balloon': 'HvBalloonDeviceInfoWrapper'
          }
}

##
# @SgxEPC:
#
# Sgx EPC cmdline information
#
# @memdev: memory backend linked with device
#
# @node: the numa node (Since: 7.0)
#
# Since: 6.2
##
{ 'struct': 'SgxEPC',
  'data': { 'memdev': 'str',
            'node': 'int'
          }
}

##
# @SgxEPCProperties:
#
# SGX properties of machine types.
#
# @sgx-epc: list of ids of memory-backend-epc objects.
#
# Since: 6.2
##
{ 'struct': 'SgxEPCProperties',
  'data': { 'sgx-epc': ['SgxEPC'] }
}

##
# @query-memory-devices:
#
# Lists available memory devices and their state
#
# Since: 2.1
#
# .. qmp-example::
#
#     -> { "execute": "query-memory-devices" }
#     <- { "return": [ { "data":
#                           { "addr": 5368709120,
#                             "hotpluggable": true,
#                             "hotplugged": true,
#                             "id": "d1",
#                             "memdev": "/objects/memX",
#                             "node": 0,
#                             "size": 1073741824,
#                             "slot": 0},
#                        "type": "dimm"
#                      } ] }
##
{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }

##
# @MEMORY_DEVICE_SIZE_CHANGE:
#
# Emitted when the size of a memory device changes.  Only emitted for
# memory devices that can actually change the size (e.g., virtio-mem
# due to guest action).
#
# @id: device's ID
#
# @size: the new size of memory that the device provides
#
# @qom-path: path to the device object in the QOM tree (since 6.2)
#
# .. note:: This event is rate-limited.
#
# Since: 5.1
#
# .. qmp-example::
#
#     <- { "event": "MEMORY_DEVICE_SIZE_CHANGE",
#          "data": { "id": "vm0", "size": 1073741824,
#                    "qom-path": "/machine/unattached/device[2]" },
#          "timestamp": { "seconds": 1588168529, "microseconds": 201316 } }
##
{ 'event': 'MEMORY_DEVICE_SIZE_CHANGE',
  'data': { '*id': 'str', 'size': 'size', 'qom-path' : 'str'} }

##
# @BootConfiguration:
#
# Schema for virtual machine boot configuration.
#
# @order: Boot order (a=floppy, c=hard disk, d=CD-ROM, n=network)
#
# @once: Boot order to apply on first boot
#
# @menu: Whether to show a boot menu
#
# @splash: The name of the file to be passed to the firmware as logo
#     picture, if @menu is true.
#
# @splash-time: How long to show the logo picture, in milliseconds
#
# @reboot-timeout: Timeout before guest reboots after boot fails
#
# @strict: Whether to attempt booting from devices not included in the
#     boot order
#
# Since: 7.1
##
{ 'struct': 'BootConfiguration', 'data': {
     '*order': 'str',
     '*once': 'str',
     '*menu': 'bool',
     '*splash': 'str',
     '*splash-time': 'int',
     '*reboot-timeout': 'int',
     '*strict': 'bool' } }

##
# @SMPConfiguration:
#
# Schema for CPU topology configuration.  A missing value lets QEMU
# figure out a suitable value based on the ones that are provided.
#
# The members other than @cpus and @maxcpus define a topology of
# containers.
#
# The ordering from highest/coarsest to lowest/finest is:
# @drawers, @books, @sockets, @dies, @clusters, @cores, @threads.
#
# Different architectures support different subsets of topology
# containers.
#
# For example, s390x does not have clusters and dies, and the socket
# is the parent container of cores.
#
# @cpus: number of virtual CPUs in the virtual machine
#
# @maxcpus: maximum number of hotpluggable virtual CPUs in the virtual
#     machine
#
# @drawers: number of drawers in the CPU topology (since 8.2)
#
# @books: number of books in the CPU topology (since 8.2)
#
# @sockets: number of sockets per parent container
#
# @dies: number of dies per parent container
#
# @clusters: number of clusters per parent container (since 7.0)
#
# @modules: number of modules per parent container (since 9.1)
#
# @cores: number of cores per parent container
#
# @threads: number of threads per core
#
# Since: 6.1
##
{ 'struct': 'SMPConfiguration', 'data': {
     '*cpus': 'int',
     '*drawers': 'int',
     '*books': 'int',
     '*sockets': 'int',
     '*dies': 'int',
     '*clusters': 'int',
     '*modules': 'int',
     '*cores': 'int',
     '*threads': 'int',
     '*maxcpus': 'int' } }

##
# @x-query-irq:
#
# Query interrupt statistics
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: interrupt statistics
#
# Since: 6.2
##
{ 'command': 'x-query-irq',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ] }

##
# @x-query-jit:
#
# Query TCG compiler statistics
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: TCG compiler statistics
#
# Since: 6.2
##
{ 'command': 'x-query-jit',
  'returns': 'HumanReadableText',
  'if': 'CONFIG_TCG',
  'features': [ 'unstable' ] }

##
# @x-query-numa:
#
# Query NUMA topology information
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: topology information
#
# Since: 6.2
##
{ 'command': 'x-query-numa',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ] }

##
# @x-query-opcount:
#
# Query TCG opcode counters
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: TCG opcode counters
#
# Since: 6.2
##
{ 'command': 'x-query-opcount',
  'returns': 'HumanReadableText',
  'if': 'CONFIG_TCG',
  'features': [ 'unstable' ] }

##
# @x-query-ramblock:
#
# Query system ramblock information
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: system ramblock information
#
# Since: 6.2
##
{ 'command': 'x-query-ramblock',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ] }

##
# @x-query-roms:
#
# Query information on the registered ROMS
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: registered ROMs
#
# Since: 6.2
##
{ 'command': 'x-query-roms',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ] }

##
# @x-query-usb:
#
# Query information on the USB devices
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: USB device information
#
# Since: 6.2
##
{ 'command': 'x-query-usb',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ] }

##
# @SmbiosEntryPointType:
#
# @32: SMBIOS version 2.1 (32-bit) Entry Point
#
# @64: SMBIOS version 3.0 (64-bit) Entry Point
#
# @auto: Either 2.x or 3.x SMBIOS version, 2.x if configuration can be
#     described by it and 3.x otherwise (since: 9.0)
#
# Since: 7.0
##
{ 'enum': 'SmbiosEntryPointType',
  'data': [ '32', '64', 'auto' ] }

##
# @MemorySizeConfiguration:
#
# Schema for memory size configuration.
#
# @size: memory size in bytes
#
# @max-size: maximum hotpluggable memory size in bytes
#
# @slots: number of available memory slots for hotplug
#
# Since: 7.1
##
{ 'struct': 'MemorySizeConfiguration', 'data': {
     '*size': 'size',
     '*max-size': 'size',
     '*slots': 'uint64' } }

##
# @dumpdtb:
#
# Save the FDT in dtb format.
#
# @filename: name of the dtb file to be created
#
# Since: 7.2
#
# .. qmp-example::
#
#     -> { "execute": "dumpdtb" }
#          "arguments": { "filename": "fdt.dtb" } }
#     <- { "return": {} }
##
{ 'command': 'dumpdtb',
  'data': { 'filename': 'str' },
  'if': 'CONFIG_FDT' }

##
# @x-query-interrupt-controllers:
#
# Query information on interrupt controller devices
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns: Interrupt controller devices information
#
# Since: 9.1
##
{ 'command': 'x-query-interrupt-controllers',
  'returns': 'HumanReadableText',
  'features': [ 'unstable' ]}
