# -*- 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.

{ 'include': 'authz.json' }
{ 'include': 'block-core.json' }
{ 'include': 'common.json' }
{ 'include': 'crypto.json' }

##
# ***********************
# QEMU Object Model (QOM)
# ***********************
##

##
# @ObjectPropertyInfo:
#
# @name: the name of the property
#
# @type: the type of the property.  This will typically come in one of
#     four forms:
#
#     1) A primitive type such as 'u8', 'u16', 'bool', 'str', or
#        'double'.  These types are mapped to the appropriate JSON
#        type.
#
#     2) A child type in the form 'child<subtype>' where subtype is a
#        qdev device type name.  Child properties create the
#        composition tree.
#
#     3) A link type in the form 'link<subtype>' where subtype is a
#        qdev device type name.  Link properties form the device model
#        graph.
#
# @description: if specified, the description of the property.
#
# @default-value: the default value, if any (since 5.0)
#
# Since: 1.2
##
{ 'struct': 'ObjectPropertyInfo',
  'data': { 'name': 'str',
            'type': 'str',
            '*description': 'str',
            '*default-value': 'any' } }

##
# @ObjectPropertyValue:
#
# @name: the name of the property.
#
# @type: the type of the property, as described in
#     `ObjectPropertyInfo`.
#
# @value: the value of the property.  Absent when the property cannot
#     be read.
#
# Since 10.1
##
{ 'struct': 'ObjectPropertyValue',
  'data': { 'name': 'str',
            'type': 'str',
            '*value': 'any' } }

##
# @ObjectPropertiesValues:
#
# @properties: a list of properties.
#
# Since 10.1
##
{ 'struct': 'ObjectPropertiesValues',
  'data': { 'properties': [ 'ObjectPropertyValue' ] }}

##
# @qom-list:
#
# List properties of a object given a path in the object model.
#
# @path: the path within the object model.  See `qom-get` for a
#     description of this parameter.
#
# Returns: a list that describe the properties of the object.
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "qom-list",
#          "arguments": { "path": "/chardevs" } }
#     <- { "return": [ { "name": "type", "type": "string" },
#                      { "name": "parallel0", "type": "child<chardev-vc>" },
#                      { "name": "serial0", "type": "child<chardev-vc>" },
#                      { "name": "mon0", "type": "child<chardev-stdio>" } ] }
##
{ 'command': 'qom-list',
  'data': { 'path': 'str' },
  'returns': [ 'ObjectPropertyInfo' ],
  'allow-preconfig': true }

##
# @qom-get:
#
# Get a property value.
#
# @path: The path within the object model.  There are two forms of
#     supported paths--absolute and partial paths.
#
#     Absolute paths are derived from the root object and can follow
#     child<> or link<> properties.  Since they can follow link<>
#     properties, they can be arbitrarily long.  Absolute paths look
#     like absolute filenames and are prefixed with a leading slash.
#
#     Partial paths look like relative filenames.  They do not begin
#     with a prefix.  The matching rules for partial paths are subtle
#     but designed to make specifying objects easy.  At each level of
#     the composition tree, the partial path is matched as an absolute
#     path.  The first match is not returned.  At least two matches
#     are searched for.  A successful result is only returned if only
#     one match is found.  If more than one match is found, a flag is
#     return to indicate that the match was ambiguous.
#
# @property: The property name to read
#
# Returns: The property value.  The type depends on the property type.
#     child<> and link<> properties are returned as #str pathnames.
#     All integer property types (u8, u16, etc) are returned as #int.
#
# Since: 1.2
#
# .. qmp-example::
#    :title: Use absolute path
#
#     -> { "execute": "qom-get",
#          "arguments": { "path": "/machine/unattached/device[0]",
#                         "property": "hotplugged" } }
#     <- { "return": false }
#
# .. qmp-example::
#    :title: Use partial path
#
#     -> { "execute": "qom-get",
#          "arguments": { "path": "unattached/sysbus",
#                         "property": "type" } }
#     <- { "return": "System" }
##
{ 'command': 'qom-get',
  'data': { 'path': 'str', 'property': 'str' },
  'returns': 'any',
  'allow-preconfig': true }

##
# @qom-list-get:
#
# List properties and their values for each object path in the input
# list.
#
# @paths: The absolute or partial path for each object, as described
#     in `qom-get`.
#
# Errors:
#     - If any path is not valid or is ambiguous
#
# Returns: A list where each element is the result for the
#     corresponding element of @paths.
#
# Since 10.1
##
{ 'command': 'qom-list-get',
  'data': { 'paths': [ 'str' ] },
  'returns': [ 'ObjectPropertiesValues' ],
  'allow-preconfig': true }

##
# @qom-set:
#
# Set a property value.
#
# @path: see `qom-get` for a description of this parameter
#
# @property: the property name to set
#
# @value: a value who's type is appropriate for the property type.
#     See `qom-get` for a description of type mapping.
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "qom-set",
#          "arguments": { "path": "/machine",
#                         "property": "graphics",
#                         "value": false } }
#     <- { "return": {} }
##
{ 'command': 'qom-set',
  'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
  'allow-preconfig': true }

##
# @ObjectTypeInfo:
#
# This structure describes a search result from `qom-list-types`
#
# @name: the type name found in the search
#
# @abstract: the type is abstract and can't be directly instantiated.
#     Omitted if false.  (since 2.10)
#
# @parent: Name of parent type, if any (since 2.10)
#
# Since: 1.1
##
{ 'struct': 'ObjectTypeInfo',
  'data': { 'name': 'str', '*abstract': 'bool', '*parent': 'str' } }

##
# @qom-list-types:
#
# Return a list of types given search parameters.
#
# @implements: if specified, only return types that implement this
#     type name
#
# @abstract: if true, include abstract types in the results
#
# Returns: a list of types, or an empty list if no results are found
#
# Since: 1.1
##
{ 'command': 'qom-list-types',
  'data': { '*implements': 'str', '*abstract': 'bool' },
  'returns': [ 'ObjectTypeInfo' ],
  'allow-preconfig': true }

##
# @qom-list-properties:
#
# List properties associated with a QOM object.
#
# @typename: the type name of an object
#
# .. note:: Objects can create properties at runtime, for example to
#    describe links between different devices and/or objects.  These
#    properties are not included in the output of this command.
#
# Returns: a list describing object properties
#
# Since: 2.12
##
{ 'command': 'qom-list-properties',
  'data': { 'typename': 'str'},
  'returns': [ 'ObjectPropertyInfo' ],
  'allow-preconfig': true }

##
# @CanHostSocketcanProperties:
#
# Properties for can-host-socketcan objects.
#
# @if: interface name of the host system CAN bus to connect to
#
# @canbus: object ID of the can-bus object to connect to the host
#     interface
#
# Since: 2.12
##
{ 'struct': 'CanHostSocketcanProperties',
  'data': { 'if': 'str',
            'canbus': 'str' },
  'if': 'CONFIG_LINUX' }

##
# @ColoCompareProperties:
#
# Properties for colo-compare objects.
#
# @primary_in: name of the character device backend to use for the
#     primary input (incoming packets are redirected to @outdev)
#
# @secondary_in: name of the character device backend to use for
#     secondary input (incoming packets are only compared to the input
#     on @primary_in and then dropped)
#
# @outdev: name of the character device backend to use for output
#
# @iothread: name of the iothread to run in
#
# @notify_dev: name of the character device backend to be used to
#     communicate with the remote colo-frame (only for Xen COLO)
#
# @compare_timeout: the maximum time to hold a packet from @primary_in
#     for comparison with an incoming packet on @secondary_in in
#     milliseconds (default: 3000)
#
# @expired_scan_cycle: the interval at which colo-compare checks
#     whether packets from @primary have timed out, in milliseconds
#     (default: 3000)
#
# @max_queue_size: the maximum number of packets to keep in the queue
#     for comparing with incoming packets from @secondary_in.  If the
#     queue is full and additional packets are received, the
#     additional packets are dropped.  (default: 1024)
#
# @vnet_hdr_support: if true, vnet header support is enabled
#     (default: false)
#
# Since: 2.8
##
{ 'struct': 'ColoCompareProperties',
  'data': { 'primary_in': 'str',
            'secondary_in': 'str',
            'outdev': 'str',
            'iothread': 'str',
            '*notify_dev': 'str',
            '*compare_timeout': 'uint64',
            '*expired_scan_cycle': 'uint32',
            '*max_queue_size': 'uint32',
            '*vnet_hdr_support': 'bool' } }

##
# @CryptodevBackendProperties:
#
# Properties for cryptodev-backend and cryptodev-backend-builtin
# objects.
#
# @queues: the number of queues for the cryptodev backend.  Ignored
#     for cryptodev-backend and must be 1 for
#     cryptodev-backend-builtin.  (default: 1)
#
# @throttle-bps: limit total bytes per second (Since 8.0)
#
# @throttle-ops: limit total operations per second (Since 8.0)
#
# Since: 2.8
##
{ 'struct': 'CryptodevBackendProperties',
  'data': { '*queues': 'uint32',
            '*throttle-bps': 'uint64',
            '*throttle-ops': 'uint64' } }

##
# @CryptodevVhostUserProperties:
#
# Properties for cryptodev-vhost-user objects.
#
# @chardev: the name of a Unix domain socket character device that
#     connects to the vhost-user server
#
# Since: 2.12
##
{ 'struct': 'CryptodevVhostUserProperties',
  'base': 'CryptodevBackendProperties',
  'data': { 'chardev': 'str' },
  'if': 'CONFIG_VHOST_CRYPTO' }

##
# @DBusVMStateProperties:
#
# Properties for dbus-vmstate objects.
#
# @addr: the name of the DBus bus to connect to
#
# @id-list: a comma separated list of DBus IDs of helpers whose data
#     should be included in the VM state on migration
#
# Since: 5.0
##
{ 'struct': 'DBusVMStateProperties',
  'data': { 'addr': 'str' ,
            '*id-list': 'str' } }

##
# @NetfilterInsert:
#
# Indicates where to insert a netfilter relative to a given other
# filter.
#
# @before: insert before the specified filter
#
# @behind: insert behind the specified filter
#
# Since: 5.0
##
{ 'enum': 'NetfilterInsert',
  'data': [ 'before', 'behind' ] }

##
# @NetfilterProperties:
#
# Properties for objects of classes derived from netfilter.
#
# @netdev: id of the network device backend to filter
#
# @queue: indicates which queue(s) to filter (default: all)
#
# @status: indicates whether the filter is enabled ("on") or disabled
#     ("off") (default: "on")
#
# @position: specifies where the filter should be inserted in the
#     filter list.  "head" means the filter is inserted at the head of
#     the filter list, before any existing filters.  "tail" means the
#     filter is inserted at the tail of the filter list, behind any
#     existing filters (default).  "id=<id>" means the filter is
#     inserted before or behind the filter specified by <id>,
#     depending on the @insert property.  (default: "tail")
#
# @insert: where to insert the filter relative to the filter given in
#     @position.  Ignored if @position is "head" or "tail".
#     (default: behind)
#
# Since: 2.5
##
{ 'struct': 'NetfilterProperties',
  'data': { 'netdev': 'str',
            '*queue': 'NetFilterDirection',
            '*status': 'str',
            '*position': 'str',
            '*insert': 'NetfilterInsert' } }

##
# @FilterBufferProperties:
#
# Properties for filter-buffer objects.
#
# @interval: a non-zero interval in microseconds.  All packets
#     arriving in the given interval are delayed until the end of the
#     interval.
#
# Since: 2.5
##
{ 'struct': 'FilterBufferProperties',
  'base': 'NetfilterProperties',
  'data': { 'interval': 'uint32' } }

##
# @FilterDumpProperties:
#
# Properties for filter-dump objects.
#
# @file: the filename where the dumped packets should be stored
#
# @maxlen: maximum number of bytes in a packet that are stored
#     (default: 65536)
#
# Since: 2.5
##
{ 'struct': 'FilterDumpProperties',
  'base': 'NetfilterProperties',
  'data': { 'file': 'str',
            '*maxlen': 'uint32' } }

##
# @FilterMirrorProperties:
#
# Properties for filter-mirror objects.
#
# @outdev: the name of a character device backend to which all
#     incoming packets are mirrored
#
# @vnet_hdr_support: if true, vnet header support is enabled
#     (default: false)
#
# Since: 2.6
##
{ 'struct': 'FilterMirrorProperties',
  'base': 'NetfilterProperties',
  'data': { 'outdev': 'str',
            '*vnet_hdr_support': 'bool' } }

##
# @FilterRedirectorProperties:
#
# Properties for filter-redirector objects.
#
# At least one of @indev or @outdev must be present.  If both are
# present, they must not refer to the same character device backend.
#
# @indev: the name of a character device backend from which packets
#     are received and redirected to the filtered network device
#
# @outdev: the name of a character device backend to which all
#     incoming packets are redirected
#
# @vnet_hdr_support: if true, vnet header support is enabled
#     (default: false)
#
# Since: 2.6
##
{ 'struct': 'FilterRedirectorProperties',
  'base': 'NetfilterProperties',
  'data': { '*indev': 'str',
            '*outdev': 'str',
            '*vnet_hdr_support': 'bool' } }

##
# @FilterRewriterProperties:
#
# Properties for filter-rewriter objects.
#
# @vnet_hdr_support: if true, vnet header support is enabled
#     (default: false)
#
# Since: 2.8
##
{ 'struct': 'FilterRewriterProperties',
  'base': 'NetfilterProperties',
  'data': { '*vnet_hdr_support': 'bool' } }

##
# @InputBarrierProperties:
#
# Properties for input-barrier objects.
#
# @name: the screen name as declared in the screens section of
#     barrier.conf
#
# @server: hostname of the Barrier server (default: "localhost")
#
# @port: TCP port of the Barrier server (default: "24800")
#
# @x-origin: x coordinate of the leftmost pixel on the guest screen
#     (default: "0")
#
# @y-origin: y coordinate of the topmost pixel on the guest screen
#     (default: "0")
#
# @width: the width of secondary screen in pixels (default: "1920")
#
# @height: the height of secondary screen in pixels (default: "1080")
#
# Since: 4.2
##
{ 'struct': 'InputBarrierProperties',
  'data': { 'name': 'str',
            '*server': 'str',
            '*port': 'str',
            '*x-origin': 'str',
            '*y-origin': 'str',
            '*width': 'str',
            '*height': 'str' } }

##
# @InputLinuxProperties:
#
# Properties for input-linux objects.
#
# @evdev: the path of the host evdev device to use
#
# @grab_all: if true, grab is toggled for all devices (e.g. both
#     keyboard and mouse) instead of just one device (default: false)
#
# @repeat: enables auto-repeat events (default: false)
#
# @grab-toggle: the key or key combination that toggles device grab
#     (default: ctrl-ctrl)
#
# Since: 2.6
##
{ 'struct': 'InputLinuxProperties',
  'data': { 'evdev': 'str',
            '*grab_all': 'bool',
            '*repeat': 'bool',
            '*grab-toggle': 'GrabToggleKeys' },
  'if': 'CONFIG_LINUX' }

##
# @EventLoopBaseProperties:
#
# Common properties for event loops
#
# @aio-max-batch: maximum number of requests in a batch for the AIO
#     engine, 0 means that the engine will use its default.
#     (default: 0)
#
# @thread-pool-min: minimum number of threads reserved in the thread
#     pool (default:0)
#
# @thread-pool-max: maximum number of threads the thread pool can
#     contain (default:64)
#
# Since: 7.1
##
{ 'struct': 'EventLoopBaseProperties',
  'data': { '*aio-max-batch': 'int',
            '*thread-pool-min': 'int',
            '*thread-pool-max': 'int' } }

##
# @IothreadProperties:
#
# Properties for iothread objects.
#
# @poll-max-ns: the maximum number of nanoseconds to busy wait for
#     events.  0 means polling is disabled (default: 32768 on POSIX
#     hosts, 0 otherwise)
#
# @poll-grow: the multiplier used to increase the polling time when
#     the algorithm detects it is missing events due to not polling
#     long enough.  0 selects a default behaviour (default: 0)
#
# @poll-shrink: the divisor used to decrease the polling time when the
#     algorithm detects it is spending too long polling without
#     encountering events.  0 selects a default behaviour (default: 0)
#
# The @aio-max-batch option is available since 6.1.
#
# Since: 2.0
##
{ 'struct': 'IothreadProperties',
  'base': 'EventLoopBaseProperties',
  'data': { '*poll-max-ns': 'int',
            '*poll-grow': 'int',
            '*poll-shrink': 'int' } }

##
# @MainLoopProperties:
#
# Properties for the main-loop object.
#
# Since: 7.1
##
{ 'struct': 'MainLoopProperties',
  'base': 'EventLoopBaseProperties',
  'data': {} }

##
# @MemoryBackendProperties:
#
# Properties for objects of classes derived from memory-backend.
#
# @merge: if true, mark the memory as mergeable (default depends on
#     the machine type)
#
# @dump: if true, include the memory in core dumps (default depends on
#     the machine type)
#
# @host-nodes: the list of NUMA host nodes to bind the memory to
#
# @policy: the NUMA policy (default: 'default')
#
# @prealloc: if true, preallocate memory (default: false)
#
# @prealloc-threads: number of CPU threads to use for prealloc
#     (default: 1)
#
# @prealloc-context: thread context to use for creation of
#     preallocation threads (default: none) (since 7.2)
#
# @share: if false, the memory is private to QEMU; if true, it is
#     shared (default false for backends memory-backend-file and
#     memory-backend-ram, true for backends memory-backend-epc,
#     memory-backend-memfd, and memory-backend-shm)
#
# @reserve: if true, reserve swap space (or huge pages) if applicable
#     (default: true) (since 6.1)
#
# @size: size of the memory region in bytes
#
# @x-use-canonical-path-for-ramblock-id: if true, the canonical path
#     is used for ramblock-id.  Disable this for 4.0 machine types or
#     older to allow migration with newer QEMU versions.
#     (default: false generally, but true for machine types <= 4.0)
#
# .. note:: prealloc=true and reserve=false cannot be set at the same
#    time.  With reserve=true, the behavior depends on the operating
#    system: for example, Linux will not reserve swap space for shared
#    file mappings -- "not applicable".  In contrast, reserve=false
#    will bail out if it cannot be configured accordingly.
#
# Since: 2.1
##
{ 'struct': 'MemoryBackendProperties',
  'data': { '*dump': 'bool',
            '*host-nodes': ['uint16'],
            '*merge': 'bool',
            '*policy': 'HostMemPolicy',
            '*prealloc': 'bool',
            '*prealloc-threads': 'uint32',
            '*prealloc-context': 'str',
            '*share': 'bool',
            '*reserve': 'bool',
            'size': 'size',
            '*x-use-canonical-path-for-ramblock-id': 'bool' } }

##
# @MemoryBackendFileProperties:
#
# Properties for memory-backend-file objects.
#
# @align: the base address alignment when QEMU mmap(2)s @mem-path.
#     Some backend stores specified by @mem-path require an alignment
#     different than the default one used by QEMU, e.g. the device DAX
#     /dev/dax0.0 requires 2M alignment rather than 4K.  In such
#     cases, users can specify the required alignment via this option.
#     0 selects a default alignment (currently the page size).
#     (default: 0)
#
# @offset: the offset into the target file that the region starts at.
#     You can use this option to back multiple regions with a single
#     file.  Must be a multiple of the page size.
#     (default: 0) (since 8.1)
#
# @discard-data: if true, the file contents can be destroyed when QEMU
#     exits, to avoid unnecessarily flushing data to the backing file.
#     Note that @discard-data is only an optimization, and QEMU might
#     not discard file contents if it aborts unexpectedly or is
#     terminated using SIGKILL.  (default: false)
#
# @mem-path: the path to either a shared memory or huge page
#     filesystem mount
#
# @pmem: specifies whether the backing file specified by @mem-path is
#     in host persistent memory that can be accessed using the SNIA
#     NVM programming model (e.g. Intel NVDIMM).
#
# @readonly: if true, the backing file is opened read-only; if false,
#     it is opened read-write.  (default: false)
#
# @rom: whether to create Read Only Memory (ROM) that cannot be
#     modified by the VM.  Any write attempts to such ROM will be
#     denied.  Most use cases want writable RAM instead of ROM.
#     However, selected use cases, like R/O NVDIMMs, can benefit from
#     ROM.  If set to 'on', create ROM; if set to 'off', create
#     writable RAM; if set to 'auto', the value of the @readonly
#     property is used.  This property is primarily helpful when we
#     want to have proper RAM in configurations that would
#     traditionally create ROM before this property was introduced: VM
#     templating, where we want to open a file readonly (@readonly set
#     to true) and mark the memory to be private for QEMU (@share set
#     to false).  For this use case, we need writable RAM instead of
#     ROM, and want to set this property to 'off'.  (default: auto,
#     since 8.2)
#
# Since: 2.1
##
{ 'struct': 'MemoryBackendFileProperties',
  'base': 'MemoryBackendProperties',
  'data': { '*align': 'size',
            '*offset': 'size',
            '*discard-data': 'bool',
            'mem-path': 'str',
            '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
            '*readonly': 'bool',
            '*rom': 'OnOffAuto' } }

##
# @MemoryBackendMemfdProperties:
#
# Properties for memory-backend-memfd objects.
#
# @hugetlb: if true, the file to be created resides in the hugetlbfs
#     filesystem (default: false)
#
# @hugetlbsize: the hugetlb page size on systems that support multiple
#     hugetlb page sizes (it must be a power of 2 value supported by
#     the system).  0 selects a default page size.  This option is
#     ignored if @hugetlb is false.  (default: 0)
#
# @seal: if true, create a sealed-file, which will block further
#     resizing of the memory (default: true)
#
# Since: 2.12
##
{ 'struct': 'MemoryBackendMemfdProperties',
  'base': 'MemoryBackendProperties',
  'data': { '*hugetlb': 'bool',
            '*hugetlbsize': 'size',
            '*seal': 'bool' },
  'if': 'CONFIG_LINUX' }

##
# @MemoryBackendShmProperties:
#
# Properties for memory-backend-shm objects.
#
# This memory backend supports only shared memory, which is the
# default.
#
# Since: 9.1
##
{ 'struct': 'MemoryBackendShmProperties',
  'base': 'MemoryBackendProperties',
  'data': { },
  'if': 'CONFIG_POSIX' }

##
# @MemoryBackendEpcProperties:
#
# Properties for memory-backend-epc objects.
#
# The @merge boolean option is false by default with epc
#
# The @dump boolean option is false by default with epc
#
# Since: 6.2
##
{ 'struct': 'MemoryBackendEpcProperties',
  'base': 'MemoryBackendProperties',
  'data': {},
  'if': 'CONFIG_LINUX' }

##
# @PrManagerHelperProperties:
#
# Properties for pr-manager-helper objects.
#
# @path: the path to a Unix domain socket for connecting to the
#     external helper
#
# Since: 2.11
##
{ 'struct': 'PrManagerHelperProperties',
  'data': { 'path': 'str' },
  'if': 'CONFIG_LINUX' }

##
# @QtestProperties:
#
# Properties for qtest objects.
#
# @chardev: the chardev to be used to receive qtest commands on.
#
# @log: the path to a log file
#
# Since: 6.0
##
{ 'struct': 'QtestProperties',
        'data': { 'chardev': 'str',
                  '*log': 'str' } }

##
# @RemoteObjectProperties:
#
# Properties for x-remote-object objects.
#
# @fd: file descriptor name previously passed via `getfd` command
#
# @devid: the id of the device to be associated with the file
#     descriptor
#
# Since: 6.0
##
{ 'struct': 'RemoteObjectProperties',
  'data': { 'fd': 'str', 'devid': 'str' } }

##
# @VfioUserServerProperties:
#
# Properties for x-vfio-user-server objects.
#
# @socket: socket to be used by the libvfio-user library
#
# @device: the ID of the device to be emulated at the server
#
# Since: 7.1
##
{ 'struct': 'VfioUserServerProperties',
  'data': { 'socket': 'SocketAddress', 'device': 'str' } }

##
# @IOMMUFDProperties:
#
# Properties for iommufd objects.
#
# @fd: file descriptor name previously passed via `getfd` command,
#     which represents a pre-opened /dev/iommu.  This allows the
#     iommufd object to be shared across several subsystems (VFIO,
#     VDPA, ...), and the file descriptor to be shared with other
#     process, e.g. DPDK.  (default: QEMU opens /dev/iommu by itself)
#
# Since: 9.0
##
{ 'struct': 'IOMMUFDProperties',
  'data': { '*fd': 'str' } }

##
# @AcpiGenericInitiatorProperties:
#
# Properties for acpi-generic-initiator objects.
#
# @pci-dev: PCI device ID to be associated with the node
#
# @node: NUMA node associated with the PCI device
#
# Since: 9.0
##
{ 'struct': 'AcpiGenericInitiatorProperties',
  'data': { 'pci-dev': 'str',
            'node': 'uint32' } }

##
# @AcpiGenericPortProperties:
#
# Properties for acpi-generic-port objects.
#
# @pci-bus: QOM path of the PCI bus of the hostbridge associated with
#     this SRAT Generic Port Affinity Structure.  This is the same as
#     the bus parameter for the root ports attached to this host
#     bridge.  The resulting SRAT Generic Port Affinity Structure will
#     refer to the ACPI object in DSDT that represents the host bridge
#     (e.g.  ACPI0016 for CXL host bridges).  See ACPI 6.5 Section
#     5.2.16.7 for more information.
#
# @node: Similar to a NUMA node ID, but instead of providing a
#     reference point used for defining NUMA distances and access
#     characteristics to memory or from an initiator (e.g. CPU), this
#     node defines the boundary point between non-discoverable system
#     buses which must be described by firmware, and a discoverable
#     bus.  NUMA distances and access characteristics are defined to
#     and from that point.  For system software to establish full
#     initiator to target characteristics this information must be
#     combined with information retrieved from the discoverable part
#     of the path.  An example would use CDAT (see UEFI.org)
#     information read from devices and switches in conjunction with
#     link characteristics read from PCIe Configuration space.  To get
#     the full path latency from CPU to CXL attached DRAM CXL device:
#     Add the latency from CPU to Generic Port (from HMAT indexed via
#     the node ID in this SRAT structure) to that for CXL bus links,
#     the latency across intermediate switches and from the EP port to
#     the actual memory.  Bandwidth is more complex as there may be
#     interleaving across multiple devices and shared links in the
#     path.
#
# Since: 9.2
##
{ 'struct': 'AcpiGenericPortProperties',
  'data': { 'pci-bus': 'str',
            'node': 'uint32' } }

##
# @RngProperties:
#
# Properties for objects of classes derived from rng.
#
# @opened: if true, the device is opened immediately when applying
#     this option and will probably fail when processing the next
#     option.  Don't use; only provided for compatibility.
#     (default: false)
#
# Features:
#
# @deprecated: Member @opened is deprecated.  Setting true doesn't
#     make sense, and false is already the default.
#
# Since: 1.3
##
{ 'struct': 'RngProperties',
  'data': { '*opened': { 'type': 'bool', 'features': ['deprecated'] } } }

##
# @RngEgdProperties:
#
# Properties for rng-egd objects.
#
# @chardev: the name of a character device backend that provides the
#     connection to the RNG daemon
#
# Since: 1.3
##
{ 'struct': 'RngEgdProperties',
  'base': 'RngProperties',
  'data': { 'chardev': 'str' } }

##
# @RngRandomProperties:
#
# Properties for rng-random objects.
#
# @filename: the filename of the device on the host to obtain entropy
#     from (default: "/dev/urandom")
#
# Since: 1.3
##
{ 'struct': 'RngRandomProperties',
  'base': 'RngProperties',
  'data': { '*filename': 'str' },
  'if': 'CONFIG_POSIX' }

##
# @IgvmCfgProperties:
#
# Properties common to objects that handle IGVM files.
#
# @file: IGVM file to use to configure guest
#
# Since: 10.1
##
{ 'struct': 'IgvmCfgProperties',
  'if': 'CONFIG_IGVM',
  'data': { 'file': 'str' } }

##
# @SevCommonProperties:
#
# Properties common to objects that are derivatives of sev-common.
#
# @sev-device: SEV device to use (default: "/dev/sev")
#
# @cbitpos: C-bit location in page table entry (default: 0)
#
# @reduced-phys-bits: number of bits in physical addresses that become
#     unavailable when SEV is enabled
#
# @kernel-hashes: if true, add hashes of kernel/initrd/cmdline to a
#     designated guest firmware page for measured boot with -kernel
#     (default: false) (since 6.2)
#
# Features:
#
# @confidential-guest-reset: If present, the hypervisor supports
#     confidential guest resets (since 11.0).
#
# Since: 9.1
##
{ 'struct': 'SevCommonProperties',
  'data': { '*sev-device': 'str',
            '*cbitpos': 'uint32',
            'reduced-phys-bits': 'uint32',
            '*kernel-hashes': 'bool' },
  'features': ['confidential-guest-reset']}

##
# @SevGuestProperties:
#
# Properties for sev-guest objects.
#
# @dh-cert-file: guest owners DH certificate (encoded with base64)
#
# @session-file: guest owners session parameters (encoded with base64)
#
# @policy: SEV policy value (default: 0x1)
#
# @handle: SEV firmware handle (default: 0)
#
# @legacy-vm-type: Use legacy KVM_SEV_INIT KVM interface for creating
#    the VM.  The newer KVM_SEV_INIT2 interface, from Linux >= 6.10,
#    syncs additional vCPU state when initializing the VMSA
#    structures, which will result in a different guest measurement.
#    Set this to 'on' to force compatibility with older QEMU or kernel
#    versions that rely on legacy KVM_SEV_INIT behavior.  'auto' will
#    behave identically to 'on', but will automatically switch to
#    using KVM_SEV_INIT2 if the user specifies any additional options
#    that require it.  If set to 'off', QEMU will require
#    KVM_SEV_INIT2 unconditionally.  (default: off) (since 9.1)
#
# Since: 2.12
##
{ 'struct': 'SevGuestProperties',
  'base': 'SevCommonProperties',
  'data': { '*dh-cert-file': 'str',
            '*session-file': 'str',
            '*policy': 'uint32',
            '*handle': 'uint32',
            '*legacy-vm-type': 'OnOffAuto' } }

##
# @SevSnpGuestProperties:
#
# Properties for sev-snp-guest objects.  Most of these are direct
# arguments for the KVM_SNP_* interfaces documented in the Linux
# kernel source under
# Documentation/arch/x86/amd-memory-encryption.rst, which are in turn
# closely coupled with the SNP_INIT/SNP_LAUNCH_* firmware commands
# documented in the SEV-SNP Firmware ABI Specification (Rev 0.9).
#
# More usage information is also available in the QEMU source tree
# under docs/amd-memory-encryption.
#
# @policy: the 'POLICY' parameter to the SNP_LAUNCH_START command, as
#     defined in the SEV-SNP firmware ABI (default: 0x30000)
#
# @guest-visible-workarounds: 16-byte, base64-encoded blob to report
#     hypervisor-defined workarounds, corresponding to the 'GOSVW'
#     parameter of the SNP_LAUNCH_START command defined in the SEV-SNP
#     firmware ABI (default: all-zero)
#
# @id-block: 96-byte, base64-encoded blob to provide the 'ID Block'
#     structure for the SNP_LAUNCH_FINISH command defined in the
#     SEV-SNP firmware ABI (default: all-zero)
#
# @id-auth: 4096-byte, base64-encoded blob to provide the 'ID
#     Authentication Information Structure' for the SNP_LAUNCH_FINISH
#     command defined in the SEV-SNP firmware ABI (default: all-zero)
#
# @author-key-enabled: true if 'id-auth' blob contains the
#     'AUTHOR_KEY' field defined SEV-SNP firmware ABI (default: false)
#
# @host-data: 32-byte, base64-encoded, user-defined blob to provide to
#     the guest, as documented for the 'HOST_DATA' parameter of the
#     SNP_LAUNCH_FINISH command in the SEV-SNP firmware ABI (default:
#     all-zero)
#
# @vcek-disabled: Guests are by default allowed to choose between VLEK
#     (Versioned Loaded Endorsement Key) or VCEK (Versioned Chip
#     Endorsement Key) when requesting attestation reports from
#     firmware.  Set this to true to disable the use of VCEK.
#     (default: false) (since: 9.1)
#
# Since: 9.1
##
{ 'struct': 'SevSnpGuestProperties',
  'base': 'SevCommonProperties',
  'data': {
            '*policy': 'uint64',
            '*guest-visible-workarounds': 'str',
            '*id-block': 'str',
            '*id-auth': 'str',
            '*author-key-enabled': 'bool',
            '*host-data': 'str',
            '*vcek-disabled': 'bool' } }

##
# @TdxGuestProperties:
#
# Properties for tdx-guest objects.
#
# @attributes: The 'attributes' of a TD guest that is passed to
#     KVM_TDX_INIT_VM
#
# @sept-ve-disable: toggle bit 28 of TD attributes to control
#     disabling of EPT violation conversion to #VE on guest TD access
#     of PENDING pages.  Some guest OS (e.g., Linux TD guest) may
#     require this to be set, otherwise they refuse to boot.
#
# @mrconfigid: ID for non-owner-defined configuration of the guest TD,
#     e.g., run-time or OS configuration (base64 encoded SHA384
#     digest).  Defaults to all zeros.
#
# @mrowner: ID for the guest TD’s owner (base64 encoded SHA384
#     digest).  Defaults to all zeros.
#
# @mrownerconfig: ID for owner-defined configuration of the guest TD,
#     e.g., specific to the workload rather than the run-time or OS
#     (base64 encoded SHA384 digest).  Defaults to all zeros.
#
# @quote-generation-socket: socket address for Quote Generation
#     Service (QGS).  QGS is a daemon running on the host.  Without
#     it, the guest will not be able to get a TD quote for
#     attestation.
#
# Features:
#
# @confidential-guest-reset: If present, the hypervisor supports
#     confidential guest resets (since 11.0).
#
# Since: 10.1
##
{ 'struct': 'TdxGuestProperties',
  'data': { '*attributes': 'uint64',
            '*sept-ve-disable': 'bool',
            '*mrconfigid': 'str',
            '*mrowner': 'str',
            '*mrownerconfig': 'str',
            '*quote-generation-socket': 'SocketAddress' },
   'features': ['confidential-guest-reset']}

##
# @ThreadContextProperties:
#
# Properties for thread context objects.
#
# @cpu-affinity: the list of host CPU numbers used as CPU affinity for
#     all threads created in the thread context (default: QEMU main
#     thread CPU affinity)
#
# @node-affinity: the list of host node numbers that will be resolved
#     to a list of host CPU numbers used as CPU affinity.  This is a
#     shortcut for specifying the list of host CPU numbers belonging
#     to the host nodes manually by setting @cpu-affinity.
#     (default: QEMU main thread affinity)
#
# Since: 7.2
##
{ 'struct': 'ThreadContextProperties',
  'data': { '*cpu-affinity': ['uint16'],
            '*node-affinity': ['uint16'] } }

##
# @ObjectType:
#
# Features:
#
# @unstable: Members @x-remote-object and @x-vfio-user-server are
#     experimental.
#
# Since: 6.0
##
{ 'enum': 'ObjectType',
  'data': [
    'acpi-generic-initiator',
    'acpi-generic-port',
    'authz-list',
    'authz-listfile',
    'authz-pam',
    'authz-simple',
    'can-bus',
    { 'name': 'can-host-socketcan',
      'if': 'CONFIG_LINUX' },
    'colo-compare',
    'cryptodev-backend',
    'cryptodev-backend-builtin',
    'cryptodev-backend-lkcf',
    { 'name': 'cryptodev-vhost-user',
      'if': 'CONFIG_VHOST_CRYPTO' },
    'dbus-vmstate',
    'filter-buffer',
    'filter-dump',
    'filter-mirror',
    'filter-redirector',
    'filter-replay',
    'filter-rewriter',
    { 'name': 'igvm-cfg',
      'if': 'CONFIG_IGVM' },
    'input-barrier',
    { 'name': 'input-linux',
      'if': 'CONFIG_LINUX' },
    'iommufd',
    'iothread',
    'main-loop',
    { 'name': 'memory-backend-epc',
      'if': 'CONFIG_LINUX' },
    'memory-backend-file',
    { 'name': 'memory-backend-memfd',
      'if': 'CONFIG_LINUX' },
    'memory-backend-ram',
    { 'name': 'memory-backend-shm',
      'if': 'CONFIG_POSIX' },
    'pef-guest',
    { 'name': 'pr-manager-helper',
      'if': 'CONFIG_LINUX' },
    'qtest',
    'rng-builtin',
    'rng-egd',
    { 'name': 'rng-random',
      'if': 'CONFIG_POSIX' },
    'secret',
    { 'name': 'secret_keyring',
      'if': 'CONFIG_SECRET_KEYRING' },
    'sev-guest',
    'sev-snp-guest',
    'thread-context',
    's390-pv-guest',
    'tdx-guest',
    'throttle-group',
    'tls-creds-anon',
    'tls-creds-psk',
    'tls-creds-x509',
    'tls-cipher-suites',
    { 'name': 'x-remote-object', 'features': [ 'unstable' ] },
    { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] }
  ] }

##
# @ObjectOptions:
#
# Describes the options of a user creatable QOM object.
#
# @qom-type: the class name for the object to be created
#
# @id: the name of the new object
#
# Since: 6.0
##
{ 'union': 'ObjectOptions',
  'base': { 'qom-type': 'ObjectType',
            'id': 'str' },
  'discriminator': 'qom-type',
  'data': {
      'acpi-generic-initiator':     'AcpiGenericInitiatorProperties',
      'acpi-generic-port':          'AcpiGenericPortProperties',
      'authz-list':                 'AuthZListProperties',
      'authz-listfile':             'AuthZListFileProperties',
      'authz-pam':                  'AuthZPAMProperties',
      'authz-simple':               'AuthZSimpleProperties',
      'can-host-socketcan':         { 'type': 'CanHostSocketcanProperties',
                                      'if': 'CONFIG_LINUX' },
      'colo-compare':               'ColoCompareProperties',
      'cryptodev-backend':          'CryptodevBackendProperties',
      'cryptodev-backend-builtin':  'CryptodevBackendProperties',
      'cryptodev-backend-lkcf':     'CryptodevBackendProperties',
      'cryptodev-vhost-user':       { 'type': 'CryptodevVhostUserProperties',
                                      'if': 'CONFIG_VHOST_CRYPTO' },
      'dbus-vmstate':               'DBusVMStateProperties',
      'filter-buffer':              'FilterBufferProperties',
      'filter-dump':                'FilterDumpProperties',
      'filter-mirror':              'FilterMirrorProperties',
      'filter-redirector':          'FilterRedirectorProperties',
      'filter-replay':              'NetfilterProperties',
      'filter-rewriter':            'FilterRewriterProperties',
      'igvm-cfg':                   { 'type': 'IgvmCfgProperties',
                                      'if': 'CONFIG_IGVM' },
      'input-barrier':              'InputBarrierProperties',
      'input-linux':                { 'type': 'InputLinuxProperties',
                                      'if': 'CONFIG_LINUX' },
      'iommufd':                    'IOMMUFDProperties',
      'iothread':                   'IothreadProperties',
      'main-loop':                  'MainLoopProperties',
      'memory-backend-epc':         { 'type': 'MemoryBackendEpcProperties',
                                      'if': 'CONFIG_LINUX' },
      'memory-backend-file':        'MemoryBackendFileProperties',
      'memory-backend-memfd':       { 'type': 'MemoryBackendMemfdProperties',
                                      'if': 'CONFIG_LINUX' },
      'memory-backend-ram':         'MemoryBackendProperties',
      'memory-backend-shm':         { 'type': 'MemoryBackendShmProperties',
                                      'if': 'CONFIG_POSIX' },
      'pr-manager-helper':          { 'type': 'PrManagerHelperProperties',
                                      'if': 'CONFIG_LINUX' },
      'qtest':                      'QtestProperties',
      'rng-builtin':                'RngProperties',
      'rng-egd':                    'RngEgdProperties',
      'rng-random':                 { 'type': 'RngRandomProperties',
                                      'if': 'CONFIG_POSIX' },
      'secret':                     'SecretProperties',
      'secret_keyring':             { 'type': 'SecretKeyringProperties',
                                      'if': 'CONFIG_SECRET_KEYRING' },
      'sev-guest':                  'SevGuestProperties',
      'sev-snp-guest':              'SevSnpGuestProperties',
      'tdx-guest':                  'TdxGuestProperties',
      'thread-context':             'ThreadContextProperties',
      'throttle-group':             'ThrottleGroupProperties',
      'tls-creds-anon':             'TlsCredsAnonProperties',
      'tls-creds-psk':              'TlsCredsPskProperties',
      'tls-creds-x509':             'TlsCredsX509Properties',
      'tls-cipher-suites':          'TlsCredsProperties',
      'x-remote-object':            'RemoteObjectProperties',
      'x-vfio-user-server':         'VfioUserServerProperties'
  } }

##
# @object-add:
#
# Create a QOM object.
#
# Errors:
#     - If @qom-type is not a valid class name
#
# Since: 2.0
#
# .. qmp-example::
#
#     -> { "execute": "object-add",
#          "arguments": { "qom-type": "rng-random", "id": "rng1",
#                         "filename": "/dev/hwrng" } }
#     <- { "return": {} }
##
{ 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true,
  'allow-preconfig': true }

##
# @object-del:
#
# Remove a QOM object.
#
# @id: the name of the QOM object to remove
#
# Errors:
#     - If @id is not a valid id for a QOM object
#
# Since: 2.0
#
# .. qmp-example::
#
#     -> { "execute": "object-del", "arguments": { "id": "rng1" } }
#     <- { "return": {} }
##
{ 'command': 'object-del', 'data': {'id': 'str'},
  'allow-preconfig': true }
