| # -*- 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' } } |