xref: /openbmc/qemu/qapi/pci.json (revision 64678fc4)
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 (not stable, and
97#     should only be treated as informational)
98#
99# @class: the class code of the device
100#
101# Since: 2.4
102##
103{ 'struct': 'PciDeviceClass',
104  'data': {'*desc': 'str', 'class': 'int'} }
105
106##
107# @PciDeviceId:
108#
109# Information about the Id of a PCI device
110#
111# @device: the PCI device id
112#
113# @vendor: the PCI vendor id
114#
115# @subsystem: the PCI subsystem id (since 3.1)
116#
117# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
118#
119# Since: 2.4
120##
121{ 'struct': 'PciDeviceId',
122  'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
123            '*subsystem-vendor': 'int'} }
124
125##
126# @PciDeviceInfo:
127#
128# Information about a PCI device
129#
130# @bus: the bus number of the device
131#
132# @slot: the slot the device is located in
133#
134# @function: the function of the slot used by the device
135#
136# @class_info: the class of the device
137#
138# @id: the PCI device id
139#
140# @irq: if an IRQ is assigned to the device, the IRQ number
141#
142# @irq_pin: the IRQ pin, zero means no IRQ (since 5.1)
143#
144# @qdev_id: the device name of the PCI device
145#
146# @pci_bridge: if the device is a PCI bridge, the bridge information
147#
148# @regions: a list of the PCI I/O regions associated with the device
149#
150# Since: 0.14
151##
152{ 'struct': 'PciDeviceInfo',
153  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
154           'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
155           '*irq': 'int', 'irq_pin': 'int', 'qdev_id': 'str',
156           '*pci_bridge': 'PciBridgeInfo', 'regions': ['PciMemoryRegion'] }}
157
158##
159# @PciInfo:
160#
161# Information about a PCI bus
162#
163# @bus: the bus index
164#
165# @devices: a list of devices on this bus
166#
167# Since: 0.14
168##
169{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
170
171##
172# @query-pci:
173#
174# Return information about the PCI bus topology of the guest.
175#
176# Returns: a list of @PciInfo for each PCI bus.  Each bus is
177#     represented by a json-object, which has a key with a json-array
178#     of all PCI devices attached to it.  Each device is represented
179#     by a json-object.
180#
181# Since: 0.14
182#
183# .. qmp-example::
184#
185#     -> { "execute": "query-pci" }
186#     <- { "return": [
187#              {
188#                 "bus": 0,
189#                 "devices": [
190#                    {
191#                       "bus": 0,
192#                       "qdev_id": "",
193#                       "slot": 0,
194#                       "class_info": {
195#                          "class": 1536,
196#                          "desc": "Host bridge"
197#                       },
198#                       "id": {
199#                          "device": 32902,
200#                          "vendor": 4663
201#                       },
202#                       "function": 0,
203#                       "regions": [
204#                       ]
205#                    },
206#                    {
207#                       "bus": 0,
208#                       "qdev_id": "",
209#                       "slot": 1,
210#                       "class_info": {
211#                          "class": 1537,
212#                          "desc": "ISA bridge"
213#                       },
214#                       "id": {
215#                          "device": 32902,
216#                          "vendor": 28672
217#                       },
218#                       "function": 0,
219#                       "regions": [
220#                       ]
221#                    },
222#                    {
223#                       "bus": 0,
224#                       "qdev_id": "",
225#                       "slot": 1,
226#                       "class_info": {
227#                          "class": 257,
228#                          "desc": "IDE controller"
229#                       },
230#                       "id": {
231#                          "device": 32902,
232#                          "vendor": 28688
233#                       },
234#                       "function": 1,
235#                       "regions": [
236#                          {
237#                             "bar": 4,
238#                             "size": 16,
239#                             "address": 49152,
240#                             "type": "io"
241#                          }
242#                       ]
243#                    },
244#                    {
245#                       "bus": 0,
246#                       "qdev_id": "",
247#                       "slot": 2,
248#                       "class_info": {
249#                          "class": 768,
250#                          "desc": "VGA controller"
251#                       },
252#                       "id": {
253#                          "device": 4115,
254#                          "vendor": 184
255#                       },
256#                       "function": 0,
257#                       "regions": [
258#                          {
259#                             "prefetch": true,
260#                             "mem_type_64": false,
261#                             "bar": 0,
262#                             "size": 33554432,
263#                             "address": 4026531840,
264#                             "type": "memory"
265#                          },
266#                          {
267#                             "prefetch": false,
268#                             "mem_type_64": false,
269#                             "bar": 1,
270#                             "size": 4096,
271#                             "address": 4060086272,
272#                             "type": "memory"
273#                          },
274#                          {
275#                             "prefetch": false,
276#                             "mem_type_64": false,
277#                             "bar": 6,
278#                             "size": 65536,
279#                             "address": -1,
280#                             "type": "memory"
281#                          }
282#                       ]
283#                    },
284#                    {
285#                       "bus": 0,
286#                       "qdev_id": "",
287#                       "irq": 11,
288#                       "slot": 4,
289#                       "class_info": {
290#                          "class": 1280,
291#                          "desc": "RAM controller"
292#                       },
293#                       "id": {
294#                          "device": 6900,
295#                          "vendor": 4098
296#                       },
297#                       "function": 0,
298#                       "regions": [
299#                          {
300#                             "bar": 0,
301#                             "size": 32,
302#                             "address": 49280,
303#                             "type": "io"
304#                          }
305#                       ]
306#                    }
307#                 ]
308#              }
309#           ]
310#        }
311#
312# This example has been shortened as the real response is too long.
313##
314{ 'command': 'query-pci', 'returns': ['PciInfo'] }
315