From nobody Sun May 19 07:11:45 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 1712866582060208.99993133631222; Thu, 11 Apr 2024 13:16:22 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id ED38D1805; Thu, 11 Apr 2024 16:16:20 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 5A5171767; Thu, 11 Apr 2024 16:14:55 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 79EF017AE; Thu, 11 Apr 2024 16:14:49 -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 1774F17A2 for ; Thu, 11 Apr 2024 16:14:48 -0400 (EDT) Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-56e1f3462caso214161a12.3 for ; Thu, 11 Apr 2024 13:14:48 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id g22-20020a056402115600b0056c1380a972sm965896edw.74.2024.04.11.13.14.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 13:14:43 -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=1712866487; x=1713471287; 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=AJuFTWS0EljAks4duVQ0onQfs1H9G6Inknx8NXSbg0IeKkwXpM4CkSiM8KgRNEF7BH SzBheZedSvV5H8I7XLYIXacdfGy9+MrcBSlnXOPiyMe32nAfBklEmShcGFBDmEnYI116 x6poj0yHlNDYsr/T7xtANBxrhJIW+KetMhFveNXDPNLLG7OSkxumfHdLdmQW5wecpLS8 d/iO0EC25ts31ILu8pUXIVEnSNDGeCn4UrYkYer2GyF64gOfTTqs+A+fiQMXnxjYmm/A Qq4X1caxF32TxocSOEs1Th3aqY1YImzlzX3omFBmLJ8bJLPTa7P7Sxzy7pRiRNSJoQ+E ESNw== X-Gm-Message-State: AOJu0Yx9ogLbrVvbfpX0bYrUdT+kwscClheH54qBYmk1AM3M6okCM13i nSGNALPzHYhH9dGgZUA9dLX04yqzQ1AqTTLgXCjrnQjsAPuLG90a80PWRDvN X-Google-Smtp-Source: AGHT+IFpvDIs3eiJiByv+yni+LdZYM/z+nuz+vToNwlhCmd3YCOdkVEFycmQuNaUMNq7SYoublNEYg== X-Received: by 2002:a50:d656:0:b0:56c:5ab5:5fb7 with SMTP id c22-20020a50d656000000b0056c5ab55fb7mr528355edj.30.1712866486361; Thu, 11 Apr 2024 13:14:46 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH v2 1/3] qemu_capabilities: Add QEMU_CAPS_DEVICE_VIRTIO_SOUND capability Date: Fri, 12 Apr 2024 01:42:42 +0530 Message-Id: <20240411201244.112548-2-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411201244.112548-1-rayhan.faizel@gmail.com> References: <20240411201244.112548-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: 46IGIFFJPY6BHPZPCXRNVJS44ZF3FDKS X-Message-ID-Hash: 46IGIFFJPY6BHPZPCXRNVJS44ZF3FDKS 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: 1712866583618100001 Signed-off-by: Rayhan Faizel Reviewed-by: J=C3=A1n Tomko --- 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 Sun May 19 07:11:45 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 1712866651489296.33337697527986; Thu, 11 Apr 2024 13:17:31 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 518A318E8; Thu, 11 Apr 2024 16:17:30 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 731EF188F; Thu, 11 Apr 2024 16:15:11 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 7737F17B2; Thu, 11 Apr 2024 16:15:04 -0400 (EDT) Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 7275417B2 for ; Thu, 11 Apr 2024 16:14:49 -0400 (EDT) Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-56e509baddaso172241a12.1 for ; Thu, 11 Apr 2024 13:14:49 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id g22-20020a056402115600b0056c1380a972sm965896edw.74.2024.04.11.13.14.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 13:14:46 -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=1712866488; x=1713471288; 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=QbrDNo/pPf/VaDQgzZpqJWMBYVVMA0fid57kqknsEtI6PRTsj8ZqAaRCWkFeeF+CZ4 fB4S06X9FTh0vGNLtMoijOWTMNDvSyuCALRJv5gUMTMzo3zSBVrcO0QDf0dar5swpz4g cenG/PPZmOhkFnR2DYYFHNpPDDWSKwGALDZ0Slib2kjZmRmarfAXn4rOhmM41NxJGhSg 6b+DKVageYYLMCauSdBmwhY4i4MawMmR/pIfUhPf77TFh12v6a/EjitQUT+fBOyPCvB1 xXuEJMwdxf8BhmfcwcWWeYn2OAAvqLJG8R13/w18gcY8ib1l5do0WkEU8iN8UKkrs10D jDOw== X-Gm-Message-State: AOJu0Yz0sQ3z4sjIHYWRsdqNF10IEsj0b1SwVv+Ef3EQ+K0H5/zH3efY Ho9loUOqpvC4VitrgFaz3afIAI2f/KV7Qe82DNkREh7Wb7GJvH2ndQMIDaC+ X-Google-Smtp-Source: AGHT+IH6c622MTEraZIiicjvQwIFao20VuZNYIJlGVDOPUbn2IT4OYxJtv4XAOyJJDfIpdl9rn9Bjw== X-Received: by 2002:a50:f698:0:b0:56e:2654:93c9 with SMTP id d24-20020a50f698000000b0056e265493c9mr499904edn.29.1712866487727; Thu, 11 Apr 2024 13:14:47 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH v2 2/3] conf: Introduce support for virtio-sound devices Date: Fri, 12 Apr 2024 01:42:43 +0530 Message-Id: <20240411201244.112548-3-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411201244.112548-1-rayhan.faizel@gmail.com> References: <20240411201244.112548-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: F7CUJXXX6OI6VWJUKOM7BK5WHPOOWHAR X-Message-ID-Hash: F7CUJXXX6OI6VWJUKOM7BK5WHPOOWHAR 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: 1712866651868100001 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 Reviewed-by: J=C3=A1n Tomko --- 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 Sun May 19 07:11:45 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 1712866720483947.9876533346567; Thu, 11 Apr 2024 13:18:40 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 6A54917E1; Thu, 11 Apr 2024 16:18:39 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7057917C0; Thu, 11 Apr 2024 16:15:20 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 122DE18AE; Thu, 11 Apr 2024 16:15:13 -0400 (EDT) Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) (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 533D41871 for ; Thu, 11 Apr 2024 16:14:51 -0400 (EDT) Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2d9fe2b37acso1775471fa.2 for ; Thu, 11 Apr 2024 13:14:51 -0700 (PDT) Received: from localhost.localdomain ([195.29.209.28]) by smtp.gmail.com with ESMTPSA id g22-20020a056402115600b0056c1380a972sm965896edw.74.2024.04.11.13.14.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 13:14:48 -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=1712866490; x=1713471290; 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=lamdTmRBxcs6Kk2F1RXW/nWarLKLQfRtyKBGOM8xVpA=; b=qAgBgtb3V6E926MPW/DHrqDd4XALjO7D+c5t5DeEyGAr9Xagd1I+ikjZCD1qBajKNC pvUKcmFPK1j7Cdeu/Qewk/trkyPuTl+m9maD3jPmt+QXKWtVCpx+gizlco/4ACouIYkY b7i5Nw+wnE/uVcefPmKR7xEcMQVHM/GRGBKzDyGIUvc/tN8o/scRNvwuWB7WrrPDmxLx RBy8xX3A+InFU1j/6gs1k92uupJUU3iiLB976CrSVS2zPexUpzcHW60WUibgCFRv4uab MZC4K2Q85vmDx2Znz0C9weFu+YoYaixa3Cw9S9Jh8X9+yU5MX48yaBhtTabucCefSW1D tQvQ== X-Gm-Message-State: AOJu0YybwLaVFrEXQgVvIRRM35MQ/bCQtt2XOFHA9C91VDsMjkNmN/Gu gvhkHZHRz6sl8iRwQyh/xL4OD2b5K77bGVYCrdoTj92mZE6bpAB09mEJ7U+a X-Google-Smtp-Source: AGHT+IFshoQO7OhfQ81xTPmWcQkiZKfALt1xjOOL+7Wh1ShN18uUBfyLPa5s5Jr0JzMFxeIuCp/INw== X-Received: by 2002:a2e:6a04:0:b0:2d6:85ec:fb49 with SMTP id f4-20020a2e6a04000000b002d685ecfb49mr411780ljc.28.1712866489335; Thu, 11 Apr 2024 13:14:49 -0700 (PDT) From: Rayhan Faizel To: devel@lists.libvirt.org Subject: [PATCH v2 3/3] qemu: Generate command line for sound devices with model 'virtio' Date: Fri, 12 Apr 2024 01:42:44 +0530 Message-Id: <20240411201244.112548-4-rayhan.faizel@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240411201244.112548-1-rayhan.faizel@gmail.com> References: <20240411201244.112548-1-rayhan.faizel@gmail.com> MIME-Version: 1.0 Message-ID-Hash: RXSBOJAHCPZ2G4XHQI2V7S6IUXBQA3NJ X-Message-ID-Hash: RXSBOJAHCPZ2G4XHQI2V7S6IUXBQA3NJ 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: 1712866722042100001 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 Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 24 +++++++++- .../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, 137 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..47db06f253 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -952,8 +952,13 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDe= f *device, break; } =20 + case VIR_DOMAIN_DEVICE_SOUND: { + *baseName =3D "virtio-sound"; + *virtioOptions =3D device->data.sound->virtio; + break; + } + 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 +4463,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 +4487,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 +4501,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 @@ + +
+