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>
This commit is contained in:
		
							parent
							
								
									a6307b086b
								
							
						
					
					
						commit
						d271de9f1b
					
				
							
								
								
									
										25
									
								
								hw/qdev.c
								
								
								
								
							
							
						
						
									
										25
									
								
								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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue