for (i = 0; i < def->nsounds; i++) {
virDomainSoundDef *sound = def->sounds[i];
- /* Sadly pcspk device doesn't use -device syntax. Fortunately
- * we don't need to set any PCI address on it, so we don't
- * mind too much */
- if (sound->model == VIR_DOMAIN_SOUND_MODEL_PCSPK) {
- virCommandAddArgList(cmd, "-soundhw", "pcspk", NULL);
- } else {
- if (qemuCommandAddExtDevice(cmd, &sound->info, def, qemuCaps) < 0)
- return -1;
+ /* Sadly pcspk device doesn't use -device syntax. And it
+ * was handled already in qemuBuildMachineCommandLine().
+ */
+ if (sound->model == VIR_DOMAIN_SOUND_MODEL_PCSPK)
+ continue;
- if (qemuBuildSoundDevCmd(cmd, def, sound, qemuCaps) < 0)
- return -1;
+ if (qemuCommandAddExtDevice(cmd, &sound->info, def, qemuCaps) < 0)
+ return -1;
- if (virDomainSoundModelSupportsCodecs(sound)) {
- for (j = 0; j < sound->ncodecs; j++) {
- if (qemuBuildSoundCodecCmd(cmd, def, sound, sound->codecs[j],
- qemuCaps) < 0)
- return -1;
- }
+ if (qemuBuildSoundDevCmd(cmd, def, sound, qemuCaps) < 0)
+ return -1;
+
+ if (virDomainSoundModelSupportsCodecs(sound)) {
+ for (j = 0; j < sound->ncodecs; j++) {
+ if (qemuBuildSoundCodecCmd(cmd, def, sound, sound->codecs[j],
+ qemuCaps) < 0)
+ return -1;
+ }
- if (j == 0) {
- virDomainSoundCodecDef codec = { VIR_DOMAIN_SOUND_CODEC_TYPE_DUPLEX, 0 };
+ if (j == 0) {
+ virDomainSoundCodecDef codec = { VIR_DOMAIN_SOUND_CODEC_TYPE_DUPLEX, 0 };
- if (qemuBuildSoundCodecCmd(cmd, def, sound, &codec, qemuCaps) < 0)
- return -1;
- }
+ if (qemuBuildSoundCodecCmd(cmd, def, sound, &codec, qemuCaps) < 0)
+ return -1;
}
}
}
}
}
+ /* PC speaker is a bit different than the rest of sound cards
+ * which are handled in qemuBuildSoundCommandLine(). */
+ for (i = 0; i < def->nsounds; i++) {
+ const virDomainSoundDef *sound = def->sounds[i];
+ g_autofree char *audioid = NULL;
+
+ if (sound->model != VIR_DOMAIN_SOUND_MODEL_PCSPK)
+ continue;
+
+ if (!(audioid = qemuGetAudioIDString(def, sound->audioId)))
+ return -1;
+
+ virBufferAsprintf(&buf, ",pcspk-audiodev=%s", audioid);
+ break;
+ }
+
qemuBuildMachineACPI(&buf, def, qemuCaps);
virCommandAddArgBuffer(cmd, &buf);
-name guest=QEMUGuest1,debug-threads=on \
-S \
-object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes \
--machine pc-i440fx-4.2,usb=off,dump-guest-core=off \
+-machine pc-i440fx-4.2,usb=off,dump-guest-core=off,pcspk-audiodev=audio1 \
-accel tcg \
-cpu qemu64 \
-m size=219136k \
-boot strict=on \
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
-audiodev '{"id":"audio1","driver":"none"}' \
--soundhw pcspk \
-device ES1370,id=sound1,audiodev=audio1,bus=pci.0,addr=0x2 \
-device sb16,id=sound2,audiodev=audio1 \
-device AC97,id=sound3,audiodev=audio1,bus=pci.0,addr=0x3 \
-name guest=QEMUGuest1,debug-threads=on \
-S \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
--machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,pcspk-audiodev=audio1,acpi=off \
-accel tcg \
-cpu qemu64 \
-m size=219136k \
-boot strict=on \
-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
-audiodev '{"id":"audio1","driver":"none"}' \
--soundhw pcspk \
-device '{"driver":"ES1370","id":"sound1","audiodev":"audio1","bus":"pci.0","addr":"0x2"}' \
-device '{"driver":"sb16","id":"sound2","audiodev":"audio1"}' \
-device '{"driver":"AC97","id":"sound3","audiodev":"audio1","bus":"pci.0","addr":"0x3"}' \