On Fri, Aug 07, 2020 at 07:09:33PM +0400, Roman Bogorodskiy wrote: > Allow to map sound playback and recording devices to host devices > using "<audio type='oss'/>" OSS audio backend. > > Signed-off-by: Roman Bogorodskiy <bogorodskiy@xxxxxxxxx> > --- > src/bhyve/bhyve_command.c | 26 ++++++++++++++++--- > src/conf/domain_conf.c | 13 ++++++++++ > src/conf/domain_conf.h | 4 +++ > src/libvirt_private.syms | 1 + > .../bhyvexml2argv-sound.args | 2 +- > .../bhyvexml2argvdata/bhyvexml2argv-sound.xml | 8 +++++- > .../bhyvexml2xmlout-sound.xml | 5 ++++ > 7 files changed, 54 insertions(+), 5 deletions(-) > > diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c > index 1f42f71347..8e7907b882 100644 > --- a/src/bhyve/bhyve_command.c > +++ b/src/bhyve/bhyve_command.c > @@ -478,9 +478,12 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def, > static int > bhyveBuildSoundArgStr(const virDomainDef *def G_GNUC_UNUSED, > virDomainSoundDefPtr sound, > + virDomainAudioDefPtr audio, > bhyveConnPtr driver, > virCommandPtr cmd) > { > + g_auto(virBuffer) params = VIR_BUFFER_INITIALIZER; > + > if (!(bhyveDriverGetBhyveCaps(driver) & BHYVE_CAP_SOUND_HDA)) { > /* Currently, bhyve only supports "hda" sound devices, so > if it's not supported, sound devices are not supported at all */ > @@ -497,9 +500,24 @@ bhyveBuildSoundArgStr(const virDomainDef *def G_GNUC_UNUSED, > } > > virCommandAddArg(cmd, "-s"); > - virCommandAddArgFormat(cmd, "%d:%d,hda,play=/dev/dsp0", > + > + if (audio) { > + if (audio->type == VIR_DOMAIN_AUDIO_TYPE_OSS) { Should use a switch() here and report enum range errors in the LAST/default case. This will force us to fix bhyve when we add more audio types later to do proper error reporting. > + if (audio->backend.oss.inputDev) > + virBufferAsprintf(¶ms, ",play=%s", > + audio->backend.oss.inputDev); > + > + if (audio->backend.oss.outputDev) > + virBufferAsprintf(¶ms, ",rec=%s", > + audio->backend.oss.outputDev); > + } > + } > + > + virCommandAddArgFormat(cmd, "%d:%d,hda%s", > sound->info.addr.pci.slot, > - sound->info.addr.pci.function); > + sound->info.addr.pci.function, > + virBufferCurrentContent(¶ms)); > + What happens if you dont give an any play arg - does it just assume the default /dev/dsp0 ? Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|