diff options
| author | Gerd Hoffmann <kraxel@redhat.com> | 2009-07-15 13:59:24 +0200 |
|---|---|---|
| committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-07-27 08:39:29 -0500 |
| commit | d271de9f1bd7c4671af8cc8edca4ac677371cfff (patch) | |
| tree | d970ac5d39660127b33ad3b2a58e346085b79b39 /hw/qdev.c | |
| parent | a6307b086bb8de32c25b59cc2212a69a987c24a6 (diff) | |
| download | focaccia-qemu-d271de9f1bd7c4671af8cc8edca4ac677371cfff.tar.gz focaccia-qemu-d271de9f1bd7c4671af8cc8edca4ac677371cfff.zip | |
qdev: create default bus names.
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 <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.c')
| -rw-r--r-- | hw/qdev.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/hw/qdev.c b/hw/qdev.c index faecc767af..3be321ad57 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; } |