xref: /openbmc/qemu/qapi/qdev.json (revision 24602b77f5658ae8377958c15fdef2f44affc743)
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