pci.json (8611B)
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: - 'io' if the region is a PIO region 33 # - 'memory' if the region is a MMIO region 34 # 35 # @size: memory size 36 # 37 # @prefetch: if @type is 'memory', true if the memory is prefetchable 38 # 39 # @mem_type_64: if @type is 'memory', true if the BAR is 64-bit 40 # 41 # Since: 0.14 42 ## 43 { 'struct': 'PciMemoryRegion', 44 'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int', 45 '*prefetch': 'bool', '*mem_type_64': 'bool' } } 46 47 ## 48 # @PciBusInfo: 49 # 50 # Information about a bus of a PCI Bridge device 51 # 52 # @number: primary bus interface number. This should be the number of the 53 # bus the device resides on. 54 # 55 # @secondary: secondary bus interface number. This is the number of the 56 # main bus for the bridge 57 # 58 # @subordinate: This is the highest number bus that resides below the 59 # bridge. 60 # 61 # @io_range: The PIO range for all devices on this bridge 62 # 63 # @memory_range: The MMIO range for all devices on this bridge 64 # 65 # @prefetchable_range: The range of prefetchable MMIO for all devices on 66 # this bridge 67 # 68 # Since: 2.4 69 ## 70 { 'struct': 'PciBusInfo', 71 'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int', 72 'io_range': 'PciMemoryRange', 73 'memory_range': 'PciMemoryRange', 74 'prefetchable_range': 'PciMemoryRange' } } 75 76 ## 77 # @PciBridgeInfo: 78 # 79 # Information about a PCI Bridge device 80 # 81 # @bus: information about the bus the device resides on 82 # 83 # @devices: a list of @PciDeviceInfo for each device on this bridge 84 # 85 # Since: 0.14 86 ## 87 { 'struct': 'PciBridgeInfo', 88 'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} } 89 90 ## 91 # @PciDeviceClass: 92 # 93 # Information about the Class of a PCI device 94 # 95 # @desc: a string description of the device's class 96 # 97 # @class: the class code of the device 98 # 99 # Since: 2.4 100 ## 101 { 'struct': 'PciDeviceClass', 102 'data': {'*desc': 'str', 'class': 'int'} } 103 104 ## 105 # @PciDeviceId: 106 # 107 # Information about the Id of a PCI device 108 # 109 # @device: the PCI device id 110 # 111 # @vendor: the PCI vendor id 112 # 113 # @subsystem: the PCI subsystem id (since 3.1) 114 # 115 # @subsystem-vendor: the PCI subsystem vendor id (since 3.1) 116 # 117 # Since: 2.4 118 ## 119 { 'struct': 'PciDeviceId', 120 'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int', 121 '*subsystem-vendor': 'int'} } 122 123 ## 124 # @PciDeviceInfo: 125 # 126 # Information about a PCI device 127 # 128 # @bus: the bus number of the device 129 # 130 # @slot: the slot the device is located in 131 # 132 # @function: the function of the slot used by the device 133 # 134 # @class_info: the class of the device 135 # 136 # @id: the PCI device id 137 # 138 # @irq: if an IRQ is assigned to the device, the IRQ number 139 # 140 # @irq_pin: the IRQ pin, zero means no IRQ (since 5.1) 141 # 142 # @qdev_id: the device name of the PCI device 143 # 144 # @pci_bridge: if the device is a PCI bridge, the bridge information 145 # 146 # @regions: a list of the PCI I/O regions associated with the device 147 # 148 # Notes: the contents of @class_info.desc are not stable and should only be 149 # treated as informational. 150 # 151 # Since: 0.14 152 ## 153 { 'struct': 'PciDeviceInfo', 154 'data': {'bus': 'int', 'slot': 'int', 'function': 'int', 155 'class_info': 'PciDeviceClass', 'id': 'PciDeviceId', 156 '*irq': 'int', 'irq_pin': 'int', 'qdev_id': 'str', 157 '*pci_bridge': 'PciBridgeInfo', 'regions': ['PciMemoryRegion'] }} 158 159 ## 160 # @PciInfo: 161 # 162 # Information about a PCI bus 163 # 164 # @bus: the bus index 165 # 166 # @devices: a list of devices on this bus 167 # 168 # Since: 0.14 169 ## 170 { 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} } 171 172 ## 173 # @query-pci: 174 # 175 # Return information about the PCI bus topology of the guest. 176 # 177 # Returns: a list of @PciInfo for each PCI bus. Each bus is 178 # represented by a json-object, which has a key with a json-array of 179 # all PCI devices attached to it. Each device is represented by a 180 # json-object. 181 # 182 # Since: 0.14 183 # 184 # Example: 185 # 186 # -> { "execute": "query-pci" } 187 # <- { "return": [ 188 # { 189 # "bus": 0, 190 # "devices": [ 191 # { 192 # "bus": 0, 193 # "qdev_id": "", 194 # "slot": 0, 195 # "class_info": { 196 # "class": 1536, 197 # "desc": "Host bridge" 198 # }, 199 # "id": { 200 # "device": 32902, 201 # "vendor": 4663 202 # }, 203 # "function": 0, 204 # "regions": [ 205 # ] 206 # }, 207 # { 208 # "bus": 0, 209 # "qdev_id": "", 210 # "slot": 1, 211 # "class_info": { 212 # "class": 1537, 213 # "desc": "ISA bridge" 214 # }, 215 # "id": { 216 # "device": 32902, 217 # "vendor": 28672 218 # }, 219 # "function": 0, 220 # "regions": [ 221 # ] 222 # }, 223 # { 224 # "bus": 0, 225 # "qdev_id": "", 226 # "slot": 1, 227 # "class_info": { 228 # "class": 257, 229 # "desc": "IDE controller" 230 # }, 231 # "id": { 232 # "device": 32902, 233 # "vendor": 28688 234 # }, 235 # "function": 1, 236 # "regions": [ 237 # { 238 # "bar": 4, 239 # "size": 16, 240 # "address": 49152, 241 # "type": "io" 242 # } 243 # ] 244 # }, 245 # { 246 # "bus": 0, 247 # "qdev_id": "", 248 # "slot": 2, 249 # "class_info": { 250 # "class": 768, 251 # "desc": "VGA controller" 252 # }, 253 # "id": { 254 # "device": 4115, 255 # "vendor": 184 256 # }, 257 # "function": 0, 258 # "regions": [ 259 # { 260 # "prefetch": true, 261 # "mem_type_64": false, 262 # "bar": 0, 263 # "size": 33554432, 264 # "address": 4026531840, 265 # "type": "memory" 266 # }, 267 # { 268 # "prefetch": false, 269 # "mem_type_64": false, 270 # "bar": 1, 271 # "size": 4096, 272 # "address": 4060086272, 273 # "type": "memory" 274 # }, 275 # { 276 # "prefetch": false, 277 # "mem_type_64": false, 278 # "bar": 6, 279 # "size": 65536, 280 # "address": -1, 281 # "type": "memory" 282 # } 283 # ] 284 # }, 285 # { 286 # "bus": 0, 287 # "qdev_id": "", 288 # "irq": 11, 289 # "slot": 4, 290 # "class_info": { 291 # "class": 1280, 292 # "desc": "RAM controller" 293 # }, 294 # "id": { 295 # "device": 6900, 296 # "vendor": 4098 297 # }, 298 # "function": 0, 299 # "regions": [ 300 # { 301 # "bar": 0, 302 # "size": 32, 303 # "address": 49280, 304 # "type": "io" 305 # } 306 # ] 307 # } 308 # ] 309 # } 310 # ] 311 # } 312 # 313 # Note: This example has been shortened as the real response is too long. 314 # 315 ## 316 { 'command': 'query-pci', 'returns': ['PciInfo'] }