xref: /qemu/qapi/pci.json (revision 7c1f51bf)
1# -*- Mode: Python -*-
2# vim: filetype=python
3#
4# This work is licensed under the terms of the GNU GPL, version 2 or later.
5# See the COPYING file in the top-level directory.
6# SPDX-License-Identifier: GPL-2.0-or-later
7
8##
9# = PCI
10##
11
12##
13# @PciMemoryRange:
14#
15# A PCI device memory region
16#
17# @base: the starting address (guest physical)
18#
19# @limit: the ending address (guest physical)
20#
21# Since: 0.14
22##
23{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
24
25##
26# @PciMemoryRegion:
27#
28# Information about a PCI device I/O region.
29#
30# @bar: the index of the Base Address Register for this region
31#
32# @type:
33#     - 'io' if the region is a PIO region
34#     - 'memory' if the region is a MMIO region
35#
36# @size: memory size
37#
38# @prefetch: if @type is 'memory', true if the memory is prefetchable
39#
40# @mem_type_64: if @type is 'memory', true if the BAR is 64-bit
41#
42# Since: 0.14
43##
44{ 'struct': 'PciMemoryRegion',
45  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
46           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
47
48##
49# @PciBusInfo:
50#
51# Information about a bus of a PCI Bridge device
52#
53# @number: primary bus interface number.  This should be the number of
54#     the bus the device resides on.
55#
56# @secondary: secondary bus interface number.  This is the number of
57#     the main bus for the bridge
58#
59# @subordinate: This is the highest number bus that resides below the
60#     bridge.
61#
62# @io_range: The PIO range for all devices on this bridge
63#
64# @memory_range: The MMIO range for all devices on this bridge
65#
66# @prefetchable_range: The range of prefetchable MMIO for all devices
67#     on this bridge
68#
69# Since: 2.4
70##
71{ 'struct': 'PciBusInfo',
72  'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
73           'io_range': 'PciMemoryRange',
74           'memory_range': 'PciMemoryRange',
75           'prefetchable_range': 'PciMemoryRange' } }
76
77##
78# @PciBridgeInfo:
79#
80# Information about a PCI Bridge device
81#
82# @bus: information about the bus the device resides on
83#
84# @devices: a list of @PciDeviceInfo for each device on this bridge
85#
86# Since: 0.14
87##
88{ 'struct': 'PciBridgeInfo',
89  'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
90
91##
92# @PciDeviceClass:
93#
94# Information about the Class of a PCI device
95#
96# @desc: a string description of the device's class
97#
98# @class: the class code of the device
99#
100# Since: 2.4
101##
102{ 'struct': 'PciDeviceClass',
103  'data': {'*desc': 'str', 'class': 'int'} }
104
105##
106# @PciDeviceId:
107#
108# Information about the Id of a PCI device
109#
110# @device: the PCI device id
111#
112# @vendor: the PCI vendor id
113#
114# @subsystem: the PCI subsystem id (since 3.1)
115#
116# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
117#
118# Since: 2.4
119##
120{ 'struct': 'PciDeviceId',
121  'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
122            '*subsystem-vendor': 'int'} }
123
124##
125# @PciDeviceInfo:
126#
127# Information about a PCI device
128#
129# @bus: the bus number of the device
130#
131# @slot: the slot the device is located in
132#
133# @function: the function of the slot used by the device
134#
135# @class_info: the class of the device
136#
137# @id: the PCI device id
138#
139# @irq: if an IRQ is assigned to the device, the IRQ number
140#
141# @irq_pin: the IRQ pin, zero means no IRQ (since 5.1)
142#
143# @qdev_id: the device name of the PCI device
144#
145# @pci_bridge: if the device is a PCI bridge, the bridge information
146#
147# @regions: a list of the PCI I/O regions associated with the device
148#
149# Notes: the contents of @class_info.desc are not stable and should
150#     only be treated as informational.
151#
152# Since: 0.14
153##
154{ 'struct': 'PciDeviceInfo',
155  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
156           'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
157           '*irq': 'int', 'irq_pin': 'int', 'qdev_id': 'str',
158           '*pci_bridge': 'PciBridgeInfo', 'regions': ['PciMemoryRegion'] }}
159
160##
161# @PciInfo:
162#
163# Information about a PCI bus
164#
165# @bus: the bus index
166#
167# @devices: a list of devices on this bus
168#
169# Since: 0.14
170##
171{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
172
173##
174# @query-pci:
175#
176# Return information about the PCI bus topology of the guest.
177#
178# Returns: a list of @PciInfo for each PCI bus.  Each bus is
179#     represented by a json-object, which has a key with a json-array
180#     of all PCI devices attached to it.  Each device is represented
181#     by a json-object.
182#
183# Since: 0.14
184#
185# Example:
186#
187# -> { "execute": "query-pci" }
188# <- { "return": [
189#          {
190#             "bus": 0,
191#             "devices": [
192#                {
193#                   "bus": 0,
194#                   "qdev_id": "",
195#                   "slot": 0,
196#                   "class_info": {
197#                      "class": 1536,
198#                      "desc": "Host bridge"
199#                   },
200#                   "id": {
201#                      "device": 32902,
202#                      "vendor": 4663
203#                   },
204#                   "function": 0,
205#                   "regions": [
206#                   ]
207#                },
208#                {
209#                   "bus": 0,
210#                   "qdev_id": "",
211#                   "slot": 1,
212#                   "class_info": {
213#                      "class": 1537,
214#                      "desc": "ISA bridge"
215#                   },
216#                   "id": {
217#                      "device": 32902,
218#                      "vendor": 28672
219#                   },
220#                   "function": 0,
221#                   "regions": [
222#                   ]
223#                },
224#                {
225#                   "bus": 0,
226#                   "qdev_id": "",
227#                   "slot": 1,
228#                   "class_info": {
229#                      "class": 257,
230#                      "desc": "IDE controller"
231#                   },
232#                   "id": {
233#                      "device": 32902,
234#                      "vendor": 28688
235#                   },
236#                   "function": 1,
237#                   "regions": [
238#                      {
239#                         "bar": 4,
240#                         "size": 16,
241#                         "address": 49152,
242#                         "type": "io"
243#                      }
244#                   ]
245#                },
246#                {
247#                   "bus": 0,
248#                   "qdev_id": "",
249#                   "slot": 2,
250#                   "class_info": {
251#                      "class": 768,
252#                      "desc": "VGA controller"
253#                   },
254#                   "id": {
255#                      "device": 4115,
256#                      "vendor": 184
257#                   },
258#                   "function": 0,
259#                   "regions": [
260#                      {
261#                         "prefetch": true,
262#                         "mem_type_64": false,
263#                         "bar": 0,
264#                         "size": 33554432,
265#                         "address": 4026531840,
266#                         "type": "memory"
267#                      },
268#                      {
269#                         "prefetch": false,
270#                         "mem_type_64": false,
271#                         "bar": 1,
272#                         "size": 4096,
273#                         "address": 4060086272,
274#                         "type": "memory"
275#                      },
276#                      {
277#                         "prefetch": false,
278#                         "mem_type_64": false,
279#                         "bar": 6,
280#                         "size": 65536,
281#                         "address": -1,
282#                         "type": "memory"
283#                      }
284#                   ]
285#                },
286#                {
287#                   "bus": 0,
288#                   "qdev_id": "",
289#                   "irq": 11,
290#                   "slot": 4,
291#                   "class_info": {
292#                      "class": 1280,
293#                      "desc": "RAM controller"
294#                   },
295#                   "id": {
296#                      "device": 6900,
297#                      "vendor": 4098
298#                   },
299#                   "function": 0,
300#                   "regions": [
301#                      {
302#                         "bar": 0,
303#                         "size": 32,
304#                         "address": 49280,
305#                         "type": "io"
306#                      }
307#                   ]
308#                }
309#             ]
310#          }
311#       ]
312#    }
313#
314# Note: This example has been shortened as the real response is too
315#     long.
316##
317{ 'command': 'query-pci', 'returns': ['PciInfo'] }
318