xref: /openbmc/qemu/qapi/pci.json (revision 9247378df2b16f427ae858787f84a55b073446b1)
161c7f987SPhilippe Mathieu-Daudé# -*- Mode: Python -*-
261c7f987SPhilippe Mathieu-Daudé# vim: filetype=python
361c7f987SPhilippe Mathieu-Daudé#
461c7f987SPhilippe Mathieu-Daudé# This work is licensed under the terms of the GNU GPL, version 2 or later.
561c7f987SPhilippe Mathieu-Daudé# See the COPYING file in the top-level directory.
661c7f987SPhilippe Mathieu-Daudé# SPDX-License-Identifier: GPL-2.0-or-later
761c7f987SPhilippe Mathieu-Daudé
861c7f987SPhilippe Mathieu-Daudé##
961c7f987SPhilippe Mathieu-Daudé# = PCI
1061c7f987SPhilippe Mathieu-Daudé##
1161c7f987SPhilippe Mathieu-Daudé
1261c7f987SPhilippe Mathieu-Daudé##
1361c7f987SPhilippe Mathieu-Daudé# @PciMemoryRange:
1461c7f987SPhilippe Mathieu-Daudé#
1561c7f987SPhilippe Mathieu-Daudé# A PCI device memory region
1661c7f987SPhilippe Mathieu-Daudé#
1761c7f987SPhilippe Mathieu-Daudé# @base: the starting address (guest physical)
1861c7f987SPhilippe Mathieu-Daudé#
1961c7f987SPhilippe Mathieu-Daudé# @limit: the ending address (guest physical)
2061c7f987SPhilippe Mathieu-Daudé#
219bc6e893SMarkus Armbruster# Since: 0.14
2261c7f987SPhilippe Mathieu-Daudé##
2361c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
2461c7f987SPhilippe Mathieu-Daudé
2561c7f987SPhilippe Mathieu-Daudé##
2661c7f987SPhilippe Mathieu-Daudé# @PciMemoryRegion:
2761c7f987SPhilippe Mathieu-Daudé#
2861c7f987SPhilippe Mathieu-Daudé# Information about a PCI device I/O region.
2961c7f987SPhilippe Mathieu-Daudé#
3061c7f987SPhilippe Mathieu-Daudé# @bar: the index of the Base Address Register for this region
3161c7f987SPhilippe Mathieu-Daudé#
32a937b6aaSMarkus Armbruster# @type:
33a937b6aaSMarkus Armbruster#     - 'io' if the region is a PIO region
3461c7f987SPhilippe Mathieu-Daudé#     - 'memory' if the region is a MMIO region
3561c7f987SPhilippe Mathieu-Daudé#
36*83b91c9dSMarkus Armbruster# @address: memory address
37*83b91c9dSMarkus Armbruster#
3861c7f987SPhilippe Mathieu-Daudé# @size: memory size
3961c7f987SPhilippe Mathieu-Daudé#
4061c7f987SPhilippe Mathieu-Daudé# @prefetch: if @type is 'memory', true if the memory is prefetchable
4161c7f987SPhilippe Mathieu-Daudé#
4261c7f987SPhilippe Mathieu-Daudé# @mem_type_64: if @type is 'memory', true if the BAR is 64-bit
4361c7f987SPhilippe Mathieu-Daudé#
449bc6e893SMarkus Armbruster# Since: 0.14
4561c7f987SPhilippe Mathieu-Daudé##
4661c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciMemoryRegion',
4761c7f987SPhilippe Mathieu-Daudé  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
4861c7f987SPhilippe Mathieu-Daudé           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
4961c7f987SPhilippe Mathieu-Daudé
5061c7f987SPhilippe Mathieu-Daudé##
5161c7f987SPhilippe Mathieu-Daudé# @PciBusInfo:
5261c7f987SPhilippe Mathieu-Daudé#
5361c7f987SPhilippe Mathieu-Daudé# Information about a bus of a PCI Bridge device
5461c7f987SPhilippe Mathieu-Daudé#
55a937b6aaSMarkus Armbruster# @number: primary bus interface number.  This should be the number of
56a937b6aaSMarkus Armbruster#     the bus the device resides on.
5761c7f987SPhilippe Mathieu-Daudé#
58a937b6aaSMarkus Armbruster# @secondary: secondary bus interface number.  This is the number of
59a937b6aaSMarkus Armbruster#     the main bus for the bridge
6061c7f987SPhilippe Mathieu-Daudé#
6161c7f987SPhilippe Mathieu-Daudé# @subordinate: This is the highest number bus that resides below the
6261c7f987SPhilippe Mathieu-Daudé#     bridge.
6361c7f987SPhilippe Mathieu-Daudé#
6461c7f987SPhilippe Mathieu-Daudé# @io_range: The PIO range for all devices on this bridge
6561c7f987SPhilippe Mathieu-Daudé#
6661c7f987SPhilippe Mathieu-Daudé# @memory_range: The MMIO range for all devices on this bridge
6761c7f987SPhilippe Mathieu-Daudé#
68a937b6aaSMarkus Armbruster# @prefetchable_range: The range of prefetchable MMIO for all devices
69a937b6aaSMarkus Armbruster#     on this bridge
7061c7f987SPhilippe Mathieu-Daudé#
7161c7f987SPhilippe Mathieu-Daudé# Since: 2.4
7261c7f987SPhilippe Mathieu-Daudé##
7361c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciBusInfo',
7461c7f987SPhilippe Mathieu-Daudé  'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
7561c7f987SPhilippe Mathieu-Daudé           'io_range': 'PciMemoryRange',
7661c7f987SPhilippe Mathieu-Daudé           'memory_range': 'PciMemoryRange',
7761c7f987SPhilippe Mathieu-Daudé           'prefetchable_range': 'PciMemoryRange' } }
7861c7f987SPhilippe Mathieu-Daudé
7961c7f987SPhilippe Mathieu-Daudé##
8061c7f987SPhilippe Mathieu-Daudé# @PciBridgeInfo:
8161c7f987SPhilippe Mathieu-Daudé#
8261c7f987SPhilippe Mathieu-Daudé# Information about a PCI Bridge device
8361c7f987SPhilippe Mathieu-Daudé#
8461c7f987SPhilippe Mathieu-Daudé# @bus: information about the bus the device resides on
8561c7f987SPhilippe Mathieu-Daudé#
8661c7f987SPhilippe Mathieu-Daudé# @devices: a list of @PciDeviceInfo for each device on this bridge
8761c7f987SPhilippe Mathieu-Daudé#
889bc6e893SMarkus Armbruster# Since: 0.14
8961c7f987SPhilippe Mathieu-Daudé##
9061c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciBridgeInfo',
9161c7f987SPhilippe Mathieu-Daudé  'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
9261c7f987SPhilippe Mathieu-Daudé
9361c7f987SPhilippe Mathieu-Daudé##
9461c7f987SPhilippe Mathieu-Daudé# @PciDeviceClass:
9561c7f987SPhilippe Mathieu-Daudé#
9661c7f987SPhilippe Mathieu-Daudé# Information about the Class of a PCI device
9761c7f987SPhilippe Mathieu-Daudé#
98fbcb6e0cSMarkus Armbruster# @desc: a string description of the device's class (not stable, and
99fbcb6e0cSMarkus Armbruster#     should only be treated as informational)
10061c7f987SPhilippe Mathieu-Daudé#
10161c7f987SPhilippe Mathieu-Daudé# @class: the class code of the device
10261c7f987SPhilippe Mathieu-Daudé#
10361c7f987SPhilippe Mathieu-Daudé# Since: 2.4
10461c7f987SPhilippe Mathieu-Daudé##
10561c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciDeviceClass',
10661c7f987SPhilippe Mathieu-Daudé  'data': {'*desc': 'str', 'class': 'int'} }
10761c7f987SPhilippe Mathieu-Daudé
10861c7f987SPhilippe Mathieu-Daudé##
10961c7f987SPhilippe Mathieu-Daudé# @PciDeviceId:
11061c7f987SPhilippe Mathieu-Daudé#
11161c7f987SPhilippe Mathieu-Daudé# Information about the Id of a PCI device
11261c7f987SPhilippe Mathieu-Daudé#
11361c7f987SPhilippe Mathieu-Daudé# @device: the PCI device id
11461c7f987SPhilippe Mathieu-Daudé#
11561c7f987SPhilippe Mathieu-Daudé# @vendor: the PCI vendor id
11661c7f987SPhilippe Mathieu-Daudé#
11761c7f987SPhilippe Mathieu-Daudé# @subsystem: the PCI subsystem id (since 3.1)
11861c7f987SPhilippe Mathieu-Daudé#
11961c7f987SPhilippe Mathieu-Daudé# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
12061c7f987SPhilippe Mathieu-Daudé#
12161c7f987SPhilippe Mathieu-Daudé# Since: 2.4
12261c7f987SPhilippe Mathieu-Daudé##
12361c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciDeviceId',
12461c7f987SPhilippe Mathieu-Daudé  'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
12561c7f987SPhilippe Mathieu-Daudé            '*subsystem-vendor': 'int'} }
12661c7f987SPhilippe Mathieu-Daudé
12761c7f987SPhilippe Mathieu-Daudé##
12861c7f987SPhilippe Mathieu-Daudé# @PciDeviceInfo:
12961c7f987SPhilippe Mathieu-Daudé#
13061c7f987SPhilippe Mathieu-Daudé# Information about a PCI device
13161c7f987SPhilippe Mathieu-Daudé#
13261c7f987SPhilippe Mathieu-Daudé# @bus: the bus number of the device
13361c7f987SPhilippe Mathieu-Daudé#
13461c7f987SPhilippe Mathieu-Daudé# @slot: the slot the device is located in
13561c7f987SPhilippe Mathieu-Daudé#
13661c7f987SPhilippe Mathieu-Daudé# @function: the function of the slot used by the device
13761c7f987SPhilippe Mathieu-Daudé#
13861c7f987SPhilippe Mathieu-Daudé# @class_info: the class of the device
13961c7f987SPhilippe Mathieu-Daudé#
14061c7f987SPhilippe Mathieu-Daudé# @id: the PCI device id
14161c7f987SPhilippe Mathieu-Daudé#
14261c7f987SPhilippe Mathieu-Daudé# @irq: if an IRQ is assigned to the device, the IRQ number
14361c7f987SPhilippe Mathieu-Daudé#
14461c7f987SPhilippe Mathieu-Daudé# @irq_pin: the IRQ pin, zero means no IRQ (since 5.1)
14561c7f987SPhilippe Mathieu-Daudé#
14661c7f987SPhilippe Mathieu-Daudé# @qdev_id: the device name of the PCI device
14761c7f987SPhilippe Mathieu-Daudé#
14861c7f987SPhilippe Mathieu-Daudé# @pci_bridge: if the device is a PCI bridge, the bridge information
14961c7f987SPhilippe Mathieu-Daudé#
15061c7f987SPhilippe Mathieu-Daudé# @regions: a list of the PCI I/O regions associated with the device
15161c7f987SPhilippe Mathieu-Daudé#
1529bc6e893SMarkus Armbruster# Since: 0.14
15361c7f987SPhilippe Mathieu-Daudé##
15461c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciDeviceInfo',
15561c7f987SPhilippe Mathieu-Daudé  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
15661c7f987SPhilippe Mathieu-Daudé           'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
15761c7f987SPhilippe Mathieu-Daudé           '*irq': 'int', 'irq_pin': 'int', 'qdev_id': 'str',
15861c7f987SPhilippe Mathieu-Daudé           '*pci_bridge': 'PciBridgeInfo', 'regions': ['PciMemoryRegion'] }}
15961c7f987SPhilippe Mathieu-Daudé
16061c7f987SPhilippe Mathieu-Daudé##
16161c7f987SPhilippe Mathieu-Daudé# @PciInfo:
16261c7f987SPhilippe Mathieu-Daudé#
16361c7f987SPhilippe Mathieu-Daudé# Information about a PCI bus
16461c7f987SPhilippe Mathieu-Daudé#
16561c7f987SPhilippe Mathieu-Daudé# @bus: the bus index
16661c7f987SPhilippe Mathieu-Daudé#
16761c7f987SPhilippe Mathieu-Daudé# @devices: a list of devices on this bus
16861c7f987SPhilippe Mathieu-Daudé#
1699bc6e893SMarkus Armbruster# Since: 0.14
17061c7f987SPhilippe Mathieu-Daudé##
17161c7f987SPhilippe Mathieu-Daudé{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
17261c7f987SPhilippe Mathieu-Daudé
17361c7f987SPhilippe Mathieu-Daudé##
17461c7f987SPhilippe Mathieu-Daudé# @query-pci:
17561c7f987SPhilippe Mathieu-Daudé#
17661c7f987SPhilippe Mathieu-Daudé# Return information about the PCI bus topology of the guest.
17761c7f987SPhilippe Mathieu-Daudé#
17861c7f987SPhilippe Mathieu-Daudé# Returns: a list of @PciInfo for each PCI bus.  Each bus is
179a937b6aaSMarkus Armbruster#     represented by a json-object, which has a key with a json-array
180a937b6aaSMarkus Armbruster#     of all PCI devices attached to it.  Each device is represented
181a937b6aaSMarkus Armbruster#     by a json-object.
18261c7f987SPhilippe Mathieu-Daudé#
1839bc6e893SMarkus Armbruster# Since: 0.14
18461c7f987SPhilippe Mathieu-Daudé#
18514b48aaaSJohn Snow# .. qmp-example::
18661c7f987SPhilippe Mathieu-Daudé#
18761c7f987SPhilippe Mathieu-Daudé#     -> { "execute": "query-pci" }
18861c7f987SPhilippe Mathieu-Daudé#     <- { "return": [
18961c7f987SPhilippe Mathieu-Daudé#              {
19061c7f987SPhilippe Mathieu-Daudé#                 "bus": 0,
19161c7f987SPhilippe Mathieu-Daudé#                 "devices": [
19261c7f987SPhilippe Mathieu-Daudé#                    {
19361c7f987SPhilippe Mathieu-Daudé#                       "bus": 0,
19461c7f987SPhilippe Mathieu-Daudé#                       "qdev_id": "",
19561c7f987SPhilippe Mathieu-Daudé#                       "slot": 0,
19661c7f987SPhilippe Mathieu-Daudé#                       "class_info": {
19761c7f987SPhilippe Mathieu-Daudé#                          "class": 1536,
19861c7f987SPhilippe Mathieu-Daudé#                          "desc": "Host bridge"
19961c7f987SPhilippe Mathieu-Daudé#                       },
20061c7f987SPhilippe Mathieu-Daudé#                       "id": {
20161c7f987SPhilippe Mathieu-Daudé#                          "device": 32902,
20261c7f987SPhilippe Mathieu-Daudé#                          "vendor": 4663
20361c7f987SPhilippe Mathieu-Daudé#                       },
20461c7f987SPhilippe Mathieu-Daudé#                       "function": 0,
20561c7f987SPhilippe Mathieu-Daudé#                       "regions": [
20661c7f987SPhilippe Mathieu-Daudé#                       ]
20761c7f987SPhilippe Mathieu-Daudé#                    },
20861c7f987SPhilippe Mathieu-Daudé#                    {
20961c7f987SPhilippe Mathieu-Daudé#                       "bus": 0,
21061c7f987SPhilippe Mathieu-Daudé#                       "qdev_id": "",
21161c7f987SPhilippe Mathieu-Daudé#                       "slot": 1,
21261c7f987SPhilippe Mathieu-Daudé#                       "class_info": {
21361c7f987SPhilippe Mathieu-Daudé#                          "class": 1537,
21461c7f987SPhilippe Mathieu-Daudé#                          "desc": "ISA bridge"
21561c7f987SPhilippe Mathieu-Daudé#                       },
21661c7f987SPhilippe Mathieu-Daudé#                       "id": {
21761c7f987SPhilippe Mathieu-Daudé#                          "device": 32902,
21861c7f987SPhilippe Mathieu-Daudé#                          "vendor": 28672
21961c7f987SPhilippe Mathieu-Daudé#                       },
22061c7f987SPhilippe Mathieu-Daudé#                       "function": 0,
22161c7f987SPhilippe Mathieu-Daudé#                       "regions": [
22261c7f987SPhilippe Mathieu-Daudé#                       ]
22361c7f987SPhilippe Mathieu-Daudé#                    },
22461c7f987SPhilippe Mathieu-Daudé#                    {
22561c7f987SPhilippe Mathieu-Daudé#                       "bus": 0,
22661c7f987SPhilippe Mathieu-Daudé#                       "qdev_id": "",
22761c7f987SPhilippe Mathieu-Daudé#                       "slot": 1,
22861c7f987SPhilippe Mathieu-Daudé#                       "class_info": {
22961c7f987SPhilippe Mathieu-Daudé#                          "class": 257,
23061c7f987SPhilippe Mathieu-Daudé#                          "desc": "IDE controller"
23161c7f987SPhilippe Mathieu-Daudé#                       },
23261c7f987SPhilippe Mathieu-Daudé#                       "id": {
23361c7f987SPhilippe Mathieu-Daudé#                          "device": 32902,
23461c7f987SPhilippe Mathieu-Daudé#                          "vendor": 28688
23561c7f987SPhilippe Mathieu-Daudé#                       },
23661c7f987SPhilippe Mathieu-Daudé#                       "function": 1,
23761c7f987SPhilippe Mathieu-Daudé#                       "regions": [
23861c7f987SPhilippe Mathieu-Daudé#                          {
23961c7f987SPhilippe Mathieu-Daudé#                             "bar": 4,
24061c7f987SPhilippe Mathieu-Daudé#                             "size": 16,
24161c7f987SPhilippe Mathieu-Daudé#                             "address": 49152,
24261c7f987SPhilippe Mathieu-Daudé#                             "type": "io"
24361c7f987SPhilippe Mathieu-Daudé#                          }
24461c7f987SPhilippe Mathieu-Daudé#                       ]
24561c7f987SPhilippe Mathieu-Daudé#                    },
24661c7f987SPhilippe Mathieu-Daudé#                    {
24761c7f987SPhilippe Mathieu-Daudé#                       "bus": 0,
24861c7f987SPhilippe Mathieu-Daudé#                       "qdev_id": "",
24961c7f987SPhilippe Mathieu-Daudé#                       "slot": 2,
25061c7f987SPhilippe Mathieu-Daudé#                       "class_info": {
25161c7f987SPhilippe Mathieu-Daudé#                          "class": 768,
25261c7f987SPhilippe Mathieu-Daudé#                          "desc": "VGA controller"
25361c7f987SPhilippe Mathieu-Daudé#                       },
25461c7f987SPhilippe Mathieu-Daudé#                       "id": {
25561c7f987SPhilippe Mathieu-Daudé#                          "device": 4115,
25661c7f987SPhilippe Mathieu-Daudé#                          "vendor": 184
25761c7f987SPhilippe Mathieu-Daudé#                       },
25861c7f987SPhilippe Mathieu-Daudé#                       "function": 0,
25961c7f987SPhilippe Mathieu-Daudé#                       "regions": [
26061c7f987SPhilippe Mathieu-Daudé#                          {
26161c7f987SPhilippe Mathieu-Daudé#                             "prefetch": true,
26261c7f987SPhilippe Mathieu-Daudé#                             "mem_type_64": false,
26361c7f987SPhilippe Mathieu-Daudé#                             "bar": 0,
26461c7f987SPhilippe Mathieu-Daudé#                             "size": 33554432,
26561c7f987SPhilippe Mathieu-Daudé#                             "address": 4026531840,
26661c7f987SPhilippe Mathieu-Daudé#                             "type": "memory"
26761c7f987SPhilippe Mathieu-Daudé#                          },
26861c7f987SPhilippe Mathieu-Daudé#                          {
26961c7f987SPhilippe Mathieu-Daudé#                             "prefetch": false,
27061c7f987SPhilippe Mathieu-Daudé#                             "mem_type_64": false,
27161c7f987SPhilippe Mathieu-Daudé#                             "bar": 1,
27261c7f987SPhilippe Mathieu-Daudé#                             "size": 4096,
27361c7f987SPhilippe Mathieu-Daudé#                             "address": 4060086272,
27461c7f987SPhilippe Mathieu-Daudé#                             "type": "memory"
27561c7f987SPhilippe Mathieu-Daudé#                          },
27661c7f987SPhilippe Mathieu-Daudé#                          {
27761c7f987SPhilippe Mathieu-Daudé#                             "prefetch": false,
27861c7f987SPhilippe Mathieu-Daudé#                             "mem_type_64": false,
27961c7f987SPhilippe Mathieu-Daudé#                             "bar": 6,
28061c7f987SPhilippe Mathieu-Daudé#                             "size": 65536,
28161c7f987SPhilippe Mathieu-Daudé#                             "address": -1,
28261c7f987SPhilippe Mathieu-Daudé#                             "type": "memory"
28361c7f987SPhilippe Mathieu-Daudé#                          }
28461c7f987SPhilippe Mathieu-Daudé#                       ]
28561c7f987SPhilippe Mathieu-Daudé#                    },
28661c7f987SPhilippe Mathieu-Daudé#                    {
28761c7f987SPhilippe Mathieu-Daudé#                       "bus": 0,
28861c7f987SPhilippe Mathieu-Daudé#                       "qdev_id": "",
28961c7f987SPhilippe Mathieu-Daudé#                       "irq": 11,
29061c7f987SPhilippe Mathieu-Daudé#                       "slot": 4,
29161c7f987SPhilippe Mathieu-Daudé#                       "class_info": {
29261c7f987SPhilippe Mathieu-Daudé#                          "class": 1280,
29361c7f987SPhilippe Mathieu-Daudé#                          "desc": "RAM controller"
29461c7f987SPhilippe Mathieu-Daudé#                       },
29561c7f987SPhilippe Mathieu-Daudé#                       "id": {
29661c7f987SPhilippe Mathieu-Daudé#                          "device": 6900,
29761c7f987SPhilippe Mathieu-Daudé#                          "vendor": 4098
29861c7f987SPhilippe Mathieu-Daudé#                       },
29961c7f987SPhilippe Mathieu-Daudé#                       "function": 0,
30061c7f987SPhilippe Mathieu-Daudé#                       "regions": [
30161c7f987SPhilippe Mathieu-Daudé#                          {
30261c7f987SPhilippe Mathieu-Daudé#                             "bar": 0,
30361c7f987SPhilippe Mathieu-Daudé#                             "size": 32,
30461c7f987SPhilippe Mathieu-Daudé#                             "address": 49280,
30561c7f987SPhilippe Mathieu-Daudé#                             "type": "io"
30661c7f987SPhilippe Mathieu-Daudé#                          }
30761c7f987SPhilippe Mathieu-Daudé#                       ]
30861c7f987SPhilippe Mathieu-Daudé#                    }
30961c7f987SPhilippe Mathieu-Daudé#                 ]
31061c7f987SPhilippe Mathieu-Daudé#              }
31161c7f987SPhilippe Mathieu-Daudé#           ]
31261c7f987SPhilippe Mathieu-Daudé#        }
31361c7f987SPhilippe Mathieu-Daudé#
314d461c279SJohn Snow# This example has been shortened as the real response is too long.
31561c7f987SPhilippe Mathieu-Daudé##
31661c7f987SPhilippe Mathieu-Daudé{ 'command': 'query-pci', 'returns': ['PciInfo'] }
317