From nobody Fri May 17 11:05:18 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1712849208223501.5364458852338; Thu, 11 Apr 2024 08:26:48 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E72D217D4; Thu, 11 Apr 2024 11:26:46 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 84C60607; Thu, 11 Apr 2024 11:25:46 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 29E6B1753; Thu, 11 Apr 2024 11:25:43 -0400 (EDT) Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 24E2D1753 for ; Thu, 11 Apr 2024 11:25:41 -0400 (EDT) Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-56fe8093c9eso774990a12.3 for ; Thu, 11 Apr 2024 08:25:41 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id c7-20020a056402120700b0056c051e59bfsm781648edw.9.2024.04.11.08.25.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 08:25:39 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, TVD_SPACE_RATIO autolearn=unavailable autolearn_force=no version=3.4.4 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712849139; x=1713453939; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sXhkBJmO36ce67QsmHFfiVIZ+41uUWQnRHXOF997peg=; b=t3FeI7/4NB7WIXKlAHn3u1icFgMkCQuM7uWVT+NlgOqunepLjhPGMjckSlQAODYn01 nYgreKp9b1yMqc3bqFzQWA5wDyPH1w5JLwUgyU0ryyQdgNxPjQyxTv31p6+b796qqzGj 8SCsYwmtS/L/vPWGAf7r+ueYvMyyQkd7jzYFQuqVzB/H1ZNCP7c2sGPXKZj6OWarYIfC q5P88R/WCmN8lfBAYylUR92PA5Xb4wDZ+Fnqbbt9IQQ6kGsShcgqycEwAaMq9smRfpRy mafOUqKWiyLbD8ApiENmNJyL2zlOCu/Z2LeE50rbxLFErmdFX3AF9h2/5cX9dDrAksmL syrA== X-Gm-Message-State: AOJu0YzJLaHivbwzJfrf3gj16aS11wLb9TR32dvbTRltY7Mpwgw1jQon yRYuv8ubhhYA1kkI8lrIFPfVAzB0Psb/Jko/Q+KIrw70y2WUaXj++GX6FqnMcnE= X-Google-Smtp-Source: AGHT+IH2z850UWpereVX1FuxZDVRpWs+GyqdRHd+oPy81uW+T17lo3o2oAU3gJ0l7SANPRs4Vz+dLw== X-Received: by 2002:a50:9f6a:0:b0:56e:3601:c761 with SMTP id b97-20020a509f6a000000b0056e3601c761mr92626edf.23.1712849139455; Thu, 11 Apr 2024 08:25:39 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH 1/3] qemu_capabilities: Add QEMU_CAPS_DEVICE_VIRTIO_SOUND capability Date: Thu, 11 Apr 2024 20:54:50 +0530 Message-Id: <20240411152452.75541-2-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411152452.75541-1-rayhan.faizel@gmail.com> References: <20240411152452.75541-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: M3JKCL7TTH7HXSCFSMVENX35C2LHOZJ5 X-Message-ID-Hash: M3JKCL7TTH7HXSCFSMVENX35C2LHOZJ5 X-MailFrom: rayhan.faizel@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Rayhan Faizel X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1712849208533100001 Signed-off-by: Rayhan Faizel --- src/qemu/qemu_capabilities.c | 3 +++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + 8 files changed, 10 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 21f93c6774..de38eaf453 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -706,6 +706,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "blockjob.backing-mask-protocol", /* QEMU_CAPS_BLOCKJOB_BACK= ING_MASK_PROTOCOL */ "display-reload", /* QEMU_CAPS_DISPLAY_RELOAD */ "usb-mtp", /* QEMU_CAPS_DEVICE_USB_MTP */ + "virtio-sound", /* QEMU_CAPS_DEVICE_VIRTIO_SOUND */ ); =20 =20 @@ -1395,6 +1396,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "cryptodev-backend-lkcf", QEMU_CAPS_OBJECT_CRYPTO_LKCF }, { "pvpanic-pci", QEMU_CAPS_DEVICE_PANIC_PCI }, { "usb-mtp", QEMU_CAPS_DEVICE_USB_MTP }, + { "virtio-sound-pci", QEMU_CAPS_DEVICE_VIRTIO_SOUND }, + { "virtio-sound-device", QEMU_CAPS_DEVICE_VIRTIO_SOUND }, }; =20 =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 5082967cba..23580da8fd 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -685,6 +685,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_BLOCKJOB_BACKING_MASK_PROTOCOL, /* backing-mask-protocol of = block-commit/block-stream */ QEMU_CAPS_DISPLAY_RELOAD, /* 'display-reload' qmp command is supported= */ QEMU_CAPS_DEVICE_USB_MTP, /* -device usb-mtp */ + QEMU_CAPS_DEVICE_VIRTIO_SOUND, /* -device virtio-sound-* */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemu= capabilitiesdata/caps_8.2.0_aarch64.xml index fe4c65c9b7..1ccf2cd972 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -165,6 +165,7 @@ + 8002000 61700246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemuc= apabilitiesdata/caps_8.2.0_armv7l.xml index e26dc43963..58da0f857d 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -172,6 +172,7 @@ + 8002000 0 qemu-8.2.0-7.fc39 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/= qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index bfe59f0c29..618a7075df 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -156,6 +156,7 @@ + 8002000 106300246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemuca= pabilitiesdata/caps_8.2.0_s390x.xml index 70e85bef28..acf18d5896 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -121,6 +121,7 @@ + 8002000 39100246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_8.2.0_x86_64.xml index 40716fa8d1..5d7755a65e 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -202,6 +202,7 @@ + 8002000 43100246 v8.2.0 diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemuc= apabilitiesdata/caps_9.0.0_x86_64.xml index fcfd9cdda9..3a73547b1c 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -204,6 +204,7 @@ + 8002091 43100245 v9.0.0-rc1-55-g7fcf7575f3 --=20 2.34.1 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 17 11:05:18 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1712849334486110.15456175769077; Thu, 11 Apr 2024 08:28:54 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 6E5D617A8; Thu, 11 Apr 2024 11:28:53 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 90F53180E; Thu, 11 Apr 2024 11:25:53 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 159C9607; Thu, 11 Apr 2024 11:25:44 -0400 (EDT) Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 69CD4175B for ; Thu, 11 Apr 2024 11:25:42 -0400 (EDT) Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-56e23bbe06bso2183186a12.0 for ; Thu, 11 Apr 2024 08:25:42 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id c7-20020a056402120700b0056c051e59bfsm781648edw.9.2024.04.11.08.25.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 08:25:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712849141; x=1713453941; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T1MzIJkCukeE9xeJs2YfgU6GDOyzzOT4Ifts1o26rVY=; b=hAeIjdJA39OHoQtJKWpjd2zxRV9WlFwBdYl8Yv/KVnJJMiQcntvTMzplbsTN9tdTnM OGZMIdRfodrFoCkR8saAaFtyKCdrVsXmxDgEZP1p58yBLfqUY5AH+poe53NNuMrA31dn quMSwh4xm3uwItkVIQjhJnBdyqPQD+JFeX6AgLZVxT7i0DvehY0NMHIQK+WFU2Au0aW+ Dwb3I6MiYC7Rk2OvkIbiyAMvpH8uW3ayW3JlYbNJBgstcucK0K53GmFiAsVlAJdZ/SeZ +0XbmNVoEOFs0FuqA7tguZravzepXCOl4hf02D8oUYrP/UfvlrWIanRQtdQW9/0q56M8 lUdQ== X-Gm-Message-State: AOJu0Yz/xg9/58zdGzWspVkZVgJiUFluggZrmKkYY6q+rIBO9qxjmLUh y9X93Gt6g+Y3atyuTsD6/+2ZmXlnuaDc5qW0UjwXAMCfXMig4b80aDOYzpzz91A= X-Google-Smtp-Source: AGHT+IFw5Z1lqxsaGHN+dCcZCbNYt4Nmb+nZmJpgCn4WgQFp+NdJBsn+W0SZ23EoFMwXjKSkbglgcw== X-Received: by 2002:a50:99cf:0:b0:56b:829a:38e3 with SMTP id n15-20020a5099cf000000b0056b829a38e3mr108069edb.16.1712849140557; Thu, 11 Apr 2024 08:25:40 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH 2/3] conf: Introduce support for virtio-sound devices Date: Thu, 11 Apr 2024 20:54:51 +0530 Message-Id: <20240411152452.75541-3-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411152452.75541-1-rayhan.faizel@gmail.com> References: <20240411152452.75541-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: EEYSSVWGYOYRUL5TYFVINPGBMSEI7ZFS X-Message-ID-Hash: EEYSSVWGYOYRUL5TYFVINPGBMSEI7ZFS X-MailFrom: rayhan.faizel@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Rayhan Faizel X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1712849335102100001 This patch adds parsing of the virtio sound model, along with parsing of virtio options and PCI/virtio-mmio address assignment. A new 'streams' attribute is added for configuring number of PCM streams (default is 2) in virtio sound devices. QEMU additionally has jacks and chm= aps parameters but these are currently stubbed, hence they are excluded in this patch series. Signed-off-by: Rayhan Faizel --- docs/formatdomain.rst | 11 +++++++++-- src/conf/domain_conf.c | 25 +++++++++++++++++++++++++ src/conf/domain_conf.h | 4 ++++ src/conf/domain_postparse.c | 13 ++++++++++++- src/conf/schemas/domaincommon.rng | 11 +++++++++++ src/libxl/libxl_domain.c | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain_address.c | 9 +++++++++ src/qemu/qemu_validate.c | 8 ++++++++ 9 files changed, 80 insertions(+), 3 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index e2f66b982c..43d5928ffa 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -7390,8 +7390,9 @@ A virtual sound card can be attached to the host via = the ``sound`` element. what real sound device is emulated. Valid values are specific to the underlying hypervisor, though typical choices are ``sb16``, ``es1370``, ``pcspk``, ``ac97`` (:since:`Since 0.6.0`), ``ich6`` (:since:`Since 0.8= .8`), - ``ich9`` (:since:`Since 1.1.3`), ``usb`` (:since:`Since 1.2.8`) and ``i= ch7`` - (:since:`Since 6.7.0`, bhyve only). + ``ich9`` (:since:`Since 1.1.3`), ``usb`` (:since:`Since 1.2.8`), ``ich7= `` + (:since:`Since 6.7.0`, bhyve only) and ``virtio`` + (:since:`Since 10.3.0 and QEMU 8.2.0`). =20 :since:`Since 0.9.13`, a sound element with ``ich6`` or ``ich9`` models ca= n have optional sub-elements ```` to attach various audio codecs to the au= dio @@ -7419,6 +7420,12 @@ multi-channel mode by using the ``multichannel`` att= ribute:: =20 =20 +:since:`Since 10.3.0 and QEMU 8.2.0` the number of PCM streams in a ``virt= io`` +sound device can be configured by using the ``streams`` attribute, which +defaults to ``2`` if left unspecified:: + + + Each ``sound`` element has an optional sub-element ``
`` which can= tie the device to a particular PCI slot. See `Device Addresses`_. =20 diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 48c5d546da..d63cb9bf64 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -778,6 +778,7 @@ VIR_ENUM_IMPL(virDomainSoundModel, "ich9", "usb", "ich7", + "virtio", ); =20 VIR_ENUM_IMPL(virDomainAudioType, @@ -3211,6 +3212,7 @@ void virDomainSoundDefFree(virDomainSoundDef *def) virDomainSoundCodecDefFree(def->codecs[i]); g_free(def->codecs); =20 + g_free(def->virtio); g_free(def); } =20 @@ -11881,6 +11883,13 @@ virDomainSoundDefParseXML(virDomainXMLOption *xmlo= pt, return NULL; } =20 + if (def->model =3D=3D VIR_DOMAIN_SOUND_MODEL_VIRTIO) { + if (virXMLPropUInt(node, "streams", 10, + VIR_XML_PROP_NONZERO, + &def->streams) < 0) + return NULL; + } + audioNode =3D virXPathNode("./audio", ctxt); if (audioNode) { if (virXMLPropUInt(audioNode, "id", 10, @@ -11892,6 +11901,10 @@ virDomainSoundDefParseXML(virDomainXMLOption *xmlo= pt, if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, &def->info, flags)= < 0) return NULL; =20 + if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt), + &def->virtio) < 0) + return NULL; + return g_steal_pointer(&def); } =20 @@ -11916,6 +11929,9 @@ virDomainSoundDefEquals(const virDomainSoundDef *a, if (a->multichannel !=3D b->multichannel) return false; =20 + if (a->streams !=3D b->streams) + return false; + if (a->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && !virDomainDeviceInfoAddressIsEqual(&a->info, &b->info)) return false; @@ -24836,6 +24852,7 @@ virDomainSoundDefFormat(virBuffer *buf, const char *model =3D virDomainSoundModelTypeToString(def->model); g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) driverAttrBuf =3D VIR_BUFFER_INITIALIZER; size_t i; =20 if (!model) { @@ -24860,6 +24877,14 @@ virDomainSoundDefFormat(virBuffer *buf, virTristateBoolTypeToString(def->multichannel)); } =20 + if (def->model =3D=3D VIR_DOMAIN_SOUND_MODEL_VIRTIO) { + virBufferAsprintf(&attrBuf, " streams=3D'%d'", def->streams); + + virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio); + + virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL); + } + virXMLFormatElement(buf, "sound", &attrBuf, &childBuf); =20 return 0; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 5925faaf1a..13ca722019 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1565,6 +1565,7 @@ typedef enum { VIR_DOMAIN_SOUND_MODEL_ICH9, VIR_DOMAIN_SOUND_MODEL_USB, VIR_DOMAIN_SOUND_MODEL_ICH7, + VIR_DOMAIN_SOUND_MODEL_VIRTIO, =20 VIR_DOMAIN_SOUND_MODEL_LAST } virDomainSoundModel; @@ -1586,6 +1587,9 @@ struct _virDomainSoundDef { virTristateBool multichannel; =20 unsigned int audioId; + + unsigned int streams; + virDomainVirtioOptions *virtio; }; =20 typedef enum { diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index cafa2d235d..112795ea65 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -677,6 +677,13 @@ virDomainInputDefPostParse(virDomainInputDef *input, } } =20 +static void +virDomainSoundDefPostParse(virDomainSoundDef *sound) +{ + if (sound->model =3D=3D VIR_DOMAIN_SOUND_MODEL_VIRTIO && sound->stream= s =3D=3D 0) + sound->streams =3D 2; +} + static int virDomainDeviceDefPostParseCommon(virDomainDeviceDef *dev, const virDomainDef *def, @@ -730,9 +737,13 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef *= dev, ret =3D 0; break; =20 + case VIR_DOMAIN_DEVICE_SOUND: + virDomainSoundDefPostParse(dev->data.sound); + ret =3D 0; + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_NET: - case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index f386e46fae..5cdd8328b6 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -5057,6 +5057,7 @@ ich7 ich9 usb + virtio @@ -5064,6 +5065,11 @@ + + + + + @@ -5084,6 +5090,11 @@ + + + + + diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 16c2ab973b..0f129ec69c 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -344,6 +344,7 @@ libxlDomainDefValidate(const virDomainDef *def, case VIR_DOMAIN_SOUND_MODEL_ICH7: case VIR_DOMAIN_SOUND_MODEL_USB: case VIR_DOMAIN_SOUND_MODEL_ICH9: + case VIR_DOMAIN_SOUND_MODEL_VIRTIO: case VIR_DOMAIN_SOUND_MODEL_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported audio model %1$s"), diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9d4563861f..5e69e71c6f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4479,6 +4479,7 @@ qemuBuildSoundDevCmd(virCommand *cmd, case VIR_DOMAIN_SOUND_MODEL_SB16: model =3D "sb16"; break; + case VIR_DOMAIN_SOUND_MODEL_VIRTIO: case VIR_DOMAIN_SOUND_MODEL_PCSPK: /* pc-speaker is handled separately= */ case VIR_DOMAIN_SOUND_MODEL_ICH7: case VIR_DOMAIN_SOUND_MODEL_LAST: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 7690021ca7..251f5b7e1a 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -324,6 +324,12 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDef *def, if (def->cryptos[i]->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TY= PE_NONE) def->cryptos[i]->info.type =3D type; } + + for (i =3D 0; i < def->nsounds; i++) { + if (def->sounds[i]->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYP= E_NONE && + def->sounds[i]->model =3D=3D VIR_DOMAIN_SOUND_MODEL_VIRTIO) + def->sounds[i]->info.type =3D type; + } } =20 =20 @@ -694,6 +700,9 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, case VIR_DOMAIN_SOUND_MODEL_ICH9: return pciFlags; =20 + case VIR_DOMAIN_SOUND_MODEL_VIRTIO: + return virtioFlags; + case VIR_DOMAIN_SOUND_MODEL_SB16: case VIR_DOMAIN_SOUND_MODEL_PCSPK: case VIR_DOMAIN_SOUND_MODEL_USB: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index de0867c4b1..9dea33bb53 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -4625,6 +4625,14 @@ qemuValidateDomainDeviceDefSound(virDomainSoundDef *= sound, } break; =20 + case VIR_DOMAIN_SOUND_MODEL_VIRTIO: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_SOUND)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-sound controller is not supported in = this QEMU binary")); + return -1; + } + break; + case VIR_DOMAIN_SOUND_MODEL_ES1370: case VIR_DOMAIN_SOUND_MODEL_AC97: case VIR_DOMAIN_SOUND_MODEL_ICH6: --=20 2.34.1 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 17 11:05:18 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1712849400907717.3305347676838; Thu, 11 Apr 2024 08:30:00 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id DCB3C1788; Thu, 11 Apr 2024 11:29:59 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A55D91852; Thu, 11 Apr 2024 11:25:57 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 62BD8607; Thu, 11 Apr 2024 11:25:45 -0400 (EDT) Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 413E9AD4 for ; Thu, 11 Apr 2024 11:25:44 -0400 (EDT) Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-516f2e0edb7so5892876e87.1 for ; Thu, 11 Apr 2024 08:25:44 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id c7-20020a056402120700b0056c051e59bfsm781648edw.9.2024.04.11.08.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 08:25:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712849142; x=1713453942; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wEJNSxkZ9QNSy17LKATDpWAHqRErtYtwKfMkg7ryl9c=; b=X3yY0Vqr/aFoi3kBCPXq4+FtsKMFdJo5ygy31ieq1sypuKS46jNoYEZiMBwHENhkKK aPs5vZPdBIHk6wBy6LG1LIn2fybX850s9yhYA+YIj08JRLbUeF2ipnesFmThX6A4gIxo qrTvDQJABAkrys27hcmBJl8x++xVJk0XJQCTceh2jqUYWYV4peImpgp4MnKSxzMO0aGI ZusCWz9k0B9EuGWWkPlZnx75c6icNtJTLqGLNqpL55fSh0sgNNrEGic5pt3QJKcI0j39 SjvWZvK2eh96c9AWqmQz9Tb0oPGJ+YSfBaNkt/hSIRss+3U16grtNood/fpO2yYEEfF1 sZZg== X-Gm-Message-State: AOJu0YxB1AJtetGTLuDy43wBkWHt9YPMBoQesChr3KfGd1V+XNss2+58 S2eNR6MK+wlpqx1kJRlRfrYaLcq6WJ1E1rBmA+xfIGWWKyuYcgwZYH1LAlY6tS8= X-Google-Smtp-Source: AGHT+IHUpn/j+GDQE7EfFmhCGi2v0UJtGZLz6K3m50ZR3tOXhZTqAyCmn5WwWNtHEqxIUzW8VLR/tQ== X-Received: by 2002:ac2:5450:0:b0:516:a77a:9a7b with SMTP id d16-20020ac25450000000b00516a77a9a7bmr24731lfn.52.1712849141430; Thu, 11 Apr 2024 08:25:41 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH 3/3] qemu: Generate command line for sound devices with model 'virtio' Date: Thu, 11 Apr 2024 20:54:52 +0530 Message-Id: <20240411152452.75541-4-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411152452.75541-1-rayhan.faizel@gmail.com> References: <20240411152452.75541-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: HKPYX3SEF5LCH6TDS4SOXVVFZ6NK2YGS X-Message-ID-Hash: HKPYX3SEF5LCH6TDS4SOXVVFZ6NK2YGS X-MailFrom: rayhan.faizel@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Rayhan Faizel X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1712849401382100001 Allow generation of command line for virtio-sound-pci and virtio-sound-devi= ce devices along with additional virtio options. A new testcase is added to test virtio-sound-pci. The arm-vexpressa9-virtio testcase is also extended to test virtio-sound-device. Signed-off-by: Rayhan Faizel --- src/qemu/qemu_command.c | 23 +++++++++- .../arm-vexpressa9-virtio.aarch64-latest.args | 1 + .../arm-vexpressa9-virtio.aarch64-latest.xml | 3 ++ .../qemuxmlconfdata/arm-vexpressa9-virtio.xml | 3 +- .../sound-device-virtio.x86_64-latest.args | 36 +++++++++++++++ .../sound-device-virtio.x86_64-latest.xml | 44 +++++++++++++++++++ tests/qemuxmlconfdata/sound-device-virtio.xml | 28 ++++++++++++ tests/qemuxmlconftest.c | 1 + 8 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxmlconfdata/sound-device-virtio.x86_64-latest= .args create mode 100644 tests/qemuxmlconfdata/sound-device-virtio.x86_64-latest= .xml create mode 100644 tests/qemuxmlconfdata/sound-device-virtio.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5e69e71c6f..b5537d1e8f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -952,8 +952,12 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDe= f *device, break; } =20 + case VIR_DOMAIN_DEVICE_SOUND: { + *baseName =3D "virtio-sound"; + *virtioOptions =3D device->data.sound->virtio; + } + case VIR_DOMAIN_DEVICE_LEASE: - case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -4458,6 +4462,8 @@ qemuBuildSoundDevCmd(virCommand *cmd, const char *model =3D NULL; g_autofree char *audioid =3D NULL; virTristateBool multichannel =3D VIR_TRISTATE_BOOL_ABSENT; + unsigned int streams =3D 0; + bool virtio =3D false; =20 switch (sound->model) { case VIR_DOMAIN_SOUND_MODEL_ES1370: @@ -4480,6 +4486,9 @@ qemuBuildSoundDevCmd(virCommand *cmd, model =3D "sb16"; break; case VIR_DOMAIN_SOUND_MODEL_VIRTIO: + virtio =3D true; + streams =3D sound->streams; + break; case VIR_DOMAIN_SOUND_MODEL_PCSPK: /* pc-speaker is handled separately= */ case VIR_DOMAIN_SOUND_MODEL_ICH7: case VIR_DOMAIN_SOUND_MODEL_LAST: @@ -4491,11 +4500,21 @@ qemuBuildSoundDevCmd(virCommand *cmd, return -1; } =20 + if (!virtio) { + if (virJSONValueObjectAdd(&props, + "s:driver", model, + NULL) < 0) + return -1; + } else { + if (!(props =3D qemuBuildVirtioDevProps(VIR_DOMAIN_DEVICE_SOUND, s= ound, qemuCaps))) + return -1; + } + if (virJSONValueObjectAdd(&props, - "s:driver", model, "s:id", sound->info.alias, "S:audiodev", audioid, "T:multi", multichannel, + "p:streams", streams, NULL) < 0) return -1; =20 diff --git a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.arg= s b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args index b4c295be6b..4ed442364c 100644 --- a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args +++ b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args @@ -41,6 +41,7 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-armtest= /.config \ -chardev pty,id=3Dcharconsole1 \ -device '{"driver":"virtconsole","chardev":"charconsole1","id":"console1"}= ' \ -audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-sound-device","id":"sound0","audiodev":"audio1"= ,"streams":2}' \ -device '{"driver":"virtio-balloon-device","id":"balloon0"}' \ -object '{"qom-type":"rng-random","id":"objrng0","filename":"/dev/random"}= ' \ -device '{"driver":"virtio-rng-device","rng":"objrng0","id":"rng0"}' \ diff --git a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.xml= b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.xml index 097525c6c8..fd8cf9aa76 100644 --- a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.xml +++ b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.xml @@ -44,6 +44,9 @@ + +
+