break;
case VIR_DOMAIN_SOUND_MODEL_USB:
model = "usb-audio";
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_USB_AUDIO)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("usb-audio controller is not supported "
- "by this QEMU binary"));
- return NULL;
- }
break;
case VIR_DOMAIN_SOUND_MODEL_ICH9:
model = "ich9-intel-hda";
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("The ich9-intel-hda audio controller "
- "is not supported in this QEMU binary"));
- return NULL;
- }
break;
case VIR_DOMAIN_SOUND_MODEL_SB16:
model = "sb16";
break;
case VIR_DOMAIN_SOUND_MODEL_PCSPK: /* pc-speaker is handled separately */
case VIR_DOMAIN_SOUND_MODEL_LAST:
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("sound card model '%s' is not supported by qemu"),
- virDomainSoundModelTypeToString(sound->model));
return NULL;
}
}
+static int
+qemuDomainDeviceDefValidateSound(virDomainSoundDefPtr sound,
+ virQEMUCapsPtr qemuCaps)
+{
+ switch ((virDomainSoundModel) sound->model) {
+ case VIR_DOMAIN_SOUND_MODEL_USB:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_USB_AUDIO)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("usb-audio controller is not supported "
+ "by this QEMU binary"));
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_SOUND_MODEL_ICH9:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("The ich9-intel-hda audio controller "
+ "is not supported in this QEMU binary"));
+ return -1;
+ }
+ break;
+
+ case VIR_DOMAIN_SOUND_MODEL_ES1370:
+ case VIR_DOMAIN_SOUND_MODEL_AC97:
+ case VIR_DOMAIN_SOUND_MODEL_ICH6:
+ case VIR_DOMAIN_SOUND_MODEL_SB16:
+ case VIR_DOMAIN_SOUND_MODEL_PCSPK:
+ break;
+ case VIR_DOMAIN_SOUND_MODEL_LAST:
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("sound card model '%s' is not supported by qemu"),
+ virDomainSoundModelTypeToString(sound->model));
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
qemuDomainDefValidate(const virDomainDef *def,
void *opaque)
ret = qemuDomainDeviceDefValidateHub(dev->data.hub, qemuCaps);
break;
- case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_SOUND:
+ ret = qemuDomainDeviceDefValidateSound(dev->data.sound, qemuCaps);
+ break;
+
+ case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_SHMEM:
case VIR_DOMAIN_DEVICE_MEMORY:
case VIR_DOMAIN_DEVICE_PANIC:
DO_TEST("net-midonet", NONE);
DO_TEST("net-openvswitch", NONE);
DO_TEST("sound", NONE);
- DO_TEST("sound-device", NONE);
+ DO_TEST("sound-device",
+ QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
+ QEMU_CAPS_OBJECT_USB_AUDIO);
DO_TEST("watchdog", NONE);
DO_TEST("net-bandwidth", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);
DO_TEST("net-bandwidth2", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);