cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

qom.json (30491B)


      1# -*- Mode: Python -*-
      2# vim: filetype=python
      3#
      4# This work is licensed under the terms of the GNU GPL, version 2 or later.
      5# See the COPYING file in the top-level directory.
      6
      7{ 'include': 'authz.json' }
      8{ 'include': 'block-core.json' }
      9{ 'include': 'common.json' }
     10{ 'include': 'crypto.json' }
     11
     12##
     13# = QEMU Object Model (QOM)
     14##
     15
     16##
     17# @ObjectPropertyInfo:
     18#
     19# @name: the name of the property
     20#
     21# @type: the type of the property.  This will typically come in one of four
     22#        forms:
     23#
     24#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
     25#           These types are mapped to the appropriate JSON type.
     26#
     27#        2) A child type in the form 'child<subtype>' where subtype is a qdev
     28#           device type name.  Child properties create the composition tree.
     29#
     30#        3) A link type in the form 'link<subtype>' where subtype is a qdev
     31#           device type name.  Link properties form the device model graph.
     32#
     33# @description: if specified, the description of the property.
     34#
     35# @default-value: the default value, if any (since 5.0)
     36#
     37# Since: 1.2
     38##
     39{ 'struct': 'ObjectPropertyInfo',
     40  'data': { 'name': 'str',
     41            'type': 'str',
     42            '*description': 'str',
     43            '*default-value': 'any' } }
     44
     45##
     46# @qom-list:
     47#
     48# This command will list any properties of a object given a path in the object
     49# model.
     50#
     51# @path: the path within the object model.  See @qom-get for a description of
     52#        this parameter.
     53#
     54# Returns: a list of @ObjectPropertyInfo that describe the properties of the
     55#          object.
     56#
     57# Since: 1.2
     58#
     59# Example:
     60#
     61# -> { "execute": "qom-list",
     62#      "arguments": { "path": "/chardevs" } }
     63# <- { "return": [ { "name": "type", "type": "string" },
     64#                  { "name": "parallel0", "type": "child<chardev-vc>" },
     65#                  { "name": "serial0", "type": "child<chardev-vc>" },
     66#                  { "name": "mon0", "type": "child<chardev-stdio>" } ] }
     67#
     68##
     69{ 'command': 'qom-list',
     70  'data': { 'path': 'str' },
     71  'returns': [ 'ObjectPropertyInfo' ],
     72  'allow-preconfig': true }
     73
     74##
     75# @qom-get:
     76#
     77# This command will get a property from a object model path and return the
     78# value.
     79#
     80# @path: The path within the object model.  There are two forms of supported
     81#        paths--absolute and partial paths.
     82#
     83#        Absolute paths are derived from the root object and can follow child<>
     84#        or link<> properties.  Since they can follow link<> properties, they
     85#        can be arbitrarily long.  Absolute paths look like absolute filenames
     86#        and are prefixed  with a leading slash.
     87#
     88#        Partial paths look like relative filenames.  They do not begin
     89#        with a prefix.  The matching rules for partial paths are subtle but
     90#        designed to make specifying objects easy.  At each level of the
     91#        composition tree, the partial path is matched as an absolute path.
     92#        The first match is not returned.  At least two matches are searched
     93#        for.  A successful result is only returned if only one match is
     94#        found.  If more than one match is found, a flag is return to
     95#        indicate that the match was ambiguous.
     96#
     97# @property: The property name to read
     98#
     99# Returns: The property value.  The type depends on the property
    100#          type. child<> and link<> properties are returned as #str
    101#          pathnames.  All integer property types (u8, u16, etc) are
    102#          returned as #int.
    103#
    104# Since: 1.2
    105#
    106# Example:
    107#
    108# 1. Use absolute path
    109#
    110# -> { "execute": "qom-get",
    111#      "arguments": { "path": "/machine/unattached/device[0]",
    112#                     "property": "hotplugged" } }
    113# <- { "return": false }
    114#
    115# 2. Use partial path
    116#
    117# -> { "execute": "qom-get",
    118#      "arguments": { "path": "unattached/sysbus",
    119#                     "property": "type" } }
    120# <- { "return": "System" }
    121#
    122##
    123{ 'command': 'qom-get',
    124  'data': { 'path': 'str', 'property': 'str' },
    125  'returns': 'any',
    126  'allow-preconfig': true }
    127
    128##
    129# @qom-set:
    130#
    131# This command will set a property from a object model path.
    132#
    133# @path: see @qom-get for a description of this parameter
    134#
    135# @property: the property name to set
    136#
    137# @value: a value who's type is appropriate for the property type.  See @qom-get
    138#         for a description of type mapping.
    139#
    140# Since: 1.2
    141#
    142# Example:
    143#
    144# -> { "execute": "qom-set",
    145#      "arguments": { "path": "/machine",
    146#                     "property": "graphics",
    147#                     "value": false } }
    148# <- { "return": {} }
    149#
    150##
    151{ 'command': 'qom-set',
    152  'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
    153  'allow-preconfig': true }
    154
    155##
    156# @ObjectTypeInfo:
    157#
    158# This structure describes a search result from @qom-list-types
    159#
    160# @name: the type name found in the search
    161#
    162# @abstract: the type is abstract and can't be directly instantiated.
    163#            Omitted if false. (since 2.10)
    164#
    165# @parent: Name of parent type, if any (since 2.10)
    166#
    167# Since: 1.1
    168##
    169{ 'struct': 'ObjectTypeInfo',
    170  'data': { 'name': 'str', '*abstract': 'bool', '*parent': 'str' } }
    171
    172##
    173# @qom-list-types:
    174#
    175# This command will return a list of types given search parameters
    176#
    177# @implements: if specified, only return types that implement this type name
    178#
    179# @abstract: if true, include abstract types in the results
    180#
    181# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
    182#
    183# Since: 1.1
    184##
    185{ 'command': 'qom-list-types',
    186  'data': { '*implements': 'str', '*abstract': 'bool' },
    187  'returns': [ 'ObjectTypeInfo' ],
    188  'allow-preconfig': true }
    189
    190##
    191# @qom-list-properties:
    192#
    193# List properties associated with a QOM object.
    194#
    195# @typename: the type name of an object
    196#
    197# Note: objects can create properties at runtime, for example to describe
    198#       links between different devices and/or objects. These properties
    199#       are not included in the output of this command.
    200#
    201# Returns: a list of ObjectPropertyInfo describing object properties
    202#
    203# Since: 2.12
    204##
    205{ 'command': 'qom-list-properties',
    206  'data': { 'typename': 'str'},
    207  'returns': [ 'ObjectPropertyInfo' ],
    208  'allow-preconfig': true }
    209
    210##
    211# @CanHostSocketcanProperties:
    212#
    213# Properties for can-host-socketcan objects.
    214#
    215# @if: interface name of the host system CAN bus to connect to
    216#
    217# @canbus: object ID of the can-bus object to connect to the host interface
    218#
    219# Since: 2.12
    220##
    221{ 'struct': 'CanHostSocketcanProperties',
    222  'data': { 'if': 'str',
    223            'canbus': 'str' } }
    224
    225##
    226# @ColoCompareProperties:
    227#
    228# Properties for colo-compare objects.
    229#
    230# @primary_in: name of the character device backend to use for the primary
    231#              input (incoming packets are redirected to @outdev)
    232#
    233# @secondary_in: name of the character device backend to use for secondary
    234#                input (incoming packets are only compared to the input on
    235#                @primary_in and then dropped)
    236#
    237# @outdev: name of the character device backend to use for output
    238#
    239# @iothread: name of the iothread to run in
    240#
    241# @notify_dev: name of the character device backend to be used to communicate
    242#              with the remote colo-frame (only for Xen COLO)
    243#
    244# @compare_timeout: the maximum time to hold a packet from @primary_in for
    245#                   comparison with an incoming packet on @secondary_in in
    246#                   milliseconds (default: 3000)
    247#
    248# @expired_scan_cycle: the interval at which colo-compare checks whether
    249#                      packets from @primary have timed out, in milliseconds
    250#                      (default: 3000)
    251#
    252# @max_queue_size: the maximum number of packets to keep in the queue for
    253#                  comparing with incoming packets from @secondary_in.  If the
    254#                  queue is full and additional packets are received, the
    255#                  additional packets are dropped. (default: 1024)
    256#
    257# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    258#
    259# Since: 2.8
    260##
    261{ 'struct': 'ColoCompareProperties',
    262  'data': { 'primary_in': 'str',
    263            'secondary_in': 'str',
    264            'outdev': 'str',
    265            'iothread': 'str',
    266            '*notify_dev': 'str',
    267            '*compare_timeout': 'uint64',
    268            '*expired_scan_cycle': 'uint32',
    269            '*max_queue_size': 'uint32',
    270            '*vnet_hdr_support': 'bool' } }
    271
    272##
    273# @CryptodevBackendProperties:
    274#
    275# Properties for cryptodev-backend and cryptodev-backend-builtin objects.
    276#
    277# @queues: the number of queues for the cryptodev backend. Ignored for
    278#          cryptodev-backend and must be 1 for cryptodev-backend-builtin.
    279#          (default: 1)
    280#
    281# Since: 2.8
    282##
    283{ 'struct': 'CryptodevBackendProperties',
    284  'data': { '*queues': 'uint32' } }
    285
    286##
    287# @CryptodevVhostUserProperties:
    288#
    289# Properties for cryptodev-vhost-user objects.
    290#
    291# @chardev: the name of a Unix domain socket character device that connects to
    292#           the vhost-user server
    293#
    294# Since: 2.12
    295##
    296{ 'struct': 'CryptodevVhostUserProperties',
    297  'base': 'CryptodevBackendProperties',
    298  'data': { 'chardev': 'str' } }
    299
    300##
    301# @DBusVMStateProperties:
    302#
    303# Properties for dbus-vmstate objects.
    304#
    305# @addr: the name of the DBus bus to connect to
    306#
    307# @id-list: a comma separated list of DBus IDs of helpers whose data should be
    308#           included in the VM state on migration
    309#
    310# Since: 5.0
    311##
    312{ 'struct': 'DBusVMStateProperties',
    313  'data': { 'addr': 'str' ,
    314            '*id-list': 'str' } }
    315
    316##
    317# @NetfilterInsert:
    318#
    319# Indicates where to insert a netfilter relative to a given other filter.
    320#
    321# @before: insert before the specified filter
    322#
    323# @behind: insert behind the specified filter
    324#
    325# Since: 5.0
    326##
    327{ 'enum': 'NetfilterInsert',
    328  'data': [ 'before', 'behind' ] }
    329
    330##
    331# @NetfilterProperties:
    332#
    333# Properties for objects of classes derived from netfilter.
    334#
    335# @netdev: id of the network device backend to filter
    336#
    337# @queue: indicates which queue(s) to filter (default: all)
    338#
    339# @status: indicates whether the filter is enabled ("on") or disabled ("off")
    340#          (default: "on")
    341#
    342# @position: specifies where the filter should be inserted in the filter list.
    343#            "head" means the filter is inserted at the head of the filter list,
    344#            before any existing filters.
    345#            "tail" means the filter is inserted at the tail of the filter list,
    346#            behind any existing filters (default).
    347#            "id=<id>" means the filter is inserted before or behind the filter
    348#            specified by <id>, depending on the @insert property.
    349#            (default: "tail")
    350#
    351# @insert: where to insert the filter relative to the filter given in @position.
    352#          Ignored if @position is "head" or "tail". (default: behind)
    353#
    354# Since: 2.5
    355##
    356{ 'struct': 'NetfilterProperties',
    357  'data': { 'netdev': 'str',
    358            '*queue': 'NetFilterDirection',
    359            '*status': 'str',
    360            '*position': 'str',
    361            '*insert': 'NetfilterInsert' } }
    362
    363##
    364# @FilterBufferProperties:
    365#
    366# Properties for filter-buffer objects.
    367#
    368# @interval: a non-zero interval in microseconds.  All packets arriving in the
    369#            given interval are delayed until the end of the interval.
    370#
    371# Since: 2.5
    372##
    373{ 'struct': 'FilterBufferProperties',
    374  'base': 'NetfilterProperties',
    375  'data': { 'interval': 'uint32' } }
    376
    377##
    378# @FilterDumpProperties:
    379#
    380# Properties for filter-dump objects.
    381#
    382# @file: the filename where the dumped packets should be stored
    383#
    384# @maxlen: maximum number of bytes in a packet that are stored (default: 65536)
    385#
    386# Since: 2.5
    387##
    388{ 'struct': 'FilterDumpProperties',
    389  'base': 'NetfilterProperties',
    390  'data': { 'file': 'str',
    391            '*maxlen': 'uint32' } }
    392
    393##
    394# @FilterMirrorProperties:
    395#
    396# Properties for filter-mirror objects.
    397#
    398# @outdev: the name of a character device backend to which all incoming packets
    399#          are mirrored
    400#
    401# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    402#
    403# Since: 2.6
    404##
    405{ 'struct': 'FilterMirrorProperties',
    406  'base': 'NetfilterProperties',
    407  'data': { 'outdev': 'str',
    408            '*vnet_hdr_support': 'bool' } }
    409
    410##
    411# @FilterRedirectorProperties:
    412#
    413# Properties for filter-redirector objects.
    414#
    415# At least one of @indev or @outdev must be present.  If both are present, they
    416# must not refer to the same character device backend.
    417#
    418# @indev: the name of a character device backend from which packets are
    419#         received and redirected to the filtered network device
    420#
    421# @outdev: the name of a character device backend to which all incoming packets
    422#          are redirected
    423#
    424# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    425#
    426# Since: 2.6
    427##
    428{ 'struct': 'FilterRedirectorProperties',
    429  'base': 'NetfilterProperties',
    430  'data': { '*indev': 'str',
    431            '*outdev': 'str',
    432            '*vnet_hdr_support': 'bool' } }
    433
    434##
    435# @FilterRewriterProperties:
    436#
    437# Properties for filter-rewriter objects.
    438#
    439# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    440#
    441# Since: 2.8
    442##
    443{ 'struct': 'FilterRewriterProperties',
    444  'base': 'NetfilterProperties',
    445  'data': { '*vnet_hdr_support': 'bool' } }
    446
    447##
    448# @InputBarrierProperties:
    449#
    450# Properties for input-barrier objects.
    451#
    452# @name: the screen name as declared in the screens section of barrier.conf
    453#
    454# @server: hostname of the Barrier server (default: "localhost")
    455#
    456# @port: TCP port of the Barrier server (default: "24800")
    457#
    458# @x-origin: x coordinate of the leftmost pixel on the guest screen
    459#            (default: "0")
    460#
    461# @y-origin: y coordinate of the topmost pixel on the guest screen
    462#            (default: "0")
    463#
    464# @width: the width of secondary screen in pixels (default: "1920")
    465#
    466# @height: the height of secondary screen in pixels (default: "1080")
    467#
    468# Since: 4.2
    469##
    470{ 'struct': 'InputBarrierProperties',
    471  'data': { 'name': 'str',
    472            '*server': 'str',
    473            '*port': 'str',
    474            '*x-origin': 'str',
    475            '*y-origin': 'str',
    476            '*width': 'str',
    477            '*height': 'str' } }
    478
    479##
    480# @InputLinuxProperties:
    481#
    482# Properties for input-linux objects.
    483#
    484# @evdev: the path of the host evdev device to use
    485#
    486# @grab_all: if true, grab is toggled for all devices (e.g. both keyboard and
    487#            mouse) instead of just one device (default: false)
    488#
    489# @repeat: enables auto-repeat events (default: false)
    490#
    491# @grab-toggle: the key or key combination that toggles device grab
    492#               (default: ctrl-ctrl)
    493#
    494# Since: 2.6
    495##
    496{ 'struct': 'InputLinuxProperties',
    497  'data': { 'evdev': 'str',
    498            '*grab_all': 'bool',
    499            '*repeat': 'bool',
    500            '*grab-toggle': 'GrabToggleKeys' } }
    501
    502##
    503# @IothreadProperties:
    504#
    505# Properties for iothread objects.
    506#
    507# @poll-max-ns: the maximum number of nanoseconds to busy wait for events.
    508#               0 means polling is disabled (default: 32768 on POSIX hosts,
    509#               0 otherwise)
    510#
    511# @poll-grow: the multiplier used to increase the polling time when the
    512#             algorithm detects it is missing events due to not polling long
    513#             enough. 0 selects a default behaviour (default: 0)
    514#
    515# @poll-shrink: the divisor used to decrease the polling time when the
    516#               algorithm detects it is spending too long polling without
    517#               encountering events. 0 selects a default behaviour (default: 0)
    518#
    519# @aio-max-batch: maximum number of requests in a batch for the AIO engine,
    520#                 0 means that the engine will use its default
    521#                 (default:0, since 6.1)
    522#
    523# Since: 2.0
    524##
    525{ 'struct': 'IothreadProperties',
    526  'data': { '*poll-max-ns': 'int',
    527            '*poll-grow': 'int',
    528            '*poll-shrink': 'int',
    529            '*aio-max-batch': 'int' } }
    530
    531##
    532# @MemoryBackendProperties:
    533#
    534# Properties for objects of classes derived from memory-backend.
    535#
    536# @merge: if true, mark the memory as mergeable (default depends on the machine
    537#         type)
    538#
    539# @dump: if true, include the memory in core dumps (default depends on the
    540#        machine type)
    541#
    542# @host-nodes: the list of NUMA host nodes to bind the memory to
    543#
    544# @policy: the NUMA policy (default: 'default')
    545#
    546# @prealloc: if true, preallocate memory (default: false)
    547#
    548# @prealloc-threads: number of CPU threads to use for prealloc (default: 1)
    549#
    550# @share: if false, the memory is private to QEMU; if true, it is shared
    551#         (default: false)
    552#
    553# @reserve: if true, reserve swap space (or huge pages) if applicable
    554#           (default: true) (since 6.1)
    555#
    556# @size: size of the memory region in bytes
    557#
    558# @x-use-canonical-path-for-ramblock-id: if true, the canoncial path is used
    559#                                        for ramblock-id. Disable this for 4.0
    560#                                        machine types or older to allow
    561#                                        migration with newer QEMU versions.
    562#                                        This option is considered stable
    563#                                        despite the x- prefix. (default:
    564#                                        false generally, but true for machine
    565#                                        types <= 4.0)
    566#
    567# Note: prealloc=true and reserve=false cannot be set at the same time. With
    568#       reserve=true, the behavior depends on the operating system: for example,
    569#       Linux will not reserve swap space for shared file mappings --
    570#       "not applicable". In contrast, reserve=false will bail out if it cannot
    571#       be configured accordingly.
    572#
    573# Since: 2.1
    574##
    575{ 'struct': 'MemoryBackendProperties',
    576  'data': { '*dump': 'bool',
    577            '*host-nodes': ['uint16'],
    578            '*merge': 'bool',
    579            '*policy': 'HostMemPolicy',
    580            '*prealloc': 'bool',
    581            '*prealloc-threads': 'uint32',
    582            '*share': 'bool',
    583            '*reserve': 'bool',
    584            'size': 'size',
    585            '*x-use-canonical-path-for-ramblock-id': 'bool' } }
    586
    587##
    588# @MemoryBackendFileProperties:
    589#
    590# Properties for memory-backend-file objects.
    591#
    592# @align: the base address alignment when QEMU mmap(2)s @mem-path. Some
    593#         backend stores specified by @mem-path require an alignment different
    594#         than the default one used by QEMU, e.g. the device DAX /dev/dax0.0
    595#         requires 2M alignment rather than 4K. In such cases, users can
    596#         specify the required alignment via this option.
    597#         0 selects a default alignment (currently the page size). (default: 0)
    598#
    599# @discard-data: if true, the file contents can be destroyed when QEMU exits,
    600#                to avoid unnecessarily flushing data to the backing file. Note
    601#                that ``discard-data`` is only an optimization, and QEMU might
    602#                not discard file contents if it aborts unexpectedly or is
    603#                terminated using SIGKILL. (default: false)
    604#
    605# @mem-path: the path to either a shared memory or huge page filesystem mount
    606#
    607# @pmem: specifies whether the backing file specified by @mem-path is in
    608#        host persistent memory that can be accessed using the SNIA NVM
    609#        programming model (e.g. Intel NVDIMM).
    610#
    611# @readonly: if true, the backing file is opened read-only; if false, it is
    612#            opened read-write. (default: false)
    613#
    614# Since: 2.1
    615##
    616{ 'struct': 'MemoryBackendFileProperties',
    617  'base': 'MemoryBackendProperties',
    618  'data': { '*align': 'size',
    619            '*discard-data': 'bool',
    620            'mem-path': 'str',
    621            '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
    622            '*readonly': 'bool' } }
    623
    624##
    625# @MemoryBackendMemfdProperties:
    626#
    627# Properties for memory-backend-memfd objects.
    628#
    629# The @share boolean option is true by default with memfd.
    630#
    631# @hugetlb: if true, the file to be created resides in the hugetlbfs filesystem
    632#           (default: false)
    633#
    634# @hugetlbsize: the hugetlb page size on systems that support multiple hugetlb
    635#               page sizes (it must be a power of 2 value supported by the
    636#               system). 0 selects a default page size. This option is ignored
    637#               if @hugetlb is false. (default: 0)
    638#
    639# @seal: if true, create a sealed-file, which will block further resizing of
    640#        the memory (default: true)
    641#
    642# Since: 2.12
    643##
    644{ 'struct': 'MemoryBackendMemfdProperties',
    645  'base': 'MemoryBackendProperties',
    646  'data': { '*hugetlb': 'bool',
    647            '*hugetlbsize': 'size',
    648            '*seal': 'bool' } }
    649
    650##
    651# @MemoryBackendEpcProperties:
    652#
    653# Properties for memory-backend-epc objects.
    654#
    655# The @share boolean option is true by default with epc
    656#
    657# The @merge boolean option is false by default with epc
    658#
    659# The @dump boolean option is false by default with epc
    660#
    661# Since: 6.2
    662##
    663{ 'struct': 'MemoryBackendEpcProperties',
    664  'base': 'MemoryBackendProperties',
    665  'data': {} }
    666
    667##
    668# @PrManagerHelperProperties:
    669#
    670# Properties for pr-manager-helper objects.
    671#
    672# @path: the path to a Unix domain socket for connecting to the external helper
    673#
    674# Since: 2.11
    675##
    676{ 'struct': 'PrManagerHelperProperties',
    677  'data': { 'path': 'str' } }
    678
    679##
    680# @QtestProperties:
    681#
    682# Properties for qtest objects.
    683#
    684# @chardev: the chardev to be used to receive qtest commands on.
    685#
    686# @log: the path to a log file
    687#
    688# Since: 6.0
    689##
    690{ 'struct': 'QtestProperties',
    691        'data': { 'chardev': 'str',
    692                  '*log': 'str' } }
    693
    694##
    695# @RemoteObjectProperties:
    696#
    697# Properties for x-remote-object objects.
    698#
    699# @fd: file descriptor name previously passed via 'getfd' command
    700#
    701# @devid: the id of the device to be associated with the file descriptor
    702#
    703# Since: 6.0
    704##
    705{ 'struct': 'RemoteObjectProperties',
    706  'data': { 'fd': 'str', 'devid': 'str' } }
    707
    708##
    709# @RngProperties:
    710#
    711# Properties for objects of classes derived from rng.
    712#
    713# @opened: if true, the device is opened immediately when applying this option
    714#          and will probably fail when processing the next option. Don't use;
    715#          only provided for compatibility. (default: false)
    716#
    717# Features:
    718# @deprecated: Member @opened is deprecated.  Setting true doesn't make sense,
    719#              and false is already the default.
    720#
    721# Since: 1.3
    722##
    723{ 'struct': 'RngProperties',
    724  'data': { '*opened': { 'type': 'bool', 'features': ['deprecated'] } } }
    725
    726##
    727# @RngEgdProperties:
    728#
    729# Properties for rng-egd objects.
    730#
    731# @chardev: the name of a character device backend that provides the connection
    732#           to the RNG daemon
    733#
    734# Since: 1.3
    735##
    736{ 'struct': 'RngEgdProperties',
    737  'base': 'RngProperties',
    738  'data': { 'chardev': 'str' } }
    739
    740##
    741# @RngRandomProperties:
    742#
    743# Properties for rng-random objects.
    744#
    745# @filename: the filename of the device on the host to obtain entropy from
    746#            (default: "/dev/urandom")
    747#
    748# Since: 1.3
    749##
    750{ 'struct': 'RngRandomProperties',
    751  'base': 'RngProperties',
    752  'data': { '*filename': 'str' } }
    753
    754##
    755# @SevCommonProperties:
    756#
    757# Properties common to objects that are derivatives of sev-common.
    758#
    759# @sev-device: SEV device to use (default: "/dev/sev")
    760#
    761# @cbitpos: C-bit location in page table entry (default: 0)
    762#
    763# @reduced-phys-bits: number of bits in physical addresses that become
    764#                     unavailable when SEV is enabled
    765#
    766# Since: 2.12
    767##
    768{ 'struct': 'SevCommonProperties',
    769  'data': { '*sev-device': 'str',
    770            '*cbitpos': 'uint32',
    771            'reduced-phys-bits': 'uint32' } }
    772
    773##
    774# @SevGuestProperties:
    775#
    776# Properties for sev-guest objects.
    777#
    778# @dh-cert-file: guest owners DH certificate (encoded with base64)
    779#
    780# @session-file: guest owners session parameters (encoded with base64)
    781#
    782# @policy: SEV policy value (default: 0x1)
    783#
    784# @handle: SEV firmware handle (default: 0)
    785#
    786# Since: 2.12
    787##
    788{ 'struct': 'SevGuestProperties',
    789  'base': 'SevCommonProperties',
    790  'data': { '*dh-cert-file': 'str',
    791            '*session-file': 'str',
    792            '*policy': 'uint32',
    793            '*handle': 'uint32' } }
    794
    795##
    796# @SevSnpGuestProperties:
    797#
    798# Properties for sev-snp-guest objects. Most of these are direct arguments
    799# for the KVM_SNP_* interfaces documented in the linux kernel source
    800# under Documentation/virt/kvm/amd-memory-encryption.rst, which are in
    801# turn closely coupled with the SNP_INIT/SNP_LAUNCH_* firmware commands
    802# documented in the SEV-SNP Firmware ABI Specification (Rev 0.9).
    803#
    804# More usage information is also available in the QEMU source tree under
    805# docs/amd-memory-encryption.
    806#
    807# @init-flags: as documented for the 'flags' parameter of the
    808#              KVM_SNP_INIT KVM command (default: 0)
    809#
    810# @policy: the 'POLICY' parameter to the SNP_LAUNCH_START command, as
    811#          defined in the SEV-SNP firmware ABI (default: 0x30000)
    812#
    813# @guest-visible-workarounds: 16-byte, base64-encoded blob to report
    814#                             hypervisor-defined workarounds, corresponding
    815#                             to the 'GOSVW' parameter of the
    816#                             SNP_LAUNCH_START command defined in the
    817#                             SEV-SNP firmware ABI (default: all-zero)
    818#
    819# @id-block: 96-byte, base64-encoded blob to provide the 'ID Block'
    820#            structure for the SNP_LAUNCH_FINISH command defined in the
    821#            SEV-SNP firmware ABI (default: all-zero)
    822#
    823# @id-auth: 4096-byte, base64-encoded blob to provide the 'ID Authentication
    824#           Information Structure' for the SNP_LAUNCH_FINISH command defined
    825#           in the SEV-SNP firmware ABI (default: all-zero)
    826#
    827# @auth-key-enabled: true if 'id-auth' blob contains the 'AUTHOR_KEY' field
    828#                    defined SEV-SNP firmware ABI (default: false)
    829#
    830# @host-data: 32-byte, base64-encoded, user-defined blob to provide to the
    831#             guest, as documented for the 'HOST_DATA' parameter of the
    832#             SNP_LAUNCH_FINISH command in the SEV-SNP firmware ABI
    833#             (default: all-zero)
    834#
    835# Since: 6.2
    836##
    837{ 'struct': 'SevSnpGuestProperties',
    838  'base': 'SevCommonProperties',
    839  'data': {
    840            '*init-flags': 'uint64',
    841            '*policy': 'uint64',
    842            '*guest-visible-workarounds': 'str',
    843            '*id-block': 'str',
    844            '*id-auth': 'str',
    845            '*auth-key-enabled': 'bool',
    846            '*host-data': 'str' } }
    847
    848##
    849# @ObjectType:
    850#
    851# Since: 6.0
    852##
    853{ 'enum': 'ObjectType',
    854  'data': [
    855    'authz-list',
    856    'authz-listfile',
    857    'authz-pam',
    858    'authz-simple',
    859    'can-bus',
    860    'can-host-socketcan',
    861    'colo-compare',
    862    'cryptodev-backend',
    863    'cryptodev-backend-builtin',
    864    { 'name': 'cryptodev-vhost-user',
    865      'if': 'CONFIG_VHOST_CRYPTO' },
    866    'dbus-vmstate',
    867    'filter-buffer',
    868    'filter-dump',
    869    'filter-mirror',
    870    'filter-redirector',
    871    'filter-replay',
    872    'filter-rewriter',
    873    'input-barrier',
    874    'input-linux',
    875    'iothread',
    876    'memory-backend-file',
    877    { 'name': 'memory-backend-memfd',
    878      'if': 'CONFIG_LINUX' },
    879    'memory-backend-ram',
    880    'memory-backend-epc',
    881    'pef-guest',
    882    'pr-manager-helper',
    883    'qtest',
    884    'rng-builtin',
    885    'rng-egd',
    886    'rng-random',
    887    'secret',
    888    'secret_keyring',
    889    'sev-guest',
    890    'sev-snp-guest',
    891    's390-pv-guest',
    892    'throttle-group',
    893    'tls-creds-anon',
    894    'tls-creds-psk',
    895    'tls-creds-x509',
    896    'tls-cipher-suites',
    897    'x-remote-object'
    898  ] }
    899
    900##
    901# @ObjectOptions:
    902#
    903# Describes the options of a user creatable QOM object.
    904#
    905# @qom-type: the class name for the object to be created
    906#
    907# @id: the name of the new object
    908#
    909# Since: 6.0
    910##
    911{ 'union': 'ObjectOptions',
    912  'base': { 'qom-type': 'ObjectType',
    913            'id': 'str' },
    914  'discriminator': 'qom-type',
    915  'data': {
    916      'authz-list':                 'AuthZListProperties',
    917      'authz-listfile':             'AuthZListFileProperties',
    918      'authz-pam':                  'AuthZPAMProperties',
    919      'authz-simple':               'AuthZSimpleProperties',
    920      'can-host-socketcan':         'CanHostSocketcanProperties',
    921      'colo-compare':               'ColoCompareProperties',
    922      'cryptodev-backend':          'CryptodevBackendProperties',
    923      'cryptodev-backend-builtin':  'CryptodevBackendProperties',
    924      'cryptodev-vhost-user':       { 'type': 'CryptodevVhostUserProperties',
    925                                      'if': 'CONFIG_VHOST_CRYPTO' },
    926      'dbus-vmstate':               'DBusVMStateProperties',
    927      'filter-buffer':              'FilterBufferProperties',
    928      'filter-dump':                'FilterDumpProperties',
    929      'filter-mirror':              'FilterMirrorProperties',
    930      'filter-redirector':          'FilterRedirectorProperties',
    931      'filter-replay':              'NetfilterProperties',
    932      'filter-rewriter':            'FilterRewriterProperties',
    933      'input-barrier':              'InputBarrierProperties',
    934      'input-linux':                'InputLinuxProperties',
    935      'iothread':                   'IothreadProperties',
    936      'memory-backend-file':        'MemoryBackendFileProperties',
    937      'memory-backend-memfd':       { 'type': 'MemoryBackendMemfdProperties',
    938                                      'if': 'CONFIG_LINUX' },
    939      'memory-backend-ram':         'MemoryBackendProperties',
    940      'memory-backend-epc':         'MemoryBackendEpcProperties',
    941      'pr-manager-helper':          'PrManagerHelperProperties',
    942      'qtest':                      'QtestProperties',
    943      'rng-builtin':                'RngProperties',
    944      'rng-egd':                    'RngEgdProperties',
    945      'rng-random':                 'RngRandomProperties',
    946      'secret':                     'SecretProperties',
    947      'secret_keyring':             'SecretKeyringProperties',
    948      'sev-guest':                  'SevGuestProperties',
    949      'sev-snp-guest':              'SevSnpGuestProperties',
    950      'throttle-group':             'ThrottleGroupProperties',
    951      'tls-creds-anon':             'TlsCredsAnonProperties',
    952      'tls-creds-psk':              'TlsCredsPskProperties',
    953      'tls-creds-x509':             'TlsCredsX509Properties',
    954      'tls-cipher-suites':          'TlsCredsProperties',
    955      'x-remote-object':            'RemoteObjectProperties'
    956  } }
    957
    958##
    959# @object-add:
    960#
    961# Create a QOM object.
    962#
    963# Returns: Nothing on success
    964#          Error if @qom-type is not a valid class name
    965#
    966# Since: 2.0
    967#
    968# Example:
    969#
    970# -> { "execute": "object-add",
    971#      "arguments": { "qom-type": "rng-random", "id": "rng1",
    972#                     "filename": "/dev/hwrng" } }
    973# <- { "return": {} }
    974#
    975##
    976{ 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true,
    977  'allow-preconfig': true }
    978
    979##
    980# @object-del:
    981#
    982# Remove a QOM object.
    983#
    984# @id: the name of the QOM object to remove
    985#
    986# Returns: Nothing on success
    987#          Error if @id is not a valid id for a QOM object
    988#
    989# Since: 2.0
    990#
    991# Example:
    992#
    993# -> { "execute": "object-del", "arguments": { "id": "rng1" } }
    994# <- { "return": {} }
    995#
    996##
    997{ 'command': 'object-del', 'data': {'id': 'str'},
    998  'allow-preconfig': true }