[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/11] qdev: pcibus_dev_info
From: |
Nathan Baum |
Subject: |
[Qemu-devel] [PATCH 04/11] qdev: pcibus_dev_info |
Date: |
Sat, 26 Dec 2009 21:19:15 +0000 |
This returns a QObject detailing the PCI-specific data about the device.
Signed-off-by: Nathan Baum <address@hidden>
---
hw/pci.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/hw/pci.c b/hw/pci.c
index 9722fce..8688d8a 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -27,6 +27,8 @@
#include "net.h"
#include "sysemu.h"
#include "loader.h"
+#include "qjson.h"
+#include "qint.h"
//#define DEBUG_PCI
#ifdef DEBUG_PCI
@@ -1585,6 +1587,52 @@ static void pcibus_dev_print(Monitor *mon, DeviceState
*dev, int indent)
}
}
+static QObject *pcibus_dev_info(Monitor *mon, DeviceState *dev)
+{
+ PCIDevice *d = (PCIDevice *)dev;
+ const pci_class_desc *desc;
+ PCIIORegion *r;
+ int i, class;
+ QObject *retval;
+ QList *regions;
+
+ retval = qobject_from_jsonf("{ 'addr': { 'bus' : %d, 'slot' : %d, 'func':
%d }, "
+ " 'device': { 'vendor': %d, 'id': %d }, "
+ " 'subsystem': { 'vendor': %d, 'id': %d } "
+ "}",
+ d->config[PCI_SECONDARY_BUS],
+ PCI_SLOT(d->devfn),
+ PCI_FUNC(d->devfn),
+ pci_get_word(d->config + PCI_VENDOR_ID),
+ pci_get_word(d->config + PCI_DEVICE_ID),
+ pci_get_word(d->config +
PCI_SUBSYSTEM_VENDOR_ID),
+ pci_get_word(d->config + PCI_SUBSYSTEM_ID));
+ class = pci_get_word(d->config + PCI_CLASS_DEVICE);
+ desc = pci_class_descriptions;
+ while (desc->desc && class != desc->class)
+ desc++;
+ if (desc->desc) {
+ qdict_put(qobject_to_qdict(retval), "class",
qstring_from_str(desc->desc));
+ } else {
+ qdict_put(qobject_to_qdict(retval), "class", qint_from_int(class));
+ }
+
+ regions = qlist_new();
+ qdict_put(qobject_to_qdict(retval), "regions", regions);
+
+ for (i = 0; i < PCI_NUM_REGIONS; i++) {
+ r = &d->io_regions[i];
+ if (!r->size)
+ continue;
+ qlist_append_obj(regions,
+ qobject_from_jsonf("{'type':%s,'addr':%d,'size':%d}",
+ r->type &
PCI_BASE_ADDRESS_SPACE_IO ? "i/o" : "mem",
+ (int) r->addr,
+ (int) r->size));
+ }
+ return retval;
+}
+
static PCIDeviceInfo bridge_info = {
.qdev.name = "pci-bridge",
.qdev.size = sizeof(PCIBridge),
--
1.6.3.3
- [Qemu-devel] [RFC,PATCH 00/11] Half-convert info qtree to QMP., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 02/11] qdev: isabus_dev_info returns a QObject detailing the IRQ lines used by the device., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 01/11] Add info_dev function pointer for BusInfo., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 05/11] qdev: Add pcibus_dev_info to pci_bus_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 06/11] qdev: sysbus_dev_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 03/11] qdev: Add isabuf_dev_info to ISA's BusInfo struct., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 07/11] qdev: Add sysbus_dev_info to system_bus_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 08/11] qdev: Add usb_bus_dev_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 04/11] qdev: pcibus_dev_info,
Nathan Baum <=
- [Qemu-devel] [PATCH 10/11] qdev: Add do_info_qbus and friends., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 11/11] Change the monitor to use the new do_info_qtree., Nathan Baum, 2009/12/26