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