1c577ff62SMarkus Armbruster# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 3c577ff62SMarkus Armbruster# 4c577ff62SMarkus Armbruster# This work is licensed under the terms of the GNU GPL, version 2 or later. 5c577ff62SMarkus Armbruster# See the COPYING file in the top-level directory. 6c577ff62SMarkus Armbruster 7c577ff62SMarkus Armbruster## 8c577ff62SMarkus Armbruster# = Device infrastructure (qdev) 9c577ff62SMarkus Armbruster## 10c577ff62SMarkus Armbruster 11c577ff62SMarkus Armbruster{ 'include': 'qom.json' } 12c577ff62SMarkus Armbruster 13c577ff62SMarkus Armbruster## 14c577ff62SMarkus Armbruster# @device-list-properties: 15c577ff62SMarkus Armbruster# 16c577ff62SMarkus Armbruster# List properties associated with a device. 17c577ff62SMarkus Armbruster# 18c577ff62SMarkus Armbruster# @typename: the type name of a device 19c577ff62SMarkus Armbruster# 20a937b6aaSMarkus Armbruster# Returns: a list of ObjectPropertyInfo describing a devices 21a937b6aaSMarkus Armbruster# properties 22c577ff62SMarkus Armbruster# 23d461c279SJohn Snow# .. note:: Objects can create properties at runtime, for example to 24a937b6aaSMarkus Armbruster# describe links between different devices and/or objects. These 25a937b6aaSMarkus Armbruster# properties are not included in the output of this command. 26c577ff62SMarkus Armbruster# 27c577ff62SMarkus Armbruster# Since: 1.2 28c577ff62SMarkus Armbruster## 29c577ff62SMarkus Armbruster{ 'command': 'device-list-properties', 30c577ff62SMarkus Armbruster 'data': { 'typename': 'str'}, 31c577ff62SMarkus Armbruster 'returns': [ 'ObjectPropertyInfo' ] } 32c577ff62SMarkus Armbruster 33c577ff62SMarkus Armbruster## 34c577ff62SMarkus Armbruster# @device_add: 35c577ff62SMarkus Armbruster# 365dacda51SKevin Wolf# Add a device. 375dacda51SKevin Wolf# 38c577ff62SMarkus Armbruster# @driver: the name of the new device's driver 39c577ff62SMarkus Armbruster# 40c577ff62SMarkus Armbruster# @bus: the device's parent bus (device tree path) 41c577ff62SMarkus Armbruster# 42c577ff62SMarkus Armbruster# @id: the device's ID, must be unique 43c577ff62SMarkus Armbruster# 445dacda51SKevin Wolf# Features: 45a937b6aaSMarkus Armbruster# 46a937b6aaSMarkus Armbruster# @json-cli: If present, the "-device" command line option supports 47a937b6aaSMarkus Armbruster# JSON syntax with a structure identical to the arguments of this 485dacda51SKevin Wolf# command. 49a937b6aaSMarkus Armbruster# 50a937b6aaSMarkus Armbruster# @json-cli-hotplug: If present, the "-device" command line option 51a937b6aaSMarkus Armbruster# supports JSON syntax without the reference counting leak that 52a937b6aaSMarkus Armbruster# broke hot-unplug 53c577ff62SMarkus Armbruster# 54d461c279SJohn Snow# .. admonition:: Notes 555dacda51SKevin Wolf# 56a9c72efdSMarkus Armbruster# 1. Additional arguments depend on the type. 575dacda51SKevin Wolf# 581ed1d4d6SMarkus Armbruster# 2. For detailed information about this command, please refer to 591ed1d4d6SMarkus Armbruster# the 'docs/qdev-device-use.txt' file. 60c577ff62SMarkus Armbruster# 611ed1d4d6SMarkus Armbruster# 3. It's possible to list device properties by running QEMU with 6201bed0ffSMarkus Armbruster# the ``-device DEVICE,help`` command-line argument, where 6301bed0ffSMarkus Armbruster# DEVICE is the device's name. 64c577ff62SMarkus Armbruster# 6514b48aaaSJohn Snow# .. qmp-example:: 66c577ff62SMarkus Armbruster# 67c577ff62SMarkus Armbruster# -> { "execute": "device_add", 68c577ff62SMarkus Armbruster# "arguments": { "driver": "e1000", "id": "net1", 69c577ff62SMarkus Armbruster# "bus": "pci.0", 70c577ff62SMarkus Armbruster# "mac": "52:54:00:12:34:56" } } 71c577ff62SMarkus Armbruster# <- { "return": {} } 72c577ff62SMarkus Armbruster# 73c577ff62SMarkus Armbruster# TODO: This command effectively bypasses QAPI completely due to its 74a937b6aaSMarkus Armbruster# "additional arguments" business. It shouldn't have been added 75a937b6aaSMarkus Armbruster# to the schema in this form. It should be qapified properly, or 76c577ff62SMarkus Armbruster# replaced by a properly qapified command. 77c577ff62SMarkus Armbruster# 78c577ff62SMarkus Armbruster# Since: 0.13 79c577ff62SMarkus Armbruster## 80c577ff62SMarkus Armbruster{ 'command': 'device_add', 81c577ff62SMarkus Armbruster 'data': {'driver': 'str', '*bus': 'str', '*id': 'str'}, 825dacda51SKevin Wolf 'gen': false, # so we can get the additional arguments 8364b4529aSDaniel P. Berrangé 'features': ['json-cli', 'json-cli-hotplug'] } 84c577ff62SMarkus Armbruster 85c577ff62SMarkus Armbruster## 86c577ff62SMarkus Armbruster# @device_del: 87c577ff62SMarkus Armbruster# 88c577ff62SMarkus Armbruster# Remove a device from a guest 89c577ff62SMarkus Armbruster# 90c577ff62SMarkus Armbruster# @id: the device's ID or QOM path 91c577ff62SMarkus Armbruster# 922746f060SMarkus Armbruster# Errors: 93ae7ccd50SMarkus Armbruster# - If @id is not a valid device, DeviceNotFound 94c577ff62SMarkus Armbruster# 95d461c279SJohn Snow# .. note:: When this command completes, the device may not be removed 96a937b6aaSMarkus Armbruster# from the guest. Hot removal is an operation that requires guest 9701bed0ffSMarkus Armbruster# cooperation. This command merely requests that the guest begin 9801bed0ffSMarkus Armbruster# the hot removal process. Completion of the device removal 9901bed0ffSMarkus Armbruster# process is signaled with a DEVICE_DELETED event. Guest reset 10001bed0ffSMarkus Armbruster# will automatically complete removal for all devices. If a 10101bed0ffSMarkus Armbruster# guest-side error in the hot removal process is detected, the 10201bed0ffSMarkus Armbruster# device will not be removed and a DEVICE_UNPLUG_GUEST_ERROR event 10301bed0ffSMarkus Armbruster# is sent. Some errors cannot be detected. 104c577ff62SMarkus Armbruster# 1059bc6e893SMarkus Armbruster# Since: 0.14 106c577ff62SMarkus Armbruster# 10714b48aaaSJohn Snow# .. qmp-example:: 108c577ff62SMarkus Armbruster# 109c577ff62SMarkus Armbruster# -> { "execute": "device_del", 110c577ff62SMarkus Armbruster# "arguments": { "id": "net1" } } 111c577ff62SMarkus Armbruster# <- { "return": {} } 112c577ff62SMarkus Armbruster# 11314b48aaaSJohn Snow# .. qmp-example:: 11414b48aaaSJohn Snow# 115c577ff62SMarkus Armbruster# -> { "execute": "device_del", 116c577ff62SMarkus Armbruster# "arguments": { "id": "/machine/peripheral-anon/device[0]" } } 117c577ff62SMarkus Armbruster# <- { "return": {} } 118c577ff62SMarkus Armbruster## 119c577ff62SMarkus Armbruster{ 'command': 'device_del', 'data': {'id': 'str'} } 120c577ff62SMarkus Armbruster 121c577ff62SMarkus Armbruster## 122c577ff62SMarkus Armbruster# @DEVICE_DELETED: 123c577ff62SMarkus Armbruster# 124a937b6aaSMarkus Armbruster# Emitted whenever the device removal completion is acknowledged by 125a937b6aaSMarkus Armbruster# the guest. At this point, it's safe to reuse the specified device 126a937b6aaSMarkus Armbruster# ID. Device removal can be initiated by the guest or by HMP/QMP 127a937b6aaSMarkus Armbruster# commands. 128c577ff62SMarkus Armbruster# 129a5bc19c5SDaniel Henrique Barboza# @device: the device's ID if it has one 130c577ff62SMarkus Armbruster# 131a5bc19c5SDaniel Henrique Barboza# @path: the device's QOM path 132c577ff62SMarkus Armbruster# 133c577ff62SMarkus Armbruster# Since: 1.5 134c577ff62SMarkus Armbruster# 13514b48aaaSJohn Snow# .. qmp-example:: 136c577ff62SMarkus Armbruster# 137c577ff62SMarkus Armbruster# <- { "event": "DEVICE_DELETED", 138c577ff62SMarkus Armbruster# "data": { "device": "virtio-net-pci-0", 139c577ff62SMarkus Armbruster# "path": "/machine/peripheral/virtio-net-pci-0" }, 140c577ff62SMarkus Armbruster# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 141c577ff62SMarkus Armbruster## 142c577ff62SMarkus Armbruster{ 'event': 'DEVICE_DELETED', 143c577ff62SMarkus Armbruster 'data': { '*device': 'str', 'path': 'str' } } 144d43f1670SDaniel Henrique Barboza 145d43f1670SDaniel Henrique Barboza## 146d43f1670SDaniel Henrique Barboza# @DEVICE_UNPLUG_GUEST_ERROR: 147d43f1670SDaniel Henrique Barboza# 148a937b6aaSMarkus Armbruster# Emitted when a device hot unplug fails due to a guest reported 149a937b6aaSMarkus Armbruster# error. 150d43f1670SDaniel Henrique Barboza# 151d43f1670SDaniel Henrique Barboza# @device: the device's ID if it has one 152d43f1670SDaniel Henrique Barboza# 153d43f1670SDaniel Henrique Barboza# @path: the device's QOM path 154d43f1670SDaniel Henrique Barboza# 155d43f1670SDaniel Henrique Barboza# Since: 6.2 156d43f1670SDaniel Henrique Barboza# 15714b48aaaSJohn Snow# .. qmp-example:: 158d43f1670SDaniel Henrique Barboza# 1590cd5a5e9SVictor Toso# <- { "event": "DEVICE_UNPLUG_GUEST_ERROR", 160d43f1670SDaniel Henrique Barboza# "data": { "device": "core1", 161d43f1670SDaniel Henrique Barboza# "path": "/machine/peripheral/core1" }, 162d43f1670SDaniel Henrique Barboza# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } } 163d43f1670SDaniel Henrique Barboza## 164d43f1670SDaniel Henrique Barboza{ 'event': 'DEVICE_UNPLUG_GUEST_ERROR', 165d43f1670SDaniel Henrique Barboza 'data': { '*device': 'str', 'path': 'str' } } 1663f98408eSVladimir Sementsov-Ogievskiy 1673f98408eSVladimir Sementsov-Ogievskiy## 1683f98408eSVladimir Sementsov-Ogievskiy# @device-sync-config: 1693f98408eSVladimir Sementsov-Ogievskiy# 1703f98408eSVladimir Sementsov-Ogievskiy# Synchronize device configuration from host to guest part. First, 1713f98408eSVladimir Sementsov-Ogievskiy# copy the configuration from the host part (backend) to the guest 1723f98408eSVladimir Sementsov-Ogievskiy# part (frontend). Then notify guest software that device 1733f98408eSVladimir Sementsov-Ogievskiy# configuration changed. 1743f98408eSVladimir Sementsov-Ogievskiy# 1753f98408eSVladimir Sementsov-Ogievskiy# The command may be used to notify the guest about block device 1763f98408eSVladimir Sementsov-Ogievskiy# capcity change. Currently only vhost-user-blk device supports 1773f98408eSVladimir Sementsov-Ogievskiy# this. 1783f98408eSVladimir Sementsov-Ogievskiy# 1793f98408eSVladimir Sementsov-Ogievskiy# @id: the device's ID or QOM path 1803f98408eSVladimir Sementsov-Ogievskiy# 1813f98408eSVladimir Sementsov-Ogievskiy# Features: 1823f98408eSVladimir Sementsov-Ogievskiy# 1833f98408eSVladimir Sementsov-Ogievskiy# @unstable: The command is experimental. 1843f98408eSVladimir Sementsov-Ogievskiy# 185*e069c115SVladimir Sementsov-Ogievskiy# Since: 9.2 1863f98408eSVladimir Sementsov-Ogievskiy## 1873f98408eSVladimir Sementsov-Ogievskiy{ 'command': 'device-sync-config', 1883f98408eSVladimir Sementsov-Ogievskiy 'features': [ 'unstable' ], 1893f98408eSVladimir Sementsov-Ogievskiy 'data': {'id': 'str'} } 190