xref: /qemu/qapi/pci.json (revision 7653b1ea)
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