From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: "Emmanouil Pitsidianakis" <manos.pitsidianakis@linaro.org>,
"Igor Skalkin" <Igor.Skalkin@opensynergy.com>,
"Anton Yakovlev" <Anton.Yakovlev@opensynergy.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Volker Rümelin" <vr_qemu@t-online.de>,
"Kővágó, Zoltán" <DirtY.iCE.hu@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
qemu-devel@nongnu.org
Subject: Re: [PATCH v10 01/11] Add virtio-sound device stub
Date: Tue, 03 Oct 2023 16:26:45 +0100 [thread overview]
Message-ID: <87pm1vhgk3.fsf@linaro.org> (raw)
In-Reply-To: <20231003104217-mutt-send-email-mst@kernel.org>
"Michael S. Tsirkin" <mst@redhat.com> writes:
> On Tue, Oct 03, 2023 at 03:34:44PM +0100, Alex Bennée wrote:
>>
>> "Michael S. Tsirkin" <mst@redhat.com> writes:
>>
>> > On Fri, Sep 29, 2023 at 05:08:21PM +0300, Emmanouil Pitsidianakis wrote:
>> >> Add a new VIRTIO device for the virtio sound device id. Functionality
>> >> will be added in the following commits.
>> >>
>> >> Based-on: https://github.com/OpenSynergy/qemu/commit/5a2f350eec5d157b90d9c7b40a8e603f4da92471
>> >> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
>> >> Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com>
>> >> Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com>
>> >> Signed-off-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org>
>> >> ---
>> >> MAINTAINERS | 6 +
>> >> hw/virtio/Kconfig | 5 +
>> >> hw/virtio/meson.build | 1 +
>> >> hw/virtio/trace-events | 9 ++
>> >> hw/virtio/virtio-snd.c | 223 +++++++++++++++++++++++++++++++++
>> >
>> >
>> > Why isn't this under hw/virtio and not under hw/audio?
>>
>> Most of our virtio devices are under hw/virtio although we have a random
>> selection of other virtio devices elsewhere in the tree.
>
>
> That's because there wasn't anywhere to put them.
> Not the case for audio.
> Although, I just missed the cases of gpio and i2c -
> I think we should move them.
>
> virtio maintainers can't be a experts on all areas.
> We need to locate virtio devices appropriately so they
> get attention from appropriate maintainers.
Arguably for the vhost-user devices most of the code is VirtIO specific
because the internals are handled outside of QEMU. Of course this case
is different although there is a vhost-user-sound coming as well in my
next series.
>
>
>> >
>> >
>> >> include/hw/virtio/virtio-snd.h | 79 ++++++++++++
>> >> 6 files changed, 323 insertions(+)
>> >> create mode 100644 hw/virtio/virtio-snd.c
>> >> create mode 100644 include/hw/virtio/virtio-snd.h
>> >>
>> >> diff --git a/MAINTAINERS b/MAINTAINERS
>> >> index 355b1960ce..81ca61e90b 100644
>> >> --- a/MAINTAINERS
>> >> +++ b/MAINTAINERS
>> >> @@ -2241,6 +2241,12 @@ F: hw/virtio/virtio-mem-pci.h
>> >> F: hw/virtio/virtio-mem-pci.c
>> >> F: include/hw/virtio/virtio-mem.h
>> >>
>> >> +virtio-snd
>> >> +M: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>> >> +S: Supported
>> >> +F: hw/virtio/virtio-snd*.c
>> >> +F: include/hw/virtio/virtio-snd.h
>> >> +
>> >> nvme
>> >> M: Keith Busch <kbusch@kernel.org>
>> >> M: Klaus Jensen <its@irrelevant.dk>
>> >> diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
>> >> index 92c9cf6c96..d6f20657b3 100644
>> >> --- a/hw/virtio/Kconfig
>> >> +++ b/hw/virtio/Kconfig
>> >> @@ -17,6 +17,11 @@ config VIRTIO_PCI
>> >> depends on PCI
>> >> select VIRTIO
>> >>
>> >> +config VIRTIO_SND
>> >> + bool
>> >> + default y
>> >> + depends on VIRTIO
>> >> +
>> >> config VIRTIO_MMIO
>> >> bool
>> >> select VIRTIO
>> >> diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
>> >> index 13e7c6c272..120d4bfa0a 100644
>> >> --- a/hw/virtio/meson.build
>> >> +++ b/hw/virtio/meson.build
>> >> @@ -31,6 +31,7 @@ specific_virtio_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock.c
>> >> specific_virtio_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock.c'))
>> >> specific_virtio_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng.c'))
>> >> specific_virtio_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem.c'))
>> >> +specific_virtio_ss.add(when: 'CONFIG_VIRTIO_SND', if_true: files('virtio-snd.c'))
>> >> specific_virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
>> >> specific_virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
>> >> specific_virtio_ss.add(when: 'CONFIG_VHOST_USER_GPIO', if_true: files('vhost-user-gpio.c'))
>> >> diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
>> >> index 7109cf1a3b..3ed7da35f2 100644
>> >> --- a/hw/virtio/trace-events
>> >> +++ b/hw/virtio/trace-events
>> >> @@ -154,3 +154,12 @@ virtio_pmem_flush_done(int type) "fsync return=%d"
>> >> virtio_gpio_start(void) "start"
>> >> virtio_gpio_stop(void) "stop"
>> >> virtio_gpio_set_status(uint8_t status) "0x%x"
>> >> +
>> >> +#virtio-snd.c
>> >> +virtio_snd_get_config(void *vdev, uint32_t jacks, uint32_t streams, uint32_t chmaps) "snd %p: get_config jacks=%"PRIu32" streams=%"PRIu32" chmaps=%"PRIu32""
>> >> +virtio_snd_set_config(void *vdev, uint32_t jacks, uint32_t new_jacks, uint32_t streams, uint32_t new_streams, uint32_t chmaps, uint32_t new_chmaps) "snd %p: set_config jacks from %"PRIu32"->%"PRIu32", streams from %"PRIu32"->%"PRIu32", chmaps from %"PRIu32"->%"PRIu32
>> >> +virtio_snd_get_features(void *vdev, uint64_t features) "snd %p: get_features 0x%"PRIx64
>> >> +virtio_snd_vm_state_running(void) "vm state running"
>> >> +virtio_snd_vm_state_stopped(void) "vm state stopped"
>> >> +virtio_snd_realize(void *snd) "snd %p: realize"
>> >> +virtio_snd_unrealize(void *snd) "snd %p: unrealize"
>> >> diff --git a/hw/virtio/virtio-snd.c b/hw/virtio/virtio-snd.c
>> >> new file mode 100644
>> >> index 0000000000..a8204e8a02
>> >> --- /dev/null
>> >> +++ b/hw/virtio/virtio-snd.c
>> >> @@ -0,0 +1,223 @@
>> >> +/*
>> >> + * VIRTIO Sound Device conforming to
>> >> + *
>> >> + * "Virtual I/O Device (VIRTIO) Version 1.2
>> >> + * Committee Specification Draft 01
>> >> + * 09 May 2022"
>> >> + *
>> >> + * <https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-52900014>
>> >> + *
>> >> + * Copyright (c) 2023 Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org>
>> >> + * Copyright (C) 2019 OpenSynergy GmbH
>> >> + *
>> >> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> >> + * (at your option) any later version. See the COPYING file in the
>> >> + * top-level directory.
>> >> + */
>> >> +
>> >> +#include "qemu/osdep.h"
>> >> +#include "qemu/iov.h"
>> >> +#include "qemu/log.h"
>> >> +#include "qemu/error-report.h"
>> >> +#include "include/qemu/lockable.h"
>> >> +#include "sysemu/runstate.h"
>> >> +#include "trace.h"
>> >> +#include "qapi/error.h"
>> >> +#include "hw/virtio/virtio-snd.h"
>> >> +#include "hw/core/cpu.h"
>> >> +
>> >> +#define VIRTIO_SOUND_VM_VERSION 1
>> >> +#define VIRTIO_SOUND_JACK_DEFAULT 0
>> >> +#define VIRTIO_SOUND_STREAM_DEFAULT 1
>> >> +#define VIRTIO_SOUND_CHMAP_DEFAULT 0
>> >> +#define VIRTIO_SOUND_HDA_FN_NID 0
>> >> +
>> >> +static const VMStateDescription vmstate_virtio_snd_device = {
>> >> + .name = TYPE_VIRTIO_SND,
>> >> + .version_id = VIRTIO_SOUND_VM_VERSION,
>> >> + .minimum_version_id = VIRTIO_SOUND_VM_VERSION,
>> >> +};
>> >> +
>> >> +static const VMStateDescription vmstate_virtio_snd = {
>> >> + .name = "virtio-sound",
>> >> + .minimum_version_id = VIRTIO_SOUND_VM_VERSION,
>> >> + .version_id = VIRTIO_SOUND_VM_VERSION,
>> >> + .fields = (VMStateField[]) {
>> >> + VMSTATE_VIRTIO_DEVICE,
>> >> + VMSTATE_END_OF_LIST()
>> >> + },
>> >> +};
>> >> +
>> >> +static Property virtio_snd_properties[] = {
>> >> + DEFINE_AUDIO_PROPERTIES(VirtIOSound, card),
>> >> + DEFINE_PROP_UINT32("jacks", VirtIOSound, snd_conf.jacks,
>> >> + VIRTIO_SOUND_JACK_DEFAULT),
>> >> + DEFINE_PROP_UINT32("streams", VirtIOSound, snd_conf.streams,
>> >> + VIRTIO_SOUND_STREAM_DEFAULT),
>> >> + DEFINE_PROP_UINT32("chmaps", VirtIOSound, snd_conf.chmaps,
>> >> + VIRTIO_SOUND_CHMAP_DEFAULT),
>> >> + DEFINE_PROP_END_OF_LIST(),
>> >> +};
>> >> +
>> >> +static void
>> >> +virtio_snd_get_config(VirtIODevice *vdev, uint8_t *config)
>> >> +{
>> >> + VirtIOSound *s = VIRTIO_SND(vdev);
>> >> + trace_virtio_snd_get_config(vdev,
>> >> + s->snd_conf.jacks,
>> >> + s->snd_conf.streams,
>> >> + s->snd_conf.chmaps);
>> >> +
>> >> + memcpy(config, &s->snd_conf, sizeof(s->snd_conf));
>> >> +}
>> >> +
>> >> +static void
>> >> +virtio_snd_set_config(VirtIODevice *vdev, const uint8_t *config)
>> >> +{
>> >> + VirtIOSound *s = VIRTIO_SND(vdev);
>> >> + const virtio_snd_config *sndconfig =
>> >> + (const virtio_snd_config *)config;
>> >> +
>> >> +
>> >> + trace_virtio_snd_set_config(vdev,
>> >> + s->snd_conf.jacks,
>> >> + sndconfig->jacks,
>> >> + s->snd_conf.streams,
>> >> + sndconfig->streams,
>> >> + s->snd_conf.chmaps,
>> >> + sndconfig->chmaps);
>> >> +
>> >> + memcpy(&s->snd_conf, sndconfig, sizeof(s->snd_conf));
>> >> +}
>> >> +
>> >> +/*
>> >> + * Queue handler stub.
>> >> + *
>> >> + * @vdev: VirtIOSound device
>> >> + * @vq: virtqueue
>> >> + */
>> >> +static void virtio_snd_handle_queue(VirtIODevice *vdev, VirtQueue *vq) {}
>> >> +
>> >> +static uint64_t get_features(VirtIODevice *vdev, uint64_t features,
>> >> + Error **errp)
>> >> +{
>> >> + /*
>> >> + * virtio-v1.2-csd01, 5.14.3,
>> >> + * Feature Bits
>> >> + * None currently defined.
>> >> + */
>> >> + VirtIOSound *s = VIRTIO_SND(vdev);
>> >> + features |= s->features;
>> >> +
>> >> + trace_virtio_snd_get_features(vdev, features);
>> >> +
>> >> + return features;
>> >> +}
>> >> +
>> >> +static void
>> >> +virtio_snd_vm_state_change(void *opaque, bool running,
>> >> + RunState state)
>> >> +{
>> >> + if (running) {
>> >> + trace_virtio_snd_vm_state_running();
>> >> + } else {
>> >> + trace_virtio_snd_vm_state_stopped();
>> >> + }
>> >> +}
>> >> +
>> >> +static void virtio_snd_realize(DeviceState *dev, Error **errp)
>> >> +{
>> >> + ERRP_GUARD();
>> >> + VirtIOSound *vsnd = VIRTIO_SND(dev);
>> >> + VirtIODevice *vdev = VIRTIO_DEVICE(dev);
>> >> +
>> >> + vsnd->vmstate =
>> >> + qemu_add_vm_change_state_handler(virtio_snd_vm_state_change, vsnd);
>> >> +
>> >> + trace_virtio_snd_realize(vsnd);
>> >> +
>> >> + virtio_init(vdev, VIRTIO_ID_SOUND, sizeof(virtio_snd_config));
>> >> + virtio_add_feature(&vsnd->features, VIRTIO_F_VERSION_1);
>> >> +
>> >> + /* set number of jacks and streams */
>> >> + if (vsnd->snd_conf.jacks > 8) {
>> >> + error_setg(errp,
>> >> + "Invalid number of jacks: %"PRIu32,
>> >> + vsnd->snd_conf.jacks);
>> >> + return;
>> >> + }
>> >> + if (vsnd->snd_conf.streams < 1 || vsnd->snd_conf.streams > 10) {
>> >> + error_setg(errp,
>> >> + "Invalid number of streams: %"PRIu32,
>> >> + vsnd->snd_conf.streams);
>> >> + return;
>> >> + }
>> >> +
>> >> + if (vsnd->snd_conf.chmaps > VIRTIO_SND_CHMAP_MAX_SIZE) {
>> >> + error_setg(errp,
>> >> + "Invalid number of channel maps: %"PRIu32,
>> >> + vsnd->snd_conf.chmaps);
>> >> + return;
>> >> + }
>> >> +
>> >> + AUD_register_card("virtio-sound", &vsnd->card);
>> >> +
>> >> + vsnd->queues[VIRTIO_SND_VQ_CONTROL] =
>> >> + virtio_add_queue(vdev, 64, virtio_snd_handle_queue);
>> >> + vsnd->queues[VIRTIO_SND_VQ_EVENT] =
>> >> + virtio_add_queue(vdev, 64, virtio_snd_handle_queue);
>> >> + vsnd->queues[VIRTIO_SND_VQ_TX] =
>> >> + virtio_add_queue(vdev, 64, virtio_snd_handle_queue);
>> >> + vsnd->queues[VIRTIO_SND_VQ_RX] =
>> >> + virtio_add_queue(vdev, 64, virtio_snd_handle_queue);
>> >> +}
>> >> +
>> >> +static void virtio_snd_unrealize(DeviceState *dev)
>> >> +{
>> >> + VirtIODevice *vdev = VIRTIO_DEVICE(dev);
>> >> + VirtIOSound *vsnd = VIRTIO_SND(dev);
>> >> +
>> >> + qemu_del_vm_change_state_handler(vsnd->vmstate);
>> >> + trace_virtio_snd_unrealize(vsnd);
>> >> +
>> >> + AUD_remove_card(&vsnd->card);
>> >> + virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_CONTROL]);
>> >> + virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_EVENT]);
>> >> + virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_TX]);
>> >> + virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_RX]);
>> >> + virtio_cleanup(vdev);
>> >> +}
>> >> +
>> >> +
>> >> +static void virtio_snd_reset(VirtIODevice *vdev) {}
>> >> +
>> >> +static void virtio_snd_class_init(ObjectClass *klass, void *data)
>> >> +{
>> >> + DeviceClass *dc = DEVICE_CLASS(klass);
>> >> + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
>> >> +
>> >> +
>> >> + set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
>> >> + device_class_set_props(dc, virtio_snd_properties);
>> >> +
>> >> + dc->vmsd = &vmstate_virtio_snd;
>> >> + vdc->vmsd = &vmstate_virtio_snd_device;
>> >> + vdc->realize = virtio_snd_realize;
>> >> + vdc->unrealize = virtio_snd_unrealize;
>> >> + vdc->get_config = virtio_snd_get_config;
>> >> + vdc->set_config = virtio_snd_set_config;
>> >> + vdc->get_features = get_features;
>> >> + vdc->reset = virtio_snd_reset;
>> >> + vdc->legacy_features = 0;
>> >> +}
>> >> +
>> >> +static const TypeInfo virtio_snd_types[] = {
>> >> + {
>> >> + .name = TYPE_VIRTIO_SND,
>> >> + .parent = TYPE_VIRTIO_DEVICE,
>> >> + .instance_size = sizeof(VirtIOSound),
>> >> + .class_init = virtio_snd_class_init,
>> >> + }
>> >> +};
>> >> +
>> >> +DEFINE_TYPES(virtio_snd_types)
>> >> diff --git a/include/hw/virtio/virtio-snd.h b/include/hw/virtio/virtio-snd.h
>> >> new file mode 100644
>> >> index 0000000000..934e854a80
>> >> --- /dev/null
>> >> +++ b/include/hw/virtio/virtio-snd.h
>> >> @@ -0,0 +1,79 @@
>> >> +/*
>> >> + * VIRTIO Sound Device conforming to
>> >> + *
>> >> + * "Virtual I/O Device (VIRTIO) Version 1.2
>> >> + * Committee Specification Draft 01
>> >> + * 09 May 2022"
>> >> + *
>> >> + * Copyright (c) 2023 Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org>
>> >> + * Copyright (C) 2019 OpenSynergy GmbH
>> >> + *
>> >> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> >> + * (at your option) any later version. See the COPYING file in the
>> >> + * top-level directory.
>> >> + */
>> >> +
>> >> +#ifndef QEMU_VIRTIO_SOUND_H
>> >> +#define QEMU_VIRTIO_SOUND_H
>> >> +
>> >> +#include "hw/virtio/virtio.h"
>> >> +#include "audio/audio.h"
>> >> +#include "standard-headers/linux/virtio_ids.h"
>> >> +#include "standard-headers/linux/virtio_snd.h"
>> >> +
>> >> +#define TYPE_VIRTIO_SND "virtio-sound"
>> >> +#define VIRTIO_SND(obj) \
>> >> + OBJECT_CHECK(VirtIOSound, (obj), TYPE_VIRTIO_SND)
>> >> +
>> >> +/* CONFIGURATION SPACE */
>> >> +
>> >> +typedef struct virtio_snd_config virtio_snd_config;
>> >> +
>> >> +/* COMMON DEFINITIONS */
>> >> +
>> >> +/* common header for request/response*/
>> >> +typedef struct virtio_snd_hdr virtio_snd_hdr;
>> >> +
>> >> +/* event notification */
>> >> +typedef struct virtio_snd_event virtio_snd_event;
>> >> +
>> >> +/* common control request to query an item information */
>> >> +typedef struct virtio_snd_query_info virtio_snd_query_info;
>> >> +
>> >> +/* JACK CONTROL MESSAGES */
>> >> +
>> >> +typedef struct virtio_snd_jack_hdr virtio_snd_jack_hdr;
>> >> +
>> >> +/* jack information structure */
>> >> +typedef struct virtio_snd_jack_info virtio_snd_jack_info;
>> >> +
>> >> +/* jack remapping control request */
>> >> +typedef struct virtio_snd_jack_remap virtio_snd_jack_remap;
>> >> +
>> >> +/*
>> >> + * PCM CONTROL MESSAGES
>> >> + */
>> >> +typedef struct virtio_snd_pcm_hdr virtio_snd_pcm_hdr;
>> >> +
>> >> +/* PCM stream info structure */
>> >> +typedef struct virtio_snd_pcm_info virtio_snd_pcm_info;
>> >> +
>> >> +/* set PCM stream params */
>> >> +typedef struct virtio_snd_pcm_set_params virtio_snd_pcm_set_params;
>> >> +
>> >> +/* I/O request header */
>> >> +typedef struct virtio_snd_pcm_xfer virtio_snd_pcm_xfer;
>> >> +
>> >> +/* I/O request status */
>> >> +typedef struct virtio_snd_pcm_status virtio_snd_pcm_status;
>> >> +
>> >> +typedef struct VirtIOSound {
>> >> + VirtIODevice parent_obj;
>> >> +
>> >> + VirtQueue *queues[VIRTIO_SND_VQ_MAX];
>> >> + uint64_t features;
>> >> + QEMUSoundCard card;
>> >> + VMChangeStateEntry *vmstate;
>> >> + virtio_snd_config snd_conf;
>> >> +} VirtIOSound;
>> >> +#endif
>> >> --
>> >> 2.39.2
>>
>>
>> --
>> Alex Bennée
>> Virtualisation Tech Lead @ Linaro
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2023-10-03 15:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-29 14:08 [PATCH v10 00/11] Add VIRTIO sound card Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 01/11] Add virtio-sound device stub Emmanouil Pitsidianakis
2023-10-03 14:13 ` Michael S. Tsirkin
2023-10-03 14:34 ` Alex Bennée
2023-10-03 14:45 ` Michael S. Tsirkin
2023-10-03 15:26 ` Alex Bennée [this message]
2023-09-29 14:08 ` [PATCH v10 02/11] Add virtio-sound-pci device Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 03/11] virtio-sound: handle control messages and streams Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 04/11] virtio-sound: handle VIRTIO_SND_R_PCM_INFO request Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 05/11] virtio-sound: handle VIRTIO_SND_R_PCM_{START,STOP} Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 06/11] virtio-sound: handle VIRTIO_SND_R_PCM_SET_PARAMS Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 07/11] virtio-sound: handle VIRTIO_SND_R_PCM_PREPARE Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 08/11] virtio-sound: handle VIRTIO_SND_R_PCM_RELEASE Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 09/11] virtio-sound: implement audio output (TX) Emmanouil Pitsidianakis
2023-09-29 18:59 ` Manos Pitsidianakis
2023-10-03 14:27 ` Philippe Mathieu-Daudé
2023-09-29 14:08 ` [PATCH v10 10/11] virtio-sound: implement audio capture (RX) Emmanouil Pitsidianakis
2023-09-29 14:08 ` [PATCH v10 11/11] docs/system: add basic virtio-snd documentation Emmanouil Pitsidianakis
2023-10-03 14:10 ` [PATCH v10 00/11] Add VIRTIO sound card Michael S. Tsirkin
2023-10-03 16:09 ` Manos Pitsidianakis
2023-10-03 17:10 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pm1vhgk3.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=Anton.Yakovlev@opensynergy.com \
--cc=DirtY.iCE.hu@gmail.com \
--cc=Igor.Skalkin@opensynergy.com \
--cc=berrange@redhat.com \
--cc=eduardo@habkost.net \
--cc=kraxel@redhat.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=vr_qemu@t-online.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.