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

block.json (16928B)


      1# -*- Mode: Python -*-
      2# vim: filetype=python
      3
      4##
      5# = Block devices
      6##
      7
      8{ 'include': 'block-core.json' }
      9
     10##
     11# == Additional block stuff (VM related)
     12##
     13
     14##
     15# @BiosAtaTranslation:
     16#
     17# Policy that BIOS should use to interpret cylinder/head/sector
     18# addresses.  Note that Bochs BIOS and SeaBIOS will not actually
     19# translate logical CHS to physical; instead, they will use logical
     20# block addressing.
     21#
     22# @auto: If cylinder/heads/sizes are passed, choose between none and LBA
     23#        depending on the size of the disk.  If they are not passed,
     24#        choose none if QEMU can guess that the disk had 16 or fewer
     25#        heads, large if QEMU can guess that the disk had 131072 or
     26#        fewer tracks across all heads (i.e. cylinders*heads<131072),
     27#        otherwise LBA.
     28#
     29# @none: The physical disk geometry is equal to the logical geometry.
     30#
     31# @lba: Assume 63 sectors per track and one of 16, 32, 64, 128 or 255
     32#       heads (if fewer than 255 are enough to cover the whole disk
     33#       with 1024 cylinders/head).  The number of cylinders/head is
     34#       then computed based on the number of sectors and heads.
     35#
     36# @large: The number of cylinders per head is scaled down to 1024
     37#         by correspondingly scaling up the number of heads.
     38#
     39# @rechs: Same as @large, but first convert a 16-head geometry to
     40#         15-head, by proportionally scaling up the number of
     41#         cylinders/head.
     42#
     43# Since: 2.0
     44##
     45{ 'enum': 'BiosAtaTranslation',
     46  'data': ['auto', 'none', 'lba', 'large', 'rechs']}
     47
     48##
     49# @FloppyDriveType:
     50#
     51# Type of Floppy drive to be emulated by the Floppy Disk Controller.
     52#
     53# @144:  1.44MB 3.5" drive
     54# @288:  2.88MB 3.5" drive
     55# @120:  1.2MB 5.25" drive
     56# @none: No drive connected
     57# @auto: Automatically determined by inserted media at boot
     58#
     59# Since: 2.6
     60##
     61{ 'enum': 'FloppyDriveType',
     62  'data': ['144', '288', '120', 'none', 'auto']}
     63
     64##
     65# @PRManagerInfo:
     66#
     67# Information about a persistent reservation manager
     68#
     69# @id: the identifier of the persistent reservation manager
     70#
     71# @connected: true if the persistent reservation manager is connected to
     72#             the underlying storage or helper
     73#
     74# Since: 3.0
     75##
     76{ 'struct': 'PRManagerInfo',
     77  'data': {'id': 'str', 'connected': 'bool'} }
     78
     79##
     80# @query-pr-managers:
     81#
     82# Returns a list of information about each persistent reservation manager.
     83#
     84# Returns: a list of @PRManagerInfo for each persistent reservation manager
     85#
     86# Since: 3.0
     87##
     88{ 'command': 'query-pr-managers', 'returns': ['PRManagerInfo'],
     89  'allow-preconfig': true }
     90
     91##
     92# @eject:
     93#
     94# Ejects the medium from a removable drive.
     95#
     96# @device: Block device name
     97#
     98# @id: The name or QOM path of the guest device (since: 2.8)
     99#
    100# @force: If true, eject regardless of whether the drive is locked.
    101#         If not specified, the default value is false.
    102#
    103# Features:
    104# @deprecated: Member @device is deprecated.  Use @id instead.
    105#
    106# Returns: - Nothing on success
    107#          - If @device is not a valid block device, DeviceNotFound
    108# Notes:    Ejecting a device with no media results in success
    109#
    110# Since: 0.14
    111#
    112# Example:
    113#
    114# -> { "execute": "eject", "arguments": { "id": "ide1-0-1" } }
    115# <- { "return": {} }
    116##
    117{ 'command': 'eject',
    118  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
    119            '*id': 'str',
    120            '*force': 'bool' } }
    121
    122##
    123# @blockdev-open-tray:
    124#
    125# Opens a block device's tray. If there is a block driver state tree inserted as
    126# a medium, it will become inaccessible to the guest (but it will remain
    127# associated to the block device, so closing the tray will make it accessible
    128# again).
    129#
    130# If the tray was already open before, this will be a no-op.
    131#
    132# Once the tray opens, a DEVICE_TRAY_MOVED event is emitted. There are cases in
    133# which no such event will be generated, these include:
    134#
    135# - if the guest has locked the tray, @force is false and the guest does not
    136#   respond to the eject request
    137# - if the BlockBackend denoted by @device does not have a guest device attached
    138#   to it
    139# - if the guest device does not have an actual tray
    140#
    141# @device: Block device name
    142#
    143# @id: The name or QOM path of the guest device (since: 2.8)
    144#
    145# @force: if false (the default), an eject request will be sent to
    146#         the guest if it has locked the tray (and the tray will not be opened
    147#         immediately); if true, the tray will be opened regardless of whether
    148#         it is locked
    149#
    150# Features:
    151# @deprecated: Member @device is deprecated.  Use @id instead.
    152#
    153# Since: 2.5
    154#
    155# Example:
    156#
    157# -> { "execute": "blockdev-open-tray",
    158#      "arguments": { "id": "ide0-1-0" } }
    159#
    160# <- { "timestamp": { "seconds": 1418751016,
    161#                     "microseconds": 716996 },
    162#      "event": "DEVICE_TRAY_MOVED",
    163#      "data": { "device": "ide1-cd0",
    164#                "id": "ide0-1-0",
    165#                "tray-open": true } }
    166#
    167# <- { "return": {} }
    168#
    169##
    170{ 'command': 'blockdev-open-tray',
    171  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
    172            '*id': 'str',
    173            '*force': 'bool' } }
    174
    175##
    176# @blockdev-close-tray:
    177#
    178# Closes a block device's tray. If there is a block driver state tree associated
    179# with the block device (which is currently ejected), that tree will be loaded
    180# as the medium.
    181#
    182# If the tray was already closed before, this will be a no-op.
    183#
    184# @device: Block device name
    185#
    186# @id: The name or QOM path of the guest device (since: 2.8)
    187#
    188# Features:
    189# @deprecated: Member @device is deprecated.  Use @id instead.
    190#
    191# Since: 2.5
    192#
    193# Example:
    194#
    195# -> { "execute": "blockdev-close-tray",
    196#      "arguments": { "id": "ide0-1-0" } }
    197#
    198# <- { "timestamp": { "seconds": 1418751345,
    199#                     "microseconds": 272147 },
    200#      "event": "DEVICE_TRAY_MOVED",
    201#      "data": { "device": "ide1-cd0",
    202#                "id": "ide0-1-0",
    203#                "tray-open": false } }
    204#
    205# <- { "return": {} }
    206#
    207##
    208{ 'command': 'blockdev-close-tray',
    209  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
    210            '*id': 'str' } }
    211
    212##
    213# @blockdev-remove-medium:
    214#
    215# Removes a medium (a block driver state tree) from a block device. That block
    216# device's tray must currently be open (unless there is no attached guest
    217# device).
    218#
    219# If the tray is open and there is no medium inserted, this will be a no-op.
    220#
    221# @id: The name or QOM path of the guest device
    222#
    223# Since: 2.12
    224#
    225# Example:
    226#
    227# -> { "execute": "blockdev-remove-medium",
    228#      "arguments": { "id": "ide0-1-0" } }
    229#
    230# <- { "error": { "class": "GenericError",
    231#                 "desc": "Tray of device 'ide0-1-0' is not open" } }
    232#
    233# -> { "execute": "blockdev-open-tray",
    234#      "arguments": { "id": "ide0-1-0" } }
    235#
    236# <- { "timestamp": { "seconds": 1418751627,
    237#                     "microseconds": 549958 },
    238#      "event": "DEVICE_TRAY_MOVED",
    239#      "data": { "device": "ide1-cd0",
    240#                "id": "ide0-1-0",
    241#                "tray-open": true } }
    242#
    243# <- { "return": {} }
    244#
    245# -> { "execute": "blockdev-remove-medium",
    246#      "arguments": { "id": "ide0-1-0" } }
    247#
    248# <- { "return": {} }
    249#
    250##
    251{ 'command': 'blockdev-remove-medium',
    252  'data': { 'id': 'str' } }
    253
    254##
    255# @blockdev-insert-medium:
    256#
    257# Inserts a medium (a block driver state tree) into a block device. That block
    258# device's tray must currently be open (unless there is no attached guest
    259# device) and there must be no medium inserted already.
    260#
    261# @id: The name or QOM path of the guest device
    262#
    263# @node-name: name of a node in the block driver state graph
    264#
    265# Since: 2.12
    266#
    267# Example:
    268#
    269# -> { "execute": "blockdev-add",
    270#      "arguments": {
    271#          "node-name": "node0",
    272#          "driver": "raw",
    273#          "file": { "driver": "file",
    274#                    "filename": "fedora.iso" } } }
    275# <- { "return": {} }
    276#
    277# -> { "execute": "blockdev-insert-medium",
    278#      "arguments": { "id": "ide0-1-0",
    279#                     "node-name": "node0" } }
    280#
    281# <- { "return": {} }
    282#
    283##
    284{ 'command': 'blockdev-insert-medium',
    285  'data': { 'id': 'str',
    286            'node-name': 'str'} }
    287
    288
    289##
    290# @BlockdevChangeReadOnlyMode:
    291#
    292# Specifies the new read-only mode of a block device subject to the
    293# @blockdev-change-medium command.
    294#
    295# @retain: Retains the current read-only mode
    296#
    297# @read-only: Makes the device read-only
    298#
    299# @read-write: Makes the device writable
    300#
    301# Since: 2.3
    302#
    303##
    304{ 'enum': 'BlockdevChangeReadOnlyMode',
    305  'data': ['retain', 'read-only', 'read-write'] }
    306
    307
    308##
    309# @blockdev-change-medium:
    310#
    311# Changes the medium inserted into a block device by ejecting the current medium
    312# and loading a new image file which is inserted as the new medium (this command
    313# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium
    314# and blockdev-close-tray).
    315#
    316# @device: Block device name
    317#
    318# @id: The name or QOM path of the guest device
    319#      (since: 2.8)
    320#
    321# @filename: filename of the new image to be loaded
    322#
    323# @format: format to open the new image with (defaults to
    324#          the probed format)
    325#
    326# @read-only-mode: change the read-only mode of the device; defaults
    327#                  to 'retain'
    328#
    329# Features:
    330# @deprecated: Member @device is deprecated.  Use @id instead.
    331#
    332# Since: 2.5
    333#
    334# Examples:
    335#
    336# 1. Change a removable medium
    337#
    338# -> { "execute": "blockdev-change-medium",
    339#      "arguments": { "id": "ide0-1-0",
    340#                     "filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
    341#                     "format": "raw" } }
    342# <- { "return": {} }
    343#
    344# 2. Load a read-only medium into a writable drive
    345#
    346# -> { "execute": "blockdev-change-medium",
    347#      "arguments": { "id": "floppyA",
    348#                     "filename": "/srv/images/ro.img",
    349#                     "format": "raw",
    350#                     "read-only-mode": "retain" } }
    351#
    352# <- { "error":
    353#      { "class": "GenericError",
    354#        "desc": "Could not open '/srv/images/ro.img': Permission denied" } }
    355#
    356# -> { "execute": "blockdev-change-medium",
    357#      "arguments": { "id": "floppyA",
    358#                     "filename": "/srv/images/ro.img",
    359#                     "format": "raw",
    360#                     "read-only-mode": "read-only" } }
    361#
    362# <- { "return": {} }
    363#
    364##
    365{ 'command': 'blockdev-change-medium',
    366  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
    367            '*id': 'str',
    368            'filename': 'str',
    369            '*format': 'str',
    370            '*read-only-mode': 'BlockdevChangeReadOnlyMode' } }
    371
    372
    373##
    374# @DEVICE_TRAY_MOVED:
    375#
    376# Emitted whenever the tray of a removable device is moved by the guest or by
    377# HMP/QMP commands
    378#
    379# @device: Block device name. This is always present for compatibility
    380#          reasons, but it can be empty ("") if the image does not
    381#          have a device name associated.
    382#
    383# @id: The name or QOM path of the guest device (since 2.8)
    384#
    385# @tray-open: true if the tray has been opened or false if it has been closed
    386#
    387# Since: 1.1
    388#
    389# Example:
    390#
    391# <- { "event": "DEVICE_TRAY_MOVED",
    392#      "data": { "device": "ide1-cd0",
    393#                "id": "/machine/unattached/device[22]",
    394#                "tray-open": true
    395#      },
    396#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
    397#
    398##
    399{ 'event': 'DEVICE_TRAY_MOVED',
    400  'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }
    401
    402##
    403# @PR_MANAGER_STATUS_CHANGED:
    404#
    405# Emitted whenever the connected status of a persistent reservation
    406# manager changes.
    407#
    408# @id: The id of the PR manager object
    409#
    410# @connected: true if the PR manager is connected to a backend
    411#
    412# Since: 3.0
    413#
    414# Example:
    415#
    416# <- { "event": "PR_MANAGER_STATUS_CHANGED",
    417#      "data": { "id": "pr-helper0",
    418#                "connected": true
    419#      },
    420#      "timestamp": { "seconds": 1519840375, "microseconds": 450486 } }
    421#
    422##
    423{ 'event': 'PR_MANAGER_STATUS_CHANGED',
    424  'data': { 'id': 'str', 'connected': 'bool' } }
    425
    426##
    427# @block_set_io_throttle:
    428#
    429# Change I/O throttle limits for a block drive.
    430#
    431# Since QEMU 2.4, each device with I/O limits is member of a throttle
    432# group.
    433#
    434# If two or more devices are members of the same group, the limits
    435# will apply to the combined I/O of the whole group in a round-robin
    436# fashion. Therefore, setting new I/O limits to a device will affect
    437# the whole group.
    438#
    439# The name of the group can be specified using the 'group' parameter.
    440# If the parameter is unset, it is assumed to be the current group of
    441# that device. If it's not in any group yet, the name of the device
    442# will be used as the name for its group.
    443#
    444# The 'group' parameter can also be used to move a device to a
    445# different group. In this case the limits specified in the parameters
    446# will be applied to the new group only.
    447#
    448# I/O limits can be disabled by setting all of them to 0. In this case
    449# the device will be removed from its group and the rest of its
    450# members will not be affected. The 'group' parameter is ignored.
    451#
    452# Returns: - Nothing on success
    453#          - If @device is not a valid block device, DeviceNotFound
    454#
    455# Since: 1.1
    456#
    457# Example:
    458#
    459# -> { "execute": "block_set_io_throttle",
    460#      "arguments": { "id": "virtio-blk-pci0/virtio-backend",
    461#                     "bps": 0,
    462#                     "bps_rd": 0,
    463#                     "bps_wr": 0,
    464#                     "iops": 512,
    465#                     "iops_rd": 0,
    466#                     "iops_wr": 0,
    467#                     "bps_max": 0,
    468#                     "bps_rd_max": 0,
    469#                     "bps_wr_max": 0,
    470#                     "iops_max": 0,
    471#                     "iops_rd_max": 0,
    472#                     "iops_wr_max": 0,
    473#                     "bps_max_length": 0,
    474#                     "iops_size": 0 } }
    475# <- { "return": {} }
    476#
    477# -> { "execute": "block_set_io_throttle",
    478#      "arguments": { "id": "ide0-1-0",
    479#                     "bps": 1000000,
    480#                     "bps_rd": 0,
    481#                     "bps_wr": 0,
    482#                     "iops": 0,
    483#                     "iops_rd": 0,
    484#                     "iops_wr": 0,
    485#                     "bps_max": 8000000,
    486#                     "bps_rd_max": 0,
    487#                     "bps_wr_max": 0,
    488#                     "iops_max": 0,
    489#                     "iops_rd_max": 0,
    490#                     "iops_wr_max": 0,
    491#                     "bps_max_length": 60,
    492#                     "iops_size": 0 } }
    493# <- { "return": {} }
    494##
    495{ 'command': 'block_set_io_throttle', 'boxed': true,
    496  'data': 'BlockIOThrottle' }
    497
    498##
    499# @block-latency-histogram-set:
    500#
    501# Manage read, write and flush latency histograms for the device.
    502#
    503# If only @id parameter is specified, remove all present latency histograms
    504# for the device. Otherwise, add/reset some of (or all) latency histograms.
    505#
    506# @id: The name or QOM path of the guest device.
    507#
    508# @boundaries: list of interval boundary values (see description in
    509#              BlockLatencyHistogramInfo definition). If specified, all
    510#              latency histograms are removed, and empty ones created for all
    511#              io types with intervals corresponding to @boundaries (except for
    512#              io types, for which specific boundaries are set through the
    513#              following parameters).
    514#
    515# @boundaries-read: list of interval boundary values for read latency
    516#                   histogram. If specified, old read latency histogram is
    517#                   removed, and empty one created with intervals
    518#                   corresponding to @boundaries-read. The parameter has higher
    519#                   priority then @boundaries.
    520#
    521# @boundaries-write: list of interval boundary values for write latency
    522#                    histogram.
    523#
    524# @boundaries-flush: list of interval boundary values for flush latency
    525#                    histogram.
    526#
    527# Returns: error if device is not found or any boundary arrays are invalid.
    528#
    529# Since: 4.0
    530#
    531# Example:
    532# set new histograms for all io types with intervals
    533# [0, 10), [10, 50), [50, 100), [100, +inf):
    534#
    535# -> { "execute": "block-latency-histogram-set",
    536#      "arguments": { "id": "drive0",
    537#                     "boundaries": [10, 50, 100] } }
    538# <- { "return": {} }
    539#
    540# Example:
    541# set new histogram only for write, other histograms will remain
    542# not changed (or not created):
    543#
    544# -> { "execute": "block-latency-histogram-set",
    545#      "arguments": { "id": "drive0",
    546#                     "boundaries-write": [10, 50, 100] } }
    547# <- { "return": {} }
    548#
    549# Example:
    550# set new histograms with the following intervals:
    551#   read, flush: [0, 10), [10, 50), [50, 100), [100, +inf)
    552#   write: [0, 1000), [1000, 5000), [5000, +inf)
    553#
    554# -> { "execute": "block-latency-histogram-set",
    555#      "arguments": { "id": "drive0",
    556#                     "boundaries": [10, 50, 100],
    557#                     "boundaries-write": [1000, 5000] } }
    558# <- { "return": {} }
    559#
    560# Example:
    561# remove all latency histograms:
    562#
    563# -> { "execute": "block-latency-histogram-set",
    564#      "arguments": { "id": "drive0" } }
    565# <- { "return": {} }
    566##
    567{ 'command': 'block-latency-histogram-set',
    568  'data': {'id': 'str',
    569           '*boundaries': ['uint64'],
    570           '*boundaries-read': ['uint64'],
    571           '*boundaries-write': ['uint64'],
    572           '*boundaries-flush': ['uint64'] } }