提交 d5e4acf7 编写于 作者: L Luiz Capitulino 提交者: Anthony Liguori

PCI: do_pci_info(): PCI bridge devices support

This commit completes the do_pci_info() conversion to
QObject by adding support to PCI bridge devices.

This is done by recursively adding devices in the
"pci_bridge" key.

IMPORTANT: This code is being added separately because I could
NOT test it properly. According to Michael Tsirkin, it depends
on ultrasparc and it would take time to do the proper setup.
Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 163c8a59
......@@ -1183,7 +1183,15 @@ static void pci_device_print(Monitor *mon, QDict *device)
monitor_printf(mon, " id \"%s\"\n", qdict_get_str(device, "qdev_id"));
/* TODO: PCI bridge devices */
if (qdict_haskey(device, "pci_bridge")) {
qdict = qdict_get_qdict(device, "pci_bridge");
if (qdict_haskey(qdict, "devices")) {
QListEntry *dev;
QLIST_FOREACH_ENTRY(qdict_get_qlist(qdict, "devices"), dev) {
pci_device_print(mon, qobject_to_qdict(qlist_entry_obj(dev)));
}
}
}
}
void do_pci_info_print(Monitor *mon, const QObject *data)
......@@ -1261,7 +1269,9 @@ static QObject *pci_get_regions_list(const PCIDevice *dev)
return QOBJECT(regions_list);
}
static QObject *pci_get_dev_dict(PCIDevice *dev, int bus_num)
static QObject *pci_get_devices_list(PCIBus *bus, int bus_num);
static QObject *pci_get_dev_dict(PCIDevice *dev, PCIBus *bus, int bus_num)
{
int class;
QObject *obj;
......@@ -1300,6 +1310,12 @@ static QObject *pci_get_dev_dict(PCIDevice *dev, int bus_num)
pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_SPACE_MEMORY |
PCI_BASE_ADDRESS_MEM_PREFETCH));
if (dev->config[0x19] != 0) {
qdict = qobject_to_qdict(pci_bridge);
qdict_put_obj(qdict, "devices",
pci_get_devices_list(bus, dev->config[0x19]));
}
qdict = qobject_to_qdict(obj);
qdict_put_obj(qdict, "pci_bridge", pci_bridge);
}
......@@ -1318,7 +1334,7 @@ static QObject *pci_get_devices_list(PCIBus *bus, int bus_num)
for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) {
dev = bus->devices[devfn];
if (dev) {
qlist_append_obj(dev_list, pci_get_dev_dict(dev, bus_num));
qlist_append_obj(dev_list, pci_get_dev_dict(dev, bus, bus_num));
}
}
......@@ -1371,6 +1387,7 @@ static QObject *pci_get_bus_dict(PCIBus *bus, int bus_num)
* - "io_range": a QDict with memory range information
* - "memory_range": a QDict with memory range information
* - "prefetchable_range": a QDict with memory range information
* - "devices": a QList of PCI devices if there's any attached (optional)
* - "regions": a QList of QDicts, each QDict represents a
* memory region of this device
*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册