Remove the QAPI doc section heading syntax, use plain rST section headings instead. Tests and documentation are updated to match. Interestingly, Plain rST headings work fine before this patch, except for over- and underlining with '=', which the doc parser rejected as invalid QAPI doc section heading in free-form comments. Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250618165353.1980365-5-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Add more detail to commit message] Signed-off-by: Markus Armbruster <armbru@redhat.com>
318 lines
8.8 KiB
Python
318 lines
8.8 KiB
Python
# -*- Mode: Python -*-
|
|
# vim: filetype=python
|
|
#
|
|
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
# See the COPYING file in the top-level directory.
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
##
|
|
# ***
|
|
# PCI
|
|
# ***
|
|
##
|
|
|
|
##
|
|
# @PciMemoryRange:
|
|
#
|
|
# A PCI device memory region
|
|
#
|
|
# @base: the starting address (guest physical)
|
|
#
|
|
# @limit: the ending address (guest physical)
|
|
#
|
|
# Since: 0.14
|
|
##
|
|
{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
|
|
|
|
##
|
|
# @PciMemoryRegion:
|
|
#
|
|
# Information about a PCI device I/O region.
|
|
#
|
|
# @bar: the index of the Base Address Register for this region
|
|
#
|
|
# @type:
|
|
# - 'io' if the region is a PIO region
|
|
# - 'memory' if the region is a MMIO region
|
|
#
|
|
# @address: memory address
|
|
#
|
|
# @size: memory size
|
|
#
|
|
# @prefetch: if @type is 'memory', true if the memory is prefetchable
|
|
#
|
|
# @mem_type_64: if @type is 'memory', true if the BAR is 64-bit
|
|
#
|
|
# Since: 0.14
|
|
##
|
|
{ 'struct': 'PciMemoryRegion',
|
|
'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
|
|
'*prefetch': 'bool', '*mem_type_64': 'bool' } }
|
|
|
|
##
|
|
# @PciBusInfo:
|
|
#
|
|
# Information about a bus of a PCI Bridge device
|
|
#
|
|
# @number: primary bus interface number. This should be the number of
|
|
# the bus the device resides on.
|
|
#
|
|
# @secondary: secondary bus interface number. This is the number of
|
|
# the main bus for the bridge
|
|
#
|
|
# @subordinate: This is the highest number bus that resides below the
|
|
# bridge.
|
|
#
|
|
# @io_range: The PIO range for all devices on this bridge
|
|
#
|
|
# @memory_range: The MMIO range for all devices on this bridge
|
|
#
|
|
# @prefetchable_range: The range of prefetchable MMIO for all devices
|
|
# on this bridge
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'PciBusInfo',
|
|
'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
|
|
'io_range': 'PciMemoryRange',
|
|
'memory_range': 'PciMemoryRange',
|
|
'prefetchable_range': 'PciMemoryRange' } }
|
|
|
|
##
|
|
# @PciBridgeInfo:
|
|
#
|
|
# Information about a PCI Bridge device
|
|
#
|
|
# @bus: information about the bus the device resides on
|
|
#
|
|
# @devices: a list of @PciDeviceInfo for each device on this bridge
|
|
#
|
|
# Since: 0.14
|
|
##
|
|
{ 'struct': 'PciBridgeInfo',
|
|
'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
|
|
|
|
##
|
|
# @PciDeviceClass:
|
|
#
|
|
# Information about the Class of a PCI device
|
|
#
|
|
# @desc: a string description of the device's class (not stable, and
|
|
# should only be treated as informational)
|
|
#
|
|
# @class: the class code of the device
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'PciDeviceClass',
|
|
'data': {'*desc': 'str', 'class': 'int'} }
|
|
|
|
##
|
|
# @PciDeviceId:
|
|
#
|
|
# Information about the Id of a PCI device
|
|
#
|
|
# @device: the PCI device id
|
|
#
|
|
# @vendor: the PCI vendor id
|
|
#
|
|
# @subsystem: the PCI subsystem id (since 3.1)
|
|
#
|
|
# @subsystem-vendor: the PCI subsystem vendor id (since 3.1)
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'PciDeviceId',
|
|
'data': {'device': 'int', 'vendor': 'int', '*subsystem': 'int',
|
|
'*subsystem-vendor': 'int'} }
|
|
|
|
##
|
|
# @PciDeviceInfo:
|
|
#
|
|
# Information about a PCI device
|
|
#
|
|
# @bus: the bus number of the device
|
|
#
|
|
# @slot: the slot the device is located in
|
|
#
|
|
# @function: the function of the slot used by the device
|
|
#
|
|
# @class_info: the class of the device
|
|
#
|
|
# @id: the PCI device id
|
|
#
|
|
# @irq: if an IRQ is assigned to the device, the IRQ number
|
|
#
|
|
# @irq_pin: the IRQ pin, zero means no IRQ (since 5.1)
|
|
#
|
|
# @qdev_id: the device name of the PCI device
|
|
#
|
|
# @pci_bridge: if the device is a PCI bridge, the bridge information
|
|
#
|
|
# @regions: a list of the PCI I/O regions associated with the device
|
|
#
|
|
# Since: 0.14
|
|
##
|
|
{ 'struct': 'PciDeviceInfo',
|
|
'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
|
|
'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
|
|
'*irq': 'int', 'irq_pin': 'int', 'qdev_id': 'str',
|
|
'*pci_bridge': 'PciBridgeInfo', 'regions': ['PciMemoryRegion'] }}
|
|
|
|
##
|
|
# @PciInfo:
|
|
#
|
|
# Information about a PCI bus
|
|
#
|
|
# @bus: the bus index
|
|
#
|
|
# @devices: a list of devices on this bus
|
|
#
|
|
# Since: 0.14
|
|
##
|
|
{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
|
|
|
|
##
|
|
# @query-pci:
|
|
#
|
|
# Return information about the PCI bus topology of the guest.
|
|
#
|
|
# Returns: a list of @PciInfo for each PCI bus. Each bus is
|
|
# represented by a json-object, which has a key with a json-array
|
|
# of all PCI devices attached to it. Each device is represented
|
|
# by a json-object.
|
|
#
|
|
# Since: 0.14
|
|
#
|
|
# .. qmp-example::
|
|
#
|
|
# -> { "execute": "query-pci" }
|
|
# <- { "return": [
|
|
# {
|
|
# "bus": 0,
|
|
# "devices": [
|
|
# {
|
|
# "bus": 0,
|
|
# "qdev_id": "",
|
|
# "slot": 0,
|
|
# "class_info": {
|
|
# "class": 1536,
|
|
# "desc": "Host bridge"
|
|
# },
|
|
# "id": {
|
|
# "device": 32902,
|
|
# "vendor": 4663
|
|
# },
|
|
# "function": 0,
|
|
# "regions": [
|
|
# ]
|
|
# },
|
|
# {
|
|
# "bus": 0,
|
|
# "qdev_id": "",
|
|
# "slot": 1,
|
|
# "class_info": {
|
|
# "class": 1537,
|
|
# "desc": "ISA bridge"
|
|
# },
|
|
# "id": {
|
|
# "device": 32902,
|
|
# "vendor": 28672
|
|
# },
|
|
# "function": 0,
|
|
# "regions": [
|
|
# ]
|
|
# },
|
|
# {
|
|
# "bus": 0,
|
|
# "qdev_id": "",
|
|
# "slot": 1,
|
|
# "class_info": {
|
|
# "class": 257,
|
|
# "desc": "IDE controller"
|
|
# },
|
|
# "id": {
|
|
# "device": 32902,
|
|
# "vendor": 28688
|
|
# },
|
|
# "function": 1,
|
|
# "regions": [
|
|
# {
|
|
# "bar": 4,
|
|
# "size": 16,
|
|
# "address": 49152,
|
|
# "type": "io"
|
|
# }
|
|
# ]
|
|
# },
|
|
# {
|
|
# "bus": 0,
|
|
# "qdev_id": "",
|
|
# "slot": 2,
|
|
# "class_info": {
|
|
# "class": 768,
|
|
# "desc": "VGA controller"
|
|
# },
|
|
# "id": {
|
|
# "device": 4115,
|
|
# "vendor": 184
|
|
# },
|
|
# "function": 0,
|
|
# "regions": [
|
|
# {
|
|
# "prefetch": true,
|
|
# "mem_type_64": false,
|
|
# "bar": 0,
|
|
# "size": 33554432,
|
|
# "address": 4026531840,
|
|
# "type": "memory"
|
|
# },
|
|
# {
|
|
# "prefetch": false,
|
|
# "mem_type_64": false,
|
|
# "bar": 1,
|
|
# "size": 4096,
|
|
# "address": 4060086272,
|
|
# "type": "memory"
|
|
# },
|
|
# {
|
|
# "prefetch": false,
|
|
# "mem_type_64": false,
|
|
# "bar": 6,
|
|
# "size": 65536,
|
|
# "address": -1,
|
|
# "type": "memory"
|
|
# }
|
|
# ]
|
|
# },
|
|
# {
|
|
# "bus": 0,
|
|
# "qdev_id": "",
|
|
# "irq": 11,
|
|
# "slot": 4,
|
|
# "class_info": {
|
|
# "class": 1280,
|
|
# "desc": "RAM controller"
|
|
# },
|
|
# "id": {
|
|
# "device": 6900,
|
|
# "vendor": 4098
|
|
# },
|
|
# "function": 0,
|
|
# "regions": [
|
|
# {
|
|
# "bar": 0,
|
|
# "size": 32,
|
|
# "address": 49280,
|
|
# "type": "io"
|
|
# }
|
|
# ]
|
|
# }
|
|
# ]
|
|
# }
|
|
# ]
|
|
# }
|
|
#
|
|
# This example has been shortened as the real response is too long.
|
|
##
|
|
{ 'command': 'query-pci', 'returns': ['PciInfo'] }
|