[libvirt] [PATCH v2] qemu: sound: Support intel 'ich6' model

Cole Robinson crobinso at redhat.com
Fri Jan 21 21:31:47 UTC 2011


On 01/14/2011 02:05 PM, Daniel P. Berrange wrote:
> On Thu, Jan 13, 2011 at 10:45:41AM -0500, Cole Robinson wrote:
>> In QEMU, the card itself is a PCI device, but it requires a codec
>> (either -device hda-output or -device hda-duplex) to actually output
>> sound. We set up an hda-duplex codec by default: I think it's important
>> that a simple <sound model='ich6'/> sets up a useful codec, to have
>> consistent behavior with all other sound cards.
>>
>> This is basically Dan's proposal of
>>
>>     <sound model='ich6'>
>>         <codec type='output' slot='0'/>
>>         <codec type='duplex' slot='3'/>
>>     </sound>
>>
>> without the codec bits implemented.
>>
>> The important thing is to keep a consistent API here, we don't want some
>> <sound> models to require tweaking codecs but not others. Steps I see to
>> accomplishing this when someone gets around to it:
>>
>>     - every <sound> device has a <codec type='default'/> (unless codecs are
>>         manually specified)
>>     - <codec type='none'/> is required to specify 'no codecs'
>>     - new audio settings like mic=on|off could then be exposed in
>>         <sound> or <codec> in a consistent manner for all sound models
>>
>> Signed-off-by: Cole Robinson <crobinso at redhat.com>
>> ---
>>  docs/formatdomain.html.in                          |    5 ++-
>>  docs/schemas/domain.rng                            |    1 +
>>  src/conf/domain_conf.c                             |    3 +-
>>  src/conf/domain_conf.h                             |    1 +
>>  src/qemu/qemu_command.c                            |   24 ++++++++++++++++---
>>  .../qemuxml2argv-sound-device.args                 |    2 +-
>>  .../qemuxml2argvdata/qemuxml2argv-sound-device.xml |    1 +
>>  tests/qemuxml2argvdata/qemuxml2argv-sound.args     |    2 +-
>>  tests/qemuxml2argvdata/qemuxml2argv-sound.xml      |    1 +
>>  9 files changed, 31 insertions(+), 9 deletions(-)
>>
>> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>> index e9fcea1..b9b83c2 100644
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -1663,8 +1663,9 @@ qemu-kvm -net nic,model=? /dev/null
>>          The <code>sound</code> element has one mandatory attribute,
>>          <code>model</code>, which specifies what real sound device is emulated.
>>          Valid values are specific to the underlying hypervisor, though typical
>> -        choices are 'es1370', 'sb16', and 'ac97'
>> -        (<span class="since">'ac97' only since 0.6.0</span>)
>> +        choices are 'es1370', 'sb16', 'ac97', and 'ich6'
>> +        (<span class="since">
>> +         'ac97' only since 0.6.0, 'ich6' only since 0.8.8</span>)
>>        </dd>
>>      </dl>
>>  
>> diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
>> index 9c1e9bb..ae0defe 100644
>> --- a/docs/schemas/domain.rng
>> +++ b/docs/schemas/domain.rng
>> @@ -1496,6 +1496,7 @@
>>            <value>es1370</value>
>>            <value>pcspk</value>
>>            <value>ac97</value>
>> +          <value>ich6</value>
>>          </choice>
>>        </attribute>
>>        <optional>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index e5b89a2..3aabdf9 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -225,7 +225,8 @@ VIR_ENUM_IMPL(virDomainSoundModel, VIR_DOMAIN_SOUND_MODEL_LAST,
>>                "sb16",
>>                "es1370",
>>                "pcspk",
>> -              "ac97")
>> +              "ac97",
>> +              "ich6")
>>  
>>  VIR_ENUM_IMPL(virDomainMemballoonModel, VIR_DOMAIN_MEMBALLOON_MODEL_LAST,
>>                "virtio",
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index 81409f8..924ce89 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -458,6 +458,7 @@ enum virDomainSoundModel {
>>      VIR_DOMAIN_SOUND_MODEL_ES1370,
>>      VIR_DOMAIN_SOUND_MODEL_PCSPK,
>>      VIR_DOMAIN_SOUND_MODEL_AC97,
>> +    VIR_DOMAIN_SOUND_MODEL_ICH6,
>>  
>>      VIR_DOMAIN_SOUND_MODEL_LAST
>>  };
>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index a0075a4..2024221 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -1727,11 +1727,13 @@ qemuBuildSoundDevStr(virDomainSoundDefPtr sound)
>>          goto error;
>>      }
>>  
>> -    /* Hack for 2 wierdly unusal devices name in QEMU */
>> +    /* Hack for wierdly unusal devices name in QEMU */
>>      if (STREQ(model, "es1370"))
>>          model = "ES1370";
>>      else if (STREQ(model, "ac97"))
>>          model = "AC97";
>> +    else if (STREQ(model, "ich6"))
>> +        model = "intel-hda";
>>  
>>      virBufferVSprintf(&buf, "%s", model);
>>      virBufferVSprintf(&buf, ",id=%s", sound->info.alias);
>> @@ -3751,6 +3753,12 @@ qemuBuildCommandLine(virConnectPtr conn,
>>                          goto error;
>>  
>>                      virCommandAddArg(cmd, str);
>> +
>> +                    if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6) {
>> +                        virCommandAddArgList(cmd,
>> +                                             "-device", "hda-duplex", NULL);
>> +                    }
> 
> To allow us to later add hotplug, we need to include an 'id'
> on this device. We should also set the codec slot number
> and explicitly reference the intel-hda sound card so that
> you can give multiple ich6 cards in one guest. Something
> like. eg for a device with a codec in slot 3, we'd do
> 
>    -device intel-hda,id=foo -device hda-duplex,id=codecfoo3,bus=foo,cad=3
> 
> Obviously hardcode slot 0 for now.
> 
> Even though we don't have hotplug now, we need all the IDs
> and cad properties wired up, so that if someone upgrades
> they can use hotplug without having to reboot all their
> guests.

Thanks, I'll address this in the next posting.

- Cole




More information about the libvir-list mailing list