Lines Matching +full:bus +full:- +full:range
28 #include "pci-internal.h"
29 #include "qapi/qapi-commands-pci.h"
31 static PciDeviceInfoList *qmp_query_pci_devices(PCIBus *bus, int bus_num);
39 const PCIIORegion *r = &dev->io_regions[i]; in qmp_query_pci_regions()
42 if (!r->size) { in qmp_query_pci_regions()
48 if (r->type & PCI_BASE_ADDRESS_SPACE_IO) { in qmp_query_pci_regions()
49 region->type = g_strdup("io"); in qmp_query_pci_regions()
51 region->type = g_strdup("memory"); in qmp_query_pci_regions()
52 region->has_prefetch = true; in qmp_query_pci_regions()
53 region->prefetch = !!(r->type & PCI_BASE_ADDRESS_MEM_PREFETCH); in qmp_query_pci_regions()
54 region->has_mem_type_64 = true; in qmp_query_pci_regions()
55 region->mem_type_64 = !!(r->type & PCI_BASE_ADDRESS_MEM_TYPE_64); in qmp_query_pci_regions()
58 region->bar = i; in qmp_query_pci_regions()
59 region->address = r->addr; in qmp_query_pci_regions()
60 region->size = r->size; in qmp_query_pci_regions()
68 static PciBridgeInfo *qmp_query_pci_bridge(PCIDevice *dev, PCIBus *bus, in qmp_query_pci_bridge() argument
72 PciMemoryRange *range; in qmp_query_pci_bridge() local
76 info->bus = g_new0(PciBusInfo, 1); in qmp_query_pci_bridge()
77 info->bus->number = dev->config[PCI_PRIMARY_BUS]; in qmp_query_pci_bridge()
78 info->bus->secondary = dev->config[PCI_SECONDARY_BUS]; in qmp_query_pci_bridge()
79 info->bus->subordinate = dev->config[PCI_SUBORDINATE_BUS]; in qmp_query_pci_bridge()
81 range = info->bus->io_range = g_new0(PciMemoryRange, 1); in qmp_query_pci_bridge()
82 range->base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_SPACE_IO); in qmp_query_pci_bridge()
83 range->limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_SPACE_IO); in qmp_query_pci_bridge()
85 range = info->bus->memory_range = g_new0(PciMemoryRange, 1); in qmp_query_pci_bridge()
86 range->base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_SPACE_MEMORY); in qmp_query_pci_bridge()
87 range->limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_SPACE_MEMORY); in qmp_query_pci_bridge()
89 range = info->bus->prefetchable_range = g_new0(PciMemoryRange, 1); in qmp_query_pci_bridge()
90 range->base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); in qmp_query_pci_bridge()
91 range->limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); in qmp_query_pci_bridge()
93 if (dev->config[PCI_SECONDARY_BUS] != 0) { in qmp_query_pci_bridge()
94 PCIBus *child_bus = pci_find_bus_nr(bus, in qmp_query_pci_bridge()
95 dev->config[PCI_SECONDARY_BUS]); in qmp_query_pci_bridge()
97 info->has_devices = true; in qmp_query_pci_bridge()
98 info->devices = qmp_query_pci_devices(child_bus, in qmp_query_pci_bridge()
99 dev->config[PCI_SECONDARY_BUS]); in qmp_query_pci_bridge()
106 static PciDeviceInfo *qmp_query_pci_device(PCIDevice *dev, PCIBus *bus, in qmp_query_pci_device() argument
115 info->bus = bus_num; in qmp_query_pci_device()
116 info->slot = PCI_SLOT(dev->devfn); in qmp_query_pci_device()
117 info->function = PCI_FUNC(dev->devfn); in qmp_query_pci_device()
119 info->class_info = g_new0(PciDeviceClass, 1); in qmp_query_pci_device()
120 class = pci_get_word(dev->config + PCI_CLASS_DEVICE); in qmp_query_pci_device()
121 info->class_info->q_class = class; in qmp_query_pci_device()
123 if (desc->desc) { in qmp_query_pci_device()
124 info->class_info->desc = g_strdup(desc->desc); in qmp_query_pci_device()
127 info->id = g_new0(PciDeviceId, 1); in qmp_query_pci_device()
128 info->id->vendor = pci_get_word(dev->config + PCI_VENDOR_ID); in qmp_query_pci_device()
129 info->id->device = pci_get_word(dev->config + PCI_DEVICE_ID); in qmp_query_pci_device()
130 info->regions = qmp_query_pci_regions(dev); in qmp_query_pci_device()
131 info->qdev_id = g_strdup(dev->qdev.id ? dev->qdev.id : ""); in qmp_query_pci_device()
133 info->irq_pin = dev->config[PCI_INTERRUPT_PIN]; in qmp_query_pci_device()
134 if (dev->config[PCI_INTERRUPT_PIN] != 0) { in qmp_query_pci_device()
135 info->has_irq = true; in qmp_query_pci_device()
136 info->irq = dev->config[PCI_INTERRUPT_LINE]; in qmp_query_pci_device()
139 type = dev->config[PCI_HEADER_TYPE] & ~PCI_HEADER_TYPE_MULTI_FUNCTION; in qmp_query_pci_device()
141 info->pci_bridge = qmp_query_pci_bridge(dev, bus, bus_num); in qmp_query_pci_device()
143 info->id->has_subsystem = info->id->has_subsystem_vendor = true; in qmp_query_pci_device()
144 info->id->subsystem = pci_get_word(dev->config + PCI_SUBSYSTEM_ID); in qmp_query_pci_device()
145 info->id->subsystem_vendor = in qmp_query_pci_device()
146 pci_get_word(dev->config + PCI_SUBSYSTEM_VENDOR_ID); in qmp_query_pci_device()
148 info->id->has_subsystem = info->id->has_subsystem_vendor = true; in qmp_query_pci_device()
149 info->id->subsystem = pci_get_word(dev->config + PCI_CB_SUBSYSTEM_ID); in qmp_query_pci_device()
150 info->id->subsystem_vendor = in qmp_query_pci_device()
151 pci_get_word(dev->config + PCI_CB_SUBSYSTEM_VENDOR_ID); in qmp_query_pci_device()
157 static PciDeviceInfoList *qmp_query_pci_devices(PCIBus *bus, int bus_num) in qmp_query_pci_devices() argument
163 for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { in qmp_query_pci_devices()
164 dev = bus->devices[devfn]; in qmp_query_pci_devices()
166 QAPI_LIST_APPEND(tail, qmp_query_pci_device(dev, bus, bus_num)); in qmp_query_pci_devices()
173 static PciInfo *qmp_query_pci_bus(PCIBus *bus, int bus_num) in qmp_query_pci_bus() argument
177 bus = pci_find_bus_nr(bus, bus_num); in qmp_query_pci_bus()
178 if (bus) { in qmp_query_pci_bus()
180 info->bus = bus_num; in qmp_query_pci_bus()
181 info->devices = qmp_query_pci_devices(bus, bus_num); in qmp_query_pci_bus()
194 qmp_query_pci_bus(host_bridge->bus, in qmp_query_pci()
195 pci_bus_num(host_bridge->bus))); in qmp_query_pci()