]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
conf: Add USB sound card support and implement it for qemu
authorPeter Krempa <pkrempa@redhat.com>
Thu, 24 Jul 2014 15:32:31 +0000 (17:32 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 8 Aug 2014 12:34:20 +0000 (14:34 +0200)
17 files changed:
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_command.c
tests/qemucapabilitiesdata/caps_1.2.2-1.caps
tests/qemucapabilitiesdata/caps_1.3.1-1.caps
tests/qemucapabilitiesdata/caps_1.4.2-1.caps
tests/qemucapabilitiesdata/caps_1.5.3-1.caps
tests/qemucapabilitiesdata/caps_1.6.0-1.caps
tests/qemucapabilitiesdata/caps_1.6.50-1.caps
tests/qemuhelptest.c
tests/qemuxml2argvdata/qemuxml2argv-sound-device.args
tests/qemuxml2argvdata/qemuxml2argv-sound-device.xml
tests/qemuxml2argvtest.c

index 418120eb775501ad1fa28cb5e34e6267586ba6e6..6b5df51a0f41729e3ebc77d0364473ac6390a59f 100644 (file)
@@ -5031,9 +5031,10 @@ 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', 'ac97', and 'ich6'
+        choices are 'es1370', 'sb16', 'ac97', 'ich6' and 'usb'.
         (<span class="since">
-         'ac97' only since 0.6.0, 'ich6' only since 0.8.8</span>)
+         'ac97' only since 0.6.0, 'ich6' only since 0.8.8,
+         'usb' only since 1.2.7</span>)
       </dd>
     </dl>
 
index b7a1b6f8dcbf06e18d3095d3d7eb7f7856235980..033f2f65026cfb57a73d1ce7631470ab033bbd2d 100644 (file)
           <value>ac97</value>
           <value>ich6</value>
           <value>ich9</value>
+          <value>usb</value>
         </choice>
       </attribute>
       <interleave>
index d87ca24f67090afa50f1949e3c343238ac27692e..c7016f33d4712e5c0442d07ac459800b0e6743cc 100644 (file)
@@ -458,7 +458,8 @@ VIR_ENUM_IMPL(virDomainSoundModel, VIR_DOMAIN_SOUND_MODEL_LAST,
               "pcspk",
               "ac97",
               "ich6",
-              "ich9")
+              "ich9",
+              "usb")
 
 VIR_ENUM_IMPL(virDomainMemballoonModel, VIR_DOMAIN_MEMBALLOON_MODEL_LAST,
               "virtio",
index bffc0a58bd3c11a0dc36379d38799910364a4482..ff7d640654073b5452bdcfc4bce62d2902229987 100644 (file)
@@ -1177,6 +1177,7 @@ typedef enum {
     VIR_DOMAIN_SOUND_MODEL_AC97,
     VIR_DOMAIN_SOUND_MODEL_ICH6,
     VIR_DOMAIN_SOUND_MODEL_ICH9,
+    VIR_DOMAIN_SOUND_MODEL_USB,
 
     VIR_DOMAIN_SOUND_MODEL_LAST
 } virDomainSoundModel;
index f69c4d0c70ca2a01ef7b0408fdb8884b2de7c8f3..360cc67c0ed9a2b19fcb4f2087ff753af8ce8e39 100644 (file)
@@ -264,6 +264,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "memory-backend-ram", /* 170 */
               "numa",
               "memory-backend-file",
+              "usb-audio",
     );
 
 
@@ -1483,6 +1484,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
     { "usb-kbd", QEMU_CAPS_DEVICE_USB_KBD },
     { "memory-backend-ram", QEMU_CAPS_OBJECT_MEMORY_RAM },
     { "memory-backend-file", QEMU_CAPS_OBJECT_MEMORY_FILE },
+    { "usb-audio", QEMU_CAPS_OBJECT_USB_AUDIO },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
index 1db84ab670f9ae67e73c78166725bcb84b135b39..2911759b0e588d3ac9e3adb870659790322ef690 100644 (file)
@@ -212,6 +212,7 @@ typedef enum {
     QEMU_CAPS_OBJECT_MEMORY_RAM  = 170, /* -object memory-backend-ram */
     QEMU_CAPS_NUMA               = 171, /* newer -numa handling with disjoint cpu ranges */
     QEMU_CAPS_OBJECT_MEMORY_FILE = 172, /* -object memory-backend-file */
+    QEMU_CAPS_OBJECT_USB_AUDIO   = 173, /* usb-audio device support */
 
     QEMU_CAPS_LAST,                   /* this must always be the last item */
 } virQEMUCapsFlags;
index 033a5a8e1fbed6aefc2c111601cfe7062ee42394..8a699765ed0a16e4629fc2f26d98ed4fb0ec6f97 100644 (file)
@@ -2086,9 +2086,10 @@ qemuAssignDevicePCISlots(virDomainDefPtr def,
     for (i = 0; i < def->nsounds; i++) {
         if (def->sounds[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
             continue;
-        /* Skip ISA sound card, and PCSPK */
+        /* Skip ISA sound card, PCSPK and usb-audio */
         if (def->sounds[i]->model == VIR_DOMAIN_SOUND_MODEL_SB16 ||
-            def->sounds[i]->model == VIR_DOMAIN_SOUND_MODEL_PCSPK)
+            def->sounds[i]->model == VIR_DOMAIN_SOUND_MODEL_PCSPK ||
+            def->sounds[i]->model == VIR_DOMAIN_SOUND_MODEL_USB)
             continue;
 
         if (virDomainPCIAddressReserveNextSlot(addrs, &def->sounds[i]->info,
@@ -4683,6 +4684,15 @@ qemuBuildSoundDevStr(virDomainDefPtr def,
     case VIR_DOMAIN_SOUND_MODEL_ICH6:
         model = "intel-hda";
         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"));
+            goto error;
+        }
+        break;
     case VIR_DOMAIN_SOUND_MODEL_ICH9:
         model = "ich9-intel-hda";
         if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA)) {
index ebbfb8269198f27300da8ac8862b0d63ae3a605f..c8a379acbe83a6faf5ee2e357f28e98e1b44e698 100644 (file)
     <flag name='enable-fips'/>
     <flag name='usb-kbd'/>
     <flag name='host-pci-multidomain'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index ab631a2e2858d81edd4d5136049c17ddd39dd250..4b7651e550e0ffd8678760c5f4abdcca83f46ad8 100644 (file)
     <flag name='kvm-pit-lost-tick-policy'/>
     <flag name='usb-kbd'/>
     <flag name='host-pci-multidomain'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index e710b60c56634a59d91fbdd6142df159d752f0b1..d146bf9a21acfe3d25962e90e95840574c8fd5db 100644 (file)
     <flag name='kvm-pit-lost-tick-policy'/>
     <flag name='usb-kbd'/>
     <flag name='host-pci-multidomain'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index 36758c8e970b02dd4905c9a1e2776a9f59bd722d..5fa30aa8e8df7310b8d32f67eb28b557aac5b972 100644 (file)
     <flag name='spiceport'/>
     <flag name='usb-kbd'/>
     <flag name='host-pci-multidomain'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index ca2c236ca0cc5442606983e67f0c2d87e45c909d..f364bbf1ad3d1d9d69a02b1114228dc3bb632b10 100644 (file)
     <flag name='usb-kbd'/>
     <flag name='host-pci-multidomain'/>
     <flag name='msg-timestamp'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index 4b9f693d7ebd7307e798edeb482b6ad19b3486cc..10ce1b5d216ce5e567d03021c2ce26a077863b7f 100644 (file)
     <flag name='host-pci-multidomain'/>
     <flag name='msg-timestamp'/>
     <flag name='numa'/>
+    <flag name='usb-audio'/>
   </qemuCaps>
index 105a563d54b0eb1c3a1fcd47ca490618c52534de..366e36def954d10dfe35e135b7b75bf2e2efd6e8 100644 (file)
@@ -842,7 +842,8 @@ mymain(void)
             QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX,
             QEMU_CAPS_VNC_SHARE_POLICY,
             QEMU_CAPS_DEVICE_USB_KBD,
-            QEMU_CAPS_DEVICE_USB_STORAGE);
+            QEMU_CAPS_DEVICE_USB_STORAGE,
+            QEMU_CAPS_OBJECT_USB_AUDIO);
     DO_TEST("qemu-1.2.0", 1002000, 0, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -951,7 +952,8 @@ mymain(void)
             QEMU_CAPS_VNC_SHARE_POLICY,
             QEMU_CAPS_DEVICE_USB_STORAGE,
             QEMU_CAPS_DEVICE_USB_KBD,
-            QEMU_CAPS_USB_STORAGE_REMOVABLE);
+            QEMU_CAPS_USB_STORAGE_REMOVABLE,
+            QEMU_CAPS_OBJECT_USB_AUDIO);
     DO_TEST("qemu-kvm-1.2.0", 1002000, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -1065,7 +1067,8 @@ mymain(void)
             QEMU_CAPS_VNC_SHARE_POLICY,
             QEMU_CAPS_DEVICE_USB_STORAGE,
             QEMU_CAPS_DEVICE_USB_KBD,
-            QEMU_CAPS_USB_STORAGE_REMOVABLE);
+            QEMU_CAPS_USB_STORAGE_REMOVABLE,
+            QEMU_CAPS_OBJECT_USB_AUDIO);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 1511389d8ff8d5eaf933db17a0b1437620b8eb11..3e2b293cd38414fbb405b823631d7bbc60ab2ab7 100644 (file)
@@ -14,4 +14,5 @@ id=sound6-codec0,bus=sound6.0,cad=0 \
 -device ich9-intel-hda,id=sound7,bus=pci.0,addr=0x8 \
 -device hda-micro,id=sound7-codec0,bus=sound7.0,cad=0 \
 -device hda-duplex,id=sound7-codec1,bus=sound7.0,cad=1 \
+-device usb-audio,id=sound8 \
 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x9
index 8ce718e98ae3cbcda55686985d9e5adf13c8bae3..aa6ab1ff9e07748a63e9dcca9959ca248c92eae8 100644 (file)
@@ -36,6 +36,7 @@
       <codec type='micro'/>
       <codec type='duplex'/>
     </sound>
+    <sound model='usb'/>
     <memballoon model='virtio'/>
   </devices>
 </domain>
index 609c1bc8b00fdfb83455f26f9f07e63e170de221..1c121ffd3c5ed834ad3c4adaea6d13c1e8ac2727 100644 (file)
@@ -1136,7 +1136,8 @@ mymain(void)
     DO_TEST("sound-device",
             QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
             QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
-            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA);
+            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
+            QEMU_CAPS_OBJECT_USB_AUDIO);
     DO_TEST("fs9p",
             QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
             QEMU_CAPS_FSDEV_WRITEOUT);