blockdev: Put BlockInterfaceType names and max_devs in tables
Turns drive_init()'s lengthy conditional into a concise loop, and makes the data available elsewhere. Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
904ebffee5
commit
1960966d1b
51
blockdev.c
51
blockdev.c
@ -19,6 +19,23 @@
|
|||||||
|
|
||||||
static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
|
static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
|
||||||
|
|
||||||
|
static const char *const if_name[IF_COUNT] = {
|
||||||
|
[IF_NONE] = "none",
|
||||||
|
[IF_IDE] = "ide",
|
||||||
|
[IF_SCSI] = "scsi",
|
||||||
|
[IF_FLOPPY] = "floppy",
|
||||||
|
[IF_PFLASH] = "pflash",
|
||||||
|
[IF_MTD] = "mtd",
|
||||||
|
[IF_SD] = "sd",
|
||||||
|
[IF_VIRTIO] = "virtio",
|
||||||
|
[IF_XEN] = "xen",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int if_max_devs[IF_COUNT] = {
|
||||||
|
[IF_IDE] = MAX_IDE_DEVS,
|
||||||
|
[IF_SCSI] = MAX_SCSI_DEVS,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We automatically delete the drive when a device using it gets
|
* We automatically delete the drive when a device using it gets
|
||||||
* unplugged. Questionable feature, but we can't just drop it.
|
* unplugged. Questionable feature, but we can't just drop it.
|
||||||
@ -173,11 +190,9 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi, int *fatal_error)
|
|||||||
|
|
||||||
if (default_to_scsi) {
|
if (default_to_scsi) {
|
||||||
type = IF_SCSI;
|
type = IF_SCSI;
|
||||||
max_devs = MAX_SCSI_DEVS;
|
|
||||||
pstrcpy(devname, sizeof(devname), "scsi");
|
pstrcpy(devname, sizeof(devname), "scsi");
|
||||||
} else {
|
} else {
|
||||||
type = IF_IDE;
|
type = IF_IDE;
|
||||||
max_devs = MAX_IDE_DEVS;
|
|
||||||
pstrcpy(devname, sizeof(devname), "ide");
|
pstrcpy(devname, sizeof(devname), "ide");
|
||||||
}
|
}
|
||||||
media = MEDIA_DISK;
|
media = MEDIA_DISK;
|
||||||
@ -199,38 +214,14 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi, int *fatal_error)
|
|||||||
|
|
||||||
if ((buf = qemu_opt_get(opts, "if")) != NULL) {
|
if ((buf = qemu_opt_get(opts, "if")) != NULL) {
|
||||||
pstrcpy(devname, sizeof(devname), buf);
|
pstrcpy(devname, sizeof(devname), buf);
|
||||||
if (!strcmp(buf, "ide")) {
|
for (type = 0; type < IF_COUNT && strcmp(buf, if_name[type]); type++)
|
||||||
type = IF_IDE;
|
;
|
||||||
max_devs = MAX_IDE_DEVS;
|
if (type == IF_COUNT) {
|
||||||
} else if (!strcmp(buf, "scsi")) {
|
|
||||||
type = IF_SCSI;
|
|
||||||
max_devs = MAX_SCSI_DEVS;
|
|
||||||
} else if (!strcmp(buf, "floppy")) {
|
|
||||||
type = IF_FLOPPY;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "pflash")) {
|
|
||||||
type = IF_PFLASH;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "mtd")) {
|
|
||||||
type = IF_MTD;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "sd")) {
|
|
||||||
type = IF_SD;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "virtio")) {
|
|
||||||
type = IF_VIRTIO;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "xen")) {
|
|
||||||
type = IF_XEN;
|
|
||||||
max_devs = 0;
|
|
||||||
} else if (!strcmp(buf, "none")) {
|
|
||||||
type = IF_NONE;
|
|
||||||
max_devs = 0;
|
|
||||||
} else {
|
|
||||||
error_report("unsupported bus type '%s'", buf);
|
error_report("unsupported bus type '%s'", buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
max_devs = if_max_devs[type];
|
||||||
|
|
||||||
if (cyls || heads || secs) {
|
if (cyls || heads || secs) {
|
||||||
if (cyls < 1 || (type == IF_IDE && cyls > 16383)) {
|
if (cyls < 1 || (type == IF_IDE && cyls > 16383)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user