# -*- 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.
#
# .. qmp-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
#
# .. qmp-example::
#
#     -> { "execute": "device_del",
#          "arguments": { "id": "net1" } }
#     <- { "return": {} }
#
# .. qmp-example::
#
#     -> { "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
#
# .. qmp-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
#
# .. qmp-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' } }
