Patchwork [3/5] PCI: use device info

login
register
mail settings
Submitter Blue Swirl
Date Sept. 9, 2009, 6:06 p.m.
Message ID <f43fc5580909091106s30d7dd39s9755a5c507f3d3e2@mail.gmail.com>
Download mbox | patch
Permalink /patch/33219/
State Superseded
Headers show

Comments

Blue Swirl - Sept. 9, 2009, 6:06 p.m.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 hw/pci.c        |   51 ++++++++++++++++++++++++++++-----------------------
 hw/pci.h        |    2 --
 monitor.c       |    2 --
 qemu-monitor.hx |    2 --
 4 files changed, 28 insertions(+), 29 deletions(-)

Patch

diff --git a/hw/pci.c b/hw/pci.c
index c12b0be..225efbf 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -98,6 +98,13 @@  static void pci_bus_reset(void *opaque)
     }
 }

+static void pci_info(Monitor *mon, void *opaque);
+
+static const struct MonDevInfo mon_pci_info = {
+    .dev_name = "pci",
+    .dev_info_cb = pci_info,
+};
+
 PCIBus *pci_register_bus(DeviceState *parent, const char *name,
                          pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
                          void *irq_opaque, int devfn_min, int nirq)
@@ -116,6 +123,7 @@  PCIBus *pci_register_bus(DeviceState *parent,
const char *name,
     first_bus = bus;
     vmstate_register(nbus++, &vmstate_pcibus, bus);
     qemu_register_reset(pci_bus_reset, bus);
+    monitor_register_device_info(&mon_pci_info, bus);
     return bus;
 }

@@ -693,9 +701,24 @@  static const pci_class_desc pci_class_descriptions[] =
     { 0, NULL}
 };

-static void pci_info_device(PCIDevice *d)
+static void pci_bus_for_each_device(PCIBus *bus,
+                                    void (*fn)(PCIDevice *d, void *fn_opaque),
+                                    void *fn_opaque)
+{
+    PCIDevice *d;
+    int devfn;
+
+    for(devfn = 0; devfn < 256; devfn++) {
+        d = bus->devices[devfn];
+        if (d) {
+            fn(d, fn_opaque);
+        }
+    }
+}
+
+static void pci_info_device(PCIDevice *d, void *opaque)
 {
-    Monitor *mon = cur_mon;
+    Monitor *mon = opaque;
     int i, class;
     PCIIORegion *r;
     const pci_class_desc *desc;
@@ -737,31 +760,13 @@  static void pci_info_device(PCIDevice *d)
         }
     }
     monitor_printf(mon, "      id \"%s\"\n", d->qdev.id ? d->qdev.id : "");
-    if (class == 0x0604 && d->config[0x19] != 0) {
-        pci_for_each_device(d->config[0x19], pci_info_device);
-    }
 }

-void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d))
+static void pci_info(Monitor *mon, void *opaque)
 {
-    PCIBus *bus = first_bus;
-    PCIDevice *d;
-    int devfn;
-
-    while (bus && bus->bus_num != bus_num)
-        bus = bus->next;
-    if (bus) {
-        for(devfn = 0; devfn < 256; devfn++) {
-            d = bus->devices[devfn];
-            if (d)
-                fn(d);
-        }
-    }
-}
+    PCIBus *bus = opaque;

-void pci_info(Monitor *mon)
-{
-    pci_for_each_device(0, pci_info_device);
+    pci_bus_for_each_device(bus, pci_info_device, mon);
 }

 PCIDevice *pci_create(const char *name, const char *devaddr)
diff --git a/hw/pci.h b/hw/pci.h
index 5340bbb..b732f00 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -250,14 +250,12 @@  PCIDevice *pci_nic_init(NICInfo *nd, const char
*default_model,
 void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);
 uint32_t pci_data_read(void *opaque, uint32_t addr, int len);
 int pci_bus_num(PCIBus *s);
-void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d));
 PCIBus *pci_find_bus(int bus_num);
 PCIDevice *pci_find_device(int bus_num, int slot, int function);

 int pci_read_devaddr(Monitor *mon, const char *addr, int *domp, int *busp,
                      unsigned *slotp);

-void pci_info(Monitor *mon);
 PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,
                         pci_map_irq_fn map_irq, const char *name);

diff --git a/monitor.c b/monitor.c
index 2c763e8..3d18885 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1844,8 +1844,6 @@  static const mon_cmd_t info_cmds[] = {
       "", "show infos for each CPU" },
     { "history", "", do_info_history,
       "", "show the command line history", },
-    { "pci", "", pci_info,
-      "", "show PCI info", },
 #if defined(TARGET_I386) || defined(TARGET_SH4)
     { "tlb", "", tlb_info,
       "", "show virtual to physical memory mappings", },
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 0a9c591..54078e2 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -45,8 +45,6 @@  show the cpu registers
 show infos for each CPU
 @item info history
 show the command line history
-@item info pci
-show emulated PCI device info
 @item info tlb
 show virtual to physical memory mappings (i386 only)
 @item info mem