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

##
# = Device infrastructure (qdev)
##

{ 'include': 'qom.json' }

##
# @device-list-properties:
#
# List properties associated with a device.
#
# @typename: the type name of a device
#
# Returns: a list of ObjectPropertyInfo describing a devices
#     properties
#
# .. 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.
#
# Since: 1.2
##
{ 'command': 'device-list-properties',
  'data': { 'typename': 'str'},
  'returns': [ 'ObjectPropertyInfo' ] }

##
# @device_add:
#
# Add a device.
#
# @driver: the name of the new device's driver
#
# @bus: the device's parent bus (device tree path)
#
# @id: the device's ID, must be unique
#
# Features:
#
# @json-cli: If present, the "-device" command line option supports
#     JSON syntax with a structure identical to the arguments of this
#     command.
#
# @json-cli-hotplug: If present, the "-device" command line option
#     supports JSON syntax without the reference counting leak that
#     broke hot-unplug
#
# .. admonition:: Notes
#
#     1. Additional arguments depend on the type.
#
#     2. For detailed information about this command, please refer to
#        the 'docs/qdev-device-use.txt' file.
#
#     3. It's possible to list device properties by running QEMU with
#        the ``-device DEVICE,help`` command-line argument, where DEVICE
#        is the device's name.
#
# Example:
#
#     -> { "execute": "device_add",
#          "arguments": { "driver": "e1000", "id": "net1",
#                         "bus": "pci.0",
#                         "mac": "52:54:00:12:34:56" } }
#     <- { "return": {} }
#
# TODO: This command effectively bypasses QAPI completely due to its
#     "additional arguments" business.  It shouldn't have been added
#     to the schema in this form.  It should be qapified properly, or
#     replaced by a properly qapified command.
#
# Since: 0.13
##
{ 'command': 'device_add',
  'data': {'driver': 'str', '*bus': 'str', '*id': 'str'},
  'gen': false, # so we can get the additional arguments
  'features': ['json-cli', 'json-cli-hotplug'] }

##
# @device_del:
#
# Remove a device from a guest
#
# @id: the device's ID or QOM path
#
# Errors:
#     - If @id is not a valid device, DeviceNotFound
#
# .. note:: When this command completes, the device may not be removed
#    from the guest.  Hot removal is an operation that requires guest
#    cooperation.  This command merely requests that the guest begin the
#    hot removal process.  Completion of the device removal process is
#    signaled with a DEVICE_DELETED event.  Guest reset will
#    automatically complete removal for all devices.  If a guest-side
#    error in the hot removal process is detected, the device will not
#    be removed and a DEVICE_UNPLUG_GUEST_ERROR event is sent.  Some
#    errors cannot be detected.
#
# Since: 0.14
#
# Examples:
#
#     -> { "execute": "device_del",
#          "arguments": { "id": "net1" } }
#     <- { "return": {} }
#
#     -> { "execute": "device_del",
#          "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
#     <- { "return": {} }
##
{ 'command': 'device_del', 'data': {'id': 'str'} }

##
# @DEVICE_DELETED:
#
# Emitted whenever the device removal completion is acknowledged by
# the guest.  At this point, it's safe to reuse the specified device
# ID. Device removal can be initiated by the guest or by HMP/QMP
# commands.
#
# @device: the device's ID if it has one
#
# @path: the device's QOM path
#
# Since: 1.5
#
# Example:
#
#     <- { "event": "DEVICE_DELETED",
#          "data": { "device": "virtio-net-pci-0",
#                    "path": "/machine/peripheral/virtio-net-pci-0" },
#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'DEVICE_DELETED',
  'data': { '*device': 'str', 'path': 'str' } }

##
# @DEVICE_UNPLUG_GUEST_ERROR:
#
# Emitted when a device hot unplug fails due to a guest reported
# error.
#
# @device: the device's ID if it has one
#
# @path: the device's QOM path
#
# Since: 6.2
#
# Example:
#
#     <- { "event": "DEVICE_UNPLUG_GUEST_ERROR",
#          "data": { "device": "core1",
#                    "path": "/machine/peripheral/core1" },
#          "timestamp": { "seconds": 1615570772, "microseconds": 202844 } }
##
{ 'event': 'DEVICE_UNPLUG_GUEST_ERROR',
  'data': { '*device': 'str', 'path': 'str' } }
