2019-06-19 23:10:37 +03:00
|
|
|
# -*- Mode: Python -*-
|
2020-07-29 21:50:24 +03:00
|
|
|
# vim: filetype=python
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
#
|
2023-04-28 13:54:29 +03:00
|
|
|
# Returns: a list of ObjectPropertyInfo describing a devices
|
|
|
|
# properties
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2023-04-28 13:54:29 +03:00
|
|
|
# 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.
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# Since: 1.2
|
|
|
|
##
|
|
|
|
{ 'command': 'device-list-properties',
|
|
|
|
'data': { 'typename': 'str'},
|
|
|
|
'returns': [ 'ObjectPropertyInfo' ] }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @device_add:
|
|
|
|
#
|
2021-10-08 16:34:42 +03:00
|
|
|
# Add a device.
|
|
|
|
#
|
2019-06-19 23:10:37 +03:00
|
|
|
# @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
|
|
|
|
#
|
2021-10-08 16:34:42 +03:00
|
|
|
# Features:
|
2023-04-28 13:54:29 +03:00
|
|
|
#
|
|
|
|
# @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
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# Notes:
|
2021-10-08 16:34:42 +03:00
|
|
|
#
|
2024-02-05 10:46:58 +03:00
|
|
|
# 1. Additional arguments depend on the type.
|
2021-10-08 16:34:42 +03:00
|
|
|
#
|
2024-02-05 10:46:58 +03:00
|
|
|
# 2. For detailed information about this command, please refer to
|
|
|
|
# the 'docs/qdev-device-use.txt' file.
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2024-02-05 10:46:58 +03:00
|
|
|
# 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
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
2024-02-16 17:58:34 +03:00
|
|
|
# -> { "execute": "device_add",
|
|
|
|
# "arguments": { "driver": "e1000", "id": "net1",
|
|
|
|
# "bus": "pci.0",
|
|
|
|
# "mac": "52:54:00:12:34:56" } }
|
|
|
|
# <- { "return": {} }
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# TODO: This command effectively bypasses QAPI completely due to its
|
2023-04-28 13:54:29 +03:00
|
|
|
# "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.
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# Since: 0.13
|
|
|
|
##
|
|
|
|
{ 'command': 'device_add',
|
|
|
|
'data': {'driver': 'str', '*bus': 'str', '*id': 'str'},
|
2021-10-08 16:34:42 +03:00
|
|
|
'gen': false, # so we can get the additional arguments
|
2022-01-05 15:38:47 +03:00
|
|
|
'features': ['json-cli', 'json-cli-hotplug'] }
|
2019-06-19 23:10:37 +03:00
|
|
|
|
|
|
|
##
|
|
|
|
# @device_del:
|
|
|
|
#
|
|
|
|
# Remove a device from a guest
|
|
|
|
#
|
|
|
|
# @id: the device's ID or QOM path
|
|
|
|
#
|
2024-01-20 12:53:25 +03:00
|
|
|
# Returns:
|
|
|
|
# - Nothing on success
|
|
|
|
# - If @id is not a valid device, DeviceNotFound
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2023-04-28 13:54:29 +03:00
|
|
|
# Notes: 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.
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2020-11-18 09:41:58 +03:00
|
|
|
# Since: 0.14
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2023-04-25 09:42:14 +03:00
|
|
|
# Examples:
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2024-02-16 17:58:34 +03:00
|
|
|
# -> { "execute": "device_del",
|
|
|
|
# "arguments": { "id": "net1" } }
|
|
|
|
# <- { "return": {} }
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2024-02-16 17:58:34 +03:00
|
|
|
# -> { "execute": "device_del",
|
|
|
|
# "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
|
|
|
|
# <- { "return": {} }
|
2019-06-19 23:10:37 +03:00
|
|
|
##
|
|
|
|
{ 'command': 'device_del', 'data': {'id': 'str'} }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @DEVICE_DELETED:
|
|
|
|
#
|
2023-04-28 13:54:29 +03:00
|
|
|
# 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.
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2021-09-07 03:47:52 +03:00
|
|
|
# @device: the device's ID if it has one
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
2021-09-07 03:47:52 +03:00
|
|
|
# @path: the device's QOM path
|
2019-06-19 23:10:37 +03:00
|
|
|
#
|
|
|
|
# Since: 1.5
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
2024-02-16 17:58:34 +03:00
|
|
|
# <- { "event": "DEVICE_DELETED",
|
|
|
|
# "data": { "device": "virtio-net-pci-0",
|
|
|
|
# "path": "/machine/peripheral/virtio-net-pci-0" },
|
|
|
|
# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
|
2019-06-19 23:10:37 +03:00
|
|
|
##
|
|
|
|
{ 'event': 'DEVICE_DELETED',
|
|
|
|
'data': { '*device': 'str', 'path': 'str' } }
|
2021-09-07 03:47:53 +03:00
|
|
|
|
|
|
|
##
|
|
|
|
# @DEVICE_UNPLUG_GUEST_ERROR:
|
|
|
|
#
|
2023-04-28 13:54:29 +03:00
|
|
|
# Emitted when a device hot unplug fails due to a guest reported
|
|
|
|
# error.
|
2021-09-07 03:47:53 +03:00
|
|
|
#
|
|
|
|
# @device: the device's ID if it has one
|
|
|
|
#
|
|
|
|
# @path: the device's QOM path
|
|
|
|
#
|
|
|
|
# Since: 6.2
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
2024-02-16 17:58:34 +03:00
|
|
|
# <- { "event": "DEVICE_UNPLUG_GUEST_ERROR",
|
|
|
|
# "data": { "device": "core1",
|
|
|
|
# "path": "/machine/peripheral/core1" },
|
|
|
|
# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } }
|
2021-09-07 03:47:53 +03:00
|
|
|
##
|
|
|
|
{ 'event': 'DEVICE_UNPLUG_GUEST_ERROR',
|
|
|
|
'data': { '*device': 'str', 'path': 'str' } }
|