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