qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

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'] }