qemu/qapi/pci.json
<<
>>
Prefs
   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'] }
 317