+/*
+ * Aliases were a bad idea from the start. Let's keep them
+ * from spreading further.
+ */
+static const char *qdev_class_get_alias(DeviceClass *dc)
+{
+ const char *typename = object_class_get_name(OBJECT_CLASS(dc));
+
+ if (strcmp(typename, "virtio-blk-pci") == 0) {
+ return "virtio-blk";
+ } else if (strcmp(typename, "virtio-net-pci") == 0) {
+ return "virtio-net";
+ } else if (strcmp(typename, "virtio-serial-pci") == 0) {
+ return "virtio-serial";
+ } else if (strcmp(typename, "virtio-balloon-pci") == 0) {
+ return "virtio-balloon";
+ } else if (strcmp(typename, "virtio-blk-s390") == 0) {
+ return "virtio-blk";
+ } else if (strcmp(typename, "virtio-net-s390") == 0) {
+ return "virtio-net";
+ } else if (strcmp(typename, "virtio-serial-s390") == 0) {
+ return "virtio-serial";
+ } else if (strcmp(typename, "lsi53c895a") == 0) {
+ return "lsi";
+ } else if (strcmp(typename, "ich9-ahci") == 0) {
+ return "ahci";
+ }
+
+ return NULL;
+}
+
+static bool qdev_class_has_alias(DeviceClass *dc)
+{
+ return (qdev_class_get_alias(dc) != NULL);
+}
+
const char *qdev_fw_name(DeviceState *dev)
{
DeviceClass *dc = DEVICE_GET_CLASS(dev);
if (dc->fw_name) {
return dc->fw_name;
- } else if (dc->alias) {
- return dc->alias;
+ } else if (qdev_class_has_alias(dc)) {
+ return qdev_class_get_alias(dc);
}
return object_get_typename(OBJECT(dev));
@@ -161,8 +197,8 @@ static void qdev_print_devinfo(ObjectClass *klass, void
*opaque)
if (dc->bus_info) {
error_printf(", bus %s", dc->bus_info->name);
}
- if (dc->alias) {
- error_printf(", alias \"%s\"", dc->alias);
+ if (qdev_class_has_alias(dc)) {
+ error_printf(", alias \"%s\"", qdev_class_get_alias(dc));
}
if (dc->desc) {
error_printf(", desc \"%s\"", dc->desc);
@@ -188,6 +224,27 @@ static int set_property(const char *name, const char
*value, void *opaque)
return 0;
}
+static const char *find_typename_by_alias(const char *alias)
+{
+ /* I don't think s390 aliasing could have ever worked... */
+ if (strcmp(alias, "virtio-blk") == 0) {
+ return "virtio-blk-pci";
+ } else if (strcmp(alias, "virtio-net") == 0) {
+ return "virtio-net-pci";
+ } else if (strcmp(alias, "virtio-serial") == 0) {
+ return "virtio-serial-pci";
+ } else if (strcmp(alias, "virtio-balloon") == 0) {
+ return "virtio-balloon-pci";
+ } else if (strcmp(alias, "lsi") == 0) {
+ return "lsi53c895a";
+ } else if (strcmp(alias, "ahci") == 0) {
+ return "ich9-ahci";
+ }
+
+ return NULL;
+}
+