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