[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] qemu: sound: Support intel 'hda' model



On Tue, Jan 11, 2011 at 11:10:04AM +0000, Daniel P. Berrange wrote:
> On Tue, Jan 11, 2011 at 11:46:14AM +0100, Gerd Hoffmann wrote:
> > On 01/10/11 18:19, Cole Robinson wrote:
> > >In QEMU, the card itself is a PCI device, but it requires
> > >-device hda-output in order to actually get sound to the host. AIUI this
> > >is just HDA configuration and does not require stable addressing, so
> > >is not presently represented in the XML.
> > 
> > It isn't that simple.  There are actually multiple devices involved.
> > Each audio codec (yes, there can be multiple of these, up to 15) is
> > connected via HDA Link to the pci controller.  Each audio codec has
> > a codec address (HDA bus property: cad=[0..14]).
> >
> > So you can specify "-device intel-hda -device hda-duplex -device
> > hda-output" and the guest has multiple audio devices.  Win7 even
> > handles this correctly, whereas alsa uses only the first codec it
> > finds (lowest codec address).  Not that this buys you much today,
> > qemu mixes all channels together before sending them off to the
> > hosts sound system, i.e. you don't see a stream per sound card in
> > pulseaudio.  That might change in the future though.
> > 
> 
> So 'intel-hda' should really be considered as a controller,
> and hda-output' & 'hda-duplex' are the things to be treated
> as devices in the guest config.
> 
> This suggests a setup more like the one we did for virtio-serial
> where we'd invent a new address type for codecs, and have XML
> looking something like
> 
>     <controller type='hda' model='ich6'>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
>     </controller>
>     <sound model='hda-output'>
>       <address type='hda' codec='0'/>
>     </sound>
>     <sound model='hda-duplex'>
>       <address type='hda' codec='1'/>
>     </sound>
> 
> Are there any technical model names for 'hda-output' 'hda-duplex'
> we need to be aware of (as we potentially have ich6, ich7, 8, 9,
> etc for intel-hda in the future)
> 
> > We also might see more hda codecs in the future.  Maybe to pass
> > through digital audio interfaces from the host?  Not investigated
> > yet in detail though.
> > 
> > The HDA Links are even hot-pluggable (new audio codec can be linked
> > up when putting the laptop into the docking station for example),
> > although the qemu emulation doesn't support that today.
> 
> Hotplug is another good reason for us to treat the 'hda-output'
> and 'hda-duplex' objects as the <sound> device in libvirt XML,
> because then we can add/remove them via virDomainAttachDevice
> which we couldn't otherwise do


One further alternative is to explicitly list codecs under the
<sound> element eg

   <sound model='ich6'>
     <codec name='output' slot=0/>
     <codec name='duplex' slot=3/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
   </sound>

We could use virDomainAttachDevice/DetachDevice to hotplug an
entire ich6 device, and  virDomainUpdateDevice to hotplug
individual codecs within the device. This might be a slightly
nicer option for applications, so it would more closely mesh
with what the guest OS actually sees as its device(s).

Daniel


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]