qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [COMMIT d271de9] qdev: create default bus names.


From: Anthony Liguori
Subject: [Qemu-commits] [COMMIT d271de9] qdev: create default bus names.
Date: Mon, 27 Jul 2009 19:23:12 -0000

From: Gerd Hoffmann <address@hidden>

Create a default bus name if none is passed to qbus_create().

If the parent device has DeviceState->id set it will be used to create
the bus name,. i.e. -device lsi,id=foo will give you a scsi bus named
"foo.0".

If there is no id BusInfo->name (lowercased) will be used instead, i.e.
-device lsi will give you a scsi bus named "scsi.0".

A scsi adapter with two scsi busses would have "scsi.0" and "scsi.1" or
"$id.0" and "$id.1" busses.  The numbers of the child busses are per
device, i.e. when adding two lsi adapters both will have a "*.0" child
bus.

Signed-off-by: Gerd Hoffmann <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>

diff --git a/hw/qdev.c b/hw/qdev.c
index faecc76..3be321a 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -232,14 +232,37 @@ void scsi_bus_new(DeviceState *host, SCSIAttachFn attach)
 BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name)
 {
     BusState *bus;
+    char *buf;
+    int i,len;
 
     bus = qemu_mallocz(info->size);
     bus->info = info;
     bus->parent = parent;
-    bus->name = qemu_strdup(name);
+
+    if (name) {
+        /* use supplied name */
+        bus->name = qemu_strdup(name);
+    } else if (parent && parent->id) {
+        /* parent device has id -> use it for bus name */
+        len = strlen(parent->id) + 16;
+        buf = qemu_malloc(len);
+        snprintf(buf, len, "%s.%d", parent->id, parent->num_child_bus);
+        bus->name = buf;
+    } else {
+        /* no id -> use lowercase bus type for bus name */
+        len = strlen(info->name) + 16;
+        buf = qemu_malloc(len);
+        len = snprintf(buf, len, "%s.%d", info->name,
+                       parent ? parent->num_child_bus : 0);
+        for (i = 0; i < len; i++)
+            buf[i] = tolower(buf[i]);
+        bus->name = buf;
+    }
+
     LIST_INIT(&bus->children);
     if (parent) {
         LIST_INSERT_HEAD(&parent->child_bus, bus, sibling);
+        parent->num_child_bus++;
     }
     return bus;
 }
diff --git a/hw/qdev.h b/hw/qdev.h
index dfd3e92..d9c78eb 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -27,6 +27,7 @@ struct DeviceState {
     int num_gpio_in;
     qemu_irq *gpio_in;
     LIST_HEAD(, BusState) child_bus;
+    int num_child_bus;
     NICInfo *nd;
     LIST_ENTRY(DeviceState) sibling;
 };




reply via email to

[Prev in Thread] Current Thread [Next in Thread]