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

##
# = Block devices
##

{ 'include': 'block-core.json' }

##
# == Additional block stuff (VM related)
##

##
# @BiosAtaTranslation:
#
# Policy that BIOS should use to interpret cylinder/head/sector
# addresses.  Note that Bochs BIOS and SeaBIOS will not actually
# translate logical CHS to physical; instead, they will use logical
# block addressing.
#
# @auto: If cylinder/heads/sizes are passed, choose between none and
#     LBA depending on the size of the disk.  If they are not passed,
#     choose none if QEMU can guess that the disk had 16 or fewer
#     heads, large if QEMU can guess that the disk had 131072 or fewer
#     tracks across all heads (i.e. cylinders*heads<131072), otherwise
#     LBA.
#
# @none: The physical disk geometry is equal to the logical geometry.
#
# @lba: Assume 63 sectors per track and one of 16, 32, 64, 128 or 255
#     heads (if fewer than 255 are enough to cover the whole disk with
#     1024 cylinders/head).  The number of cylinders/head is then
#     computed based on the number of sectors and heads.
#
# @large: The number of cylinders per head is scaled down to 1024 by
#     correspondingly scaling up the number of heads.
#
# @rechs: Same as @large, but first convert a 16-head geometry to
#     15-head, by proportionally scaling up the number of
#     cylinders/head.
#
# Since: 2.0
##
{ 'enum': 'BiosAtaTranslation',
  'data': ['auto', 'none', 'lba', 'large', 'rechs']}

##
# @FloppyDriveType:
#
# Type of Floppy drive to be emulated by the Floppy Disk Controller.
#
# @144: 1.44MB 3.5" drive
#
# @288: 2.88MB 3.5" drive
#
# @120: 1.2MB 5.25" drive
#
# @none: No drive connected
#
# @auto: Automatically determined by inserted media at boot
#
# Since: 2.6
##
{ 'enum': 'FloppyDriveType',
  'data': ['144', '288', '120', 'none', 'auto']}

##
# @PRManagerInfo:
#
# Information about a persistent reservation manager
#
# @id: the identifier of the persistent reservation manager
#
# @connected: true if the persistent reservation manager is connected
#     to the underlying storage or helper
#
# Since: 3.0
##
{ 'struct': 'PRManagerInfo',
  'data': {'id': 'str', 'connected': 'bool'} }

##
# @query-pr-managers:
#
# Returns a list of information about each persistent reservation
# manager.
#
# Returns: a list of @PRManagerInfo for each persistent reservation
#     manager
#
# Since: 3.0
##
{ 'command': 'query-pr-managers', 'returns': ['PRManagerInfo'],
  'allow-preconfig': true }

##
# @eject:
#
# Ejects the medium from a removable drive.
#
# @device: Block device name
#
# @id: The name or QOM path of the guest device (since: 2.8)
#
# @force: If true, eject regardless of whether the drive is locked.
#     If not specified, the default value is false.
#
# Features:
#
# @deprecated: Member @device is deprecated.  Use @id instead.
#
# Errors:
#     - If @device is not a valid block device, DeviceNotFound
#
# .. note:: Ejecting a device with no media results in success.
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "eject", "arguments": { "id": "ide1-0-1" } }
#     <- { "return": {} }
##
{ 'command': 'eject',
  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*id': 'str',
            '*force': 'bool' } }

##
# @blockdev-open-tray:
#
# Opens a block device's tray.  If there is a block driver state tree
# inserted as a medium, it will become inaccessible to the guest (but
# it will remain associated to the block device, so closing the tray
# will make it accessible again).
#
# If the tray was already open before, this will be a no-op.
#
# Once the tray opens, a DEVICE_TRAY_MOVED event is emitted.  There
# are cases in which no such event will be generated, these include:
#
# - if the guest has locked the tray, @force is false and the guest
#   does not respond to the eject request
# - if the BlockBackend denoted by @device does not have a guest
#   device attached to it
# - if the guest device does not have an actual tray
#
# @device: Block device name
#
# @id: The name or QOM path of the guest device (since: 2.8)
#
# @force: if false (the default), an eject request will be sent to the
#     guest if it has locked the tray (and the tray will not be opened
#     immediately); if true, the tray will be opened regardless of
#     whether it is locked
#
# Features:
#
# @deprecated: Member @device is deprecated.  Use @id instead.
#
# Since: 2.5
#
# .. qmp-example::
#
#     -> { "execute": "blockdev-open-tray",
#          "arguments": { "id": "ide0-1-0" } }
#
#     <- { "timestamp": { "seconds": 1418751016,
#                         "microseconds": 716996 },
#          "event": "DEVICE_TRAY_MOVED",
#          "data": { "device": "ide1-cd0",
#                    "id": "ide0-1-0",
#                    "tray-open": true } }
#
#     <- { "return": {} }
##
{ 'command': 'blockdev-open-tray',
  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*id': 'str',
            '*force': 'bool' } }

##
# @blockdev-close-tray:
#
# Closes a block device's tray.  If there is a block driver state tree
# associated with the block device (which is currently ejected), that
# tree will be loaded as the medium.
#
# If the tray was already closed before, this will be a no-op.
#
# @device: Block device name
#
# @id: The name or QOM path of the guest device (since: 2.8)
#
# Features:
#
# @deprecated: Member @device is deprecated.  Use @id instead.
#
# Since: 2.5
#
# .. qmp-example::
#
#     -> { "execute": "blockdev-close-tray",
#          "arguments": { "id": "ide0-1-0" } }
#
#     <- { "timestamp": { "seconds": 1418751345,
#                         "microseconds": 272147 },
#          "event": "DEVICE_TRAY_MOVED",
#          "data": { "device": "ide1-cd0",
#                    "id": "ide0-1-0",
#                    "tray-open": false } }
#
#     <- { "return": {} }
##
{ 'command': 'blockdev-close-tray',
  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*id': 'str' } }

##
# @blockdev-remove-medium:
#
# Removes a medium (a block driver state tree) from a block device.
# That block device's tray must currently be open (unless there is no
# attached guest device).
#
# If the tray is open and there is no medium inserted, this will be a
# no-op.
#
# @id: The name or QOM path of the guest device
#
# Since: 2.12
#
# .. qmp-example::
#
#     -> { "execute": "blockdev-remove-medium",
#          "arguments": { "id": "ide0-1-0" } }
#
#     <- { "error": { "class": "GenericError",
#                     "desc": "Tray of device 'ide0-1-0' is not open" } }
#
#     -> { "execute": "blockdev-open-tray",
#          "arguments": { "id": "ide0-1-0" } }
#
#     <- { "timestamp": { "seconds": 1418751627,
#                         "microseconds": 549958 },
#          "event": "DEVICE_TRAY_MOVED",
#          "data": { "device": "ide1-cd0",
#                    "id": "ide0-1-0",
#                    "tray-open": true } }
#
#     <- { "return": {} }
#
#     -> { "execute": "blockdev-remove-medium",
#          "arguments": { "id": "ide0-1-0" } }
#
#     <- { "return": {} }
##
{ 'command': 'blockdev-remove-medium',
  'data': { 'id': 'str' } }

##
# @blockdev-insert-medium:
#
# Inserts a medium (a block driver state tree) into a block device.
# That block device's tray must currently be open (unless there is no
# attached guest device) and there must be no medium inserted already.
#
# @id: The name or QOM path of the guest device
#
# @node-name: name of a node in the block driver state graph
#
# Since: 2.12
#
# .. qmp-example::
#
#     -> { "execute": "blockdev-add",
#          "arguments": {
#              "node-name": "node0",
#              "driver": "raw",
#              "file": { "driver": "file",
#                        "filename": "fedora.iso" } } }
#     <- { "return": {} }
#
#     -> { "execute": "blockdev-insert-medium",
#          "arguments": { "id": "ide0-1-0",
#                         "node-name": "node0" } }
#
#     <- { "return": {} }
##
{ 'command': 'blockdev-insert-medium',
  'data': { 'id': 'str',
            'node-name': 'str'} }

##
# @BlockdevChangeReadOnlyMode:
#
# Specifies the new read-only mode of a block device subject to the
# @blockdev-change-medium command.
#
# @retain: Retains the current read-only mode
#
# @read-only: Makes the device read-only
#
# @read-write: Makes the device writable
#
# Since: 2.3
##
{ 'enum': 'BlockdevChangeReadOnlyMode',
  'data': ['retain', 'read-only', 'read-write'] }

##
# @blockdev-change-medium:
#
# Changes the medium inserted into a block device by ejecting the
# current medium and loading a new image file which is inserted as the
# new medium (this command combines blockdev-open-tray,
# blockdev-remove-medium, blockdev-insert-medium and
# blockdev-close-tray).
#
# @device: Block device name
#
# @id: The name or QOM path of the guest device (since: 2.8)
#
# @filename: filename of the new image to be loaded
#
# @format: format to open the new image with (defaults to the probed
#     format)
#
# @read-only-mode: change the read-only mode of the device; defaults
#     to 'retain'
#
# @force: if false (the default), an eject request through
#     blockdev-open-tray will be sent to the guest if it has locked
#     the tray (and the tray will not be opened immediately); if true,
#     the tray will be opened regardless of whether it is locked.
#     (since 7.1)
#
# Features:
#
# @deprecated: Member @device is deprecated.  Use @id instead.
#
# Since: 2.5
#
# .. qmp-example::
#    :title: Change a removable medium
#
#     -> { "execute": "blockdev-change-medium",
#          "arguments": { "id": "ide0-1-0",
#                         "filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
#                         "format": "raw" } }
#     <- { "return": {} }
#
# .. qmp-example::
#    :title: Load a read-only medium into a writable drive
#
#     -> { "execute": "blockdev-change-medium",
#          "arguments": { "id": "floppyA",
#                         "filename": "/srv/images/ro.img",
#                         "format": "raw",
#                         "read-only-mode": "retain" } }
#
#     <- { "error":
#          { "class": "GenericError",
#            "desc": "Could not open '/srv/images/ro.img': Permission denied" } }
#
#     -> { "execute": "blockdev-change-medium",
#          "arguments": { "id": "floppyA",
#                         "filename": "/srv/images/ro.img",
#                         "format": "raw",
#                         "read-only-mode": "read-only" } }
#
#     <- { "return": {} }
##
{ 'command': 'blockdev-change-medium',
  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*id': 'str',
            'filename': 'str',
            '*format': 'str',
            '*force': 'bool',
            '*read-only-mode': 'BlockdevChangeReadOnlyMode' } }

##
# @DEVICE_TRAY_MOVED:
#
# Emitted whenever the tray of a removable device is moved by the
# guest or by HMP/QMP commands
#
# @device: Block device name.  This is always present for
#     compatibility reasons, but it can be empty ("") if the image
#     does not have a device name associated.
#
# @id: The name or QOM path of the guest device (since 2.8)
#
# @tray-open: true if the tray has been opened or false if it has been
#     closed
#
# Since: 1.1
#
# .. qmp-example::
#
#     <- { "event": "DEVICE_TRAY_MOVED",
#          "data": { "device": "ide1-cd0",
#                    "id": "/machine/unattached/device[22]",
#                    "tray-open": true
#          },
#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'DEVICE_TRAY_MOVED',
  'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }

##
# @PR_MANAGER_STATUS_CHANGED:
#
# Emitted whenever the connected status of a persistent reservation
# manager changes.
#
# @id: The id of the PR manager object
#
# @connected: true if the PR manager is connected to a backend
#
# Since: 3.0
#
# .. qmp-example::
#
#     <- { "event": "PR_MANAGER_STATUS_CHANGED",
#          "data": { "id": "pr-helper0",
#                    "connected": true
#          },
#          "timestamp": { "seconds": 1519840375, "microseconds": 450486 } }
##
{ 'event': 'PR_MANAGER_STATUS_CHANGED',
  'data': { 'id': 'str', 'connected': 'bool' } }

##
# @block_set_io_throttle:
#
# Change I/O throttle limits for a block drive.
#
# Since QEMU 2.4, each device with I/O limits is member of a throttle
# group.
#
# If two or more devices are members of the same group, the limits
# will apply to the combined I/O of the whole group in a round-robin
# fashion.  Therefore, setting new I/O limits to a device will affect
# the whole group.
#
# The name of the group can be specified using the 'group' parameter.
# If the parameter is unset, it is assumed to be the current group of
# that device.  If it's not in any group yet, the name of the device
# will be used as the name for its group.
#
# The 'group' parameter can also be used to move a device to a
# different group.  In this case the limits specified in the
# parameters will be applied to the new group only.
#
# I/O limits can be disabled by setting all of them to 0.  In this
# case the device will be removed from its group and the rest of its
# members will not be affected.  The 'group' parameter is ignored.
#
# Errors:
#     - If @device is not a valid block device, DeviceNotFound
#
# Since: 1.1
#
# .. qmp-example::
#
#     -> { "execute": "block_set_io_throttle",
#          "arguments": { "id": "virtio-blk-pci0/virtio-backend",
#                         "bps": 0,
#                         "bps_rd": 0,
#                         "bps_wr": 0,
#                         "iops": 512,
#                         "iops_rd": 0,
#                         "iops_wr": 0,
#                         "bps_max": 0,
#                         "bps_rd_max": 0,
#                         "bps_wr_max": 0,
#                         "iops_max": 0,
#                         "iops_rd_max": 0,
#                         "iops_wr_max": 0,
#                         "bps_max_length": 0,
#                         "iops_size": 0 } }
#     <- { "return": {} }
#
# .. qmp-example::
#
#     -> { "execute": "block_set_io_throttle",
#          "arguments": { "id": "ide0-1-0",
#                         "bps": 1000000,
#                         "bps_rd": 0,
#                         "bps_wr": 0,
#                         "iops": 0,
#                         "iops_rd": 0,
#                         "iops_wr": 0,
#                         "bps_max": 8000000,
#                         "bps_rd_max": 0,
#                         "bps_wr_max": 0,
#                         "iops_max": 0,
#                         "iops_rd_max": 0,
#                         "iops_wr_max": 0,
#                         "bps_max_length": 60,
#                         "iops_size": 0 } }
#     <- { "return": {} }
##
{ 'command': 'block_set_io_throttle', 'boxed': true,
  'data': 'BlockIOThrottle',
  'allow-preconfig': true }

##
# @block-latency-histogram-set:
#
# Manage read, write and flush latency histograms for the device.
#
# If only @id parameter is specified, remove all present latency
# histograms for the device.  Otherwise, add/reset some of (or all)
# latency histograms.
#
# @id: The name or QOM path of the guest device.
#
# @boundaries: list of interval boundary values (see description in
#     BlockLatencyHistogramInfo definition).  If specified, all
#     latency histograms are removed, and empty ones created for all
#     io types with intervals corresponding to @boundaries (except for
#     io types, for which specific boundaries are set through the
#     following parameters).
#
# @boundaries-read: list of interval boundary values for read latency
#     histogram.  If specified, old read latency histogram is removed,
#     and empty one created with intervals corresponding to
#     @boundaries-read.  The parameter has higher priority then
#     @boundaries.
#
# @boundaries-write: list of interval boundary values for write
#     latency histogram.
#
# @boundaries-zap: list of interval boundary values for zone append
#     write latency histogram.
#
# @boundaries-flush: list of interval boundary values for flush
#     latency histogram.
#
# Errors:
#     - if device is not found or any boundary arrays are invalid.
#
# Since: 4.0
#
# .. qmp-example::
#    :annotated:
#
#    Set new histograms for all io types with intervals
#    [0, 10), [10, 50), [50, 100), [100, +inf)::
#
#     -> { "execute": "block-latency-histogram-set",
#          "arguments": { "id": "drive0",
#                         "boundaries": [10, 50, 100] } }
#     <- { "return": {} }
#
# .. qmp-example::
#    :annotated:
#
#    Set new histogram only for write, other histograms will remain
#    not changed (or not created)::
#
#     -> { "execute": "block-latency-histogram-set",
#          "arguments": { "id": "drive0",
#                         "boundaries-write": [10, 50, 100] } }
#     <- { "return": {} }
#
# .. qmp-example::
#    :annotated:
#
#    Set new histograms with the following intervals:
#
#    - read, flush: [0, 10), [10, 50), [50, 100), [100, +inf)
#    - write: [0, 1000), [1000, 5000), [5000, +inf)
#
#    ::
#
#     -> { "execute": "block-latency-histogram-set",
#          "arguments": { "id": "drive0",
#                         "boundaries": [10, 50, 100],
#                         "boundaries-write": [1000, 5000] } }
#     <- { "return": {} }
#
# .. qmp-example::
#    :annotated:
#
#    Remove all latency histograms::
#
#     -> { "execute": "block-latency-histogram-set",
#          "arguments": { "id": "drive0" } }
#     <- { "return": {} }
##
{ 'command': 'block-latency-histogram-set',
  'data': {'id': 'str',
           '*boundaries': ['uint64'],
           '*boundaries-read': ['uint64'],
           '*boundaries-write': ['uint64'],
           '*boundaries-zap': ['uint64'],
           '*boundaries-flush': ['uint64'] },
  'allow-preconfig': true }
