All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: "Emmanouil Pitsidianakis" <manos.pitsidianakis@linaro.org>,
	qemu-devel@nongnu.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>,
	"Volker Rümelin" <vr_qemu@t-online.de>,
	"Kővágó, Zoltán" <DirtY.iCE.hu@gmail.com>,
	"Alex Bennee" <alex.bennee@linaro.org>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PATCH v4 06/12] virtio-sound: handle VIRTIO_SND_R_PCM_INFO request
Date: Tue, 25 Jul 2023 10:46:56 -0400	[thread overview]
Message-ID: <20230725104417-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CAJ+F1C+H+82cA=mhpju-2nxRSA3BWnWJmp4-pi+G=Lsri0oGTw@mail.gmail.com>

On Tue, Jul 25, 2023 at 06:29:58PM +0400, Marc-André Lureau wrote:
> 
> 
> On Thu, Jul 20, 2023 at 4:59 PM Emmanouil Pitsidianakis <
> manos.pitsidianakis@linaro.org> wrote:
> 
>     Respond to the VIRTIO_SND_R_PCM_INFO control request with the parameters
>     of each requested PCM stream.
> 
>     Signed-off-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org>
>     ---
>      hw/virtio/trace-events |  1 +
>      hw/virtio/virtio-snd.c | 78 ++++++++++++++++++++++++++++++++++++++++++
>      2 files changed, 79 insertions(+)
> 
>     diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
>     index 8a223e36e9..3e619f778b 100644
>     --- a/hw/virtio/trace-events
>     +++ b/hw/virtio/trace-events
>     @@ -164,6 +164,7 @@ 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"
>      virtio_snd_handle_ctrl(void *vdev, void *vq) "snd %p: handle ctrl event
>     for queue %p"
>     +virtio_snd_handle_pcm_info(uint32_t stream) "VIRTIO_SND_R_PCM_INFO called
>     for stream %"PRIu32
>      virtio_snd_handle_code(uint32_t val, const char *code) "ctrl code msg val
>     = %"PRIu32" == %s"
>      virtio_snd_handle_chmap_info(void) "VIRTIO_SND_CHMAP_INFO called"
>      virtio_snd_handle_event(void) "event queue callback called"
>     diff --git a/hw/virtio/virtio-snd.c b/hw/virtio/virtio-snd.c
>     index ca09c937c7..3f8b46f372 100644
>     --- a/hw/virtio/virtio-snd.c
>     +++ b/hw/virtio/virtio-snd.c
>     @@ -134,6 +134,19 @@ virtio_snd_set_config(VirtIODevice *vdev, const
>     uint8_t *config)
>          memcpy(&s->snd_conf, sndconfig, sizeof(s->snd_conf));
>      }
> 
>     +/*
>     + * Get a specific stream from the virtio sound card device.
>     + * Returns NULL if @stream_id is invalid or not allocated.
>     + *
>     + * @s: VirtIOSound device
>     + * @stream_id: stream id
>     + */
>     +static VirtIOSoundPCMStream *virtio_snd_pcm_get_stream(VirtIOSound *s,
>     +                                                       uint32_t stream_id)
>     +{
>     +    return stream_id >= s->snd_conf.streams ? NULL : s->pcm->streams
>     [stream_id];
>     +}
>     +
>      /*
>       * Get params for a specific stream.
>       *
>     @@ -147,6 +160,69 @@ static VirtIOSoundPCMParams *virtio_snd_pcm_get_params
>     (VirtIOSound *s,
>              : s->pcm->pcm_params[stream_id];
>      }
> 
>     +/*
>     + * Handle the VIRTIO_SND_R_PCM_INFO request.
>     + * The function writes the info structs to the request element.
>     + *
>     + * @s: VirtIOSound device
>     + * @cmd: The request command queue element from VirtIOSound cmdq field
>     + */
>     +static void virtio_snd_handle_pcm_info(VirtIOSound *s,
>     +                                       virtio_snd_ctrl_command *cmd)
>     +{
>     +    virtio_snd_query_info req;
>     +    VirtIOSoundPCMStream *stream = NULL;
>     +    g_autofree virtio_snd_pcm_info *pcm_info = NULL;
>     +    size_t sz = iov_to_buf(cmd->elem->out_sg,
>     +                           cmd->elem->out_num,
>     +                           0,
>     +                           &req,
>     +                           sizeof(req));
>     +    if (sz != sizeof(virtio_snd_query_info)) {
>     +        cmd->resp.code = VIRTIO_SND_S_BAD_MSG;
>     +        return;
>     +    }
>     +
>     +    if (iov_size(cmd->elem->in_sg, cmd->elem->in_num) <
>     +        sizeof(virtio_snd_hdr) + req.size * req.count) {
>     +        error_report("pcm info: buffer too small, got: %lu, needed: %lu",
>     +                iov_size(cmd->elem->in_sg, cmd->elem->in_num),
> 
>  
> 
>     +                sizeof(virtio_snd_pcm_info));
>     +        cmd->resp.code = VIRTIO_SND_S_BAD_MSG;
>     +        return;
>     +    }
>     +
>     +    pcm_info = g_new0(virtio_snd_pcm_info, req.count);
>     +    for (uint32_t i = req.start_id; i < req.start_id + req.count; i++) {
>     +        trace_virtio_snd_handle_pcm_info(i);
>     +        stream = virtio_snd_pcm_get_stream(s, i);
>     +
>     +        if (!stream) {
>     +            error_report("Invalid stream id: %"PRIu32, i);
>     +            cmd->resp.code = VIRTIO_SND_S_BAD_MSG;
>     +            return;
>     +        }
>     +
>     +        pcm_info[i - req.start_id].hdr.hda_fn_nid = stream->
>     info.hdr.hda_fn_nid;
>     +        pcm_info[i - req.start_id].features = stream->features;
>     +        pcm_info[i - req.start_id].formats = stream->formats;
>     +        pcm_info[i - req.start_id].rates = stream->rates;
>     +        pcm_info[i - req.start_id].direction = stream->direction;
>     +        pcm_info[i - req.start_id].channels_min = stream->channels_min;
>     +        pcm_info[i - req.start_id].channels_max = stream->channels_max;
>     +
>     +        memset(&pcm_info[i].padding, 0, sizeof(pcm_info[i].padding));
>     +    }
>     +
>     +    cmd->resp.code = VIRTIO_SND_S_OK;
>     +
>     +    iov_from_buf(cmd->elem->in_sg,
>     +                 cmd->elem->in_num,
>     +                 sizeof(virtio_snd_hdr),
>     +                 pcm_info,
>     +                 sizeof(virtio_snd_pcm_info) * req.count);
>     +}
>     +
>      /*
>       * Set the given stream params.
>       * Called by both virtio_snd_handle_pcm_set_params and during device
>     @@ -358,6 +434,8 @@ process_cmd(VirtIOSound *s, virtio_snd_ctrl_command
>     *cmd)
>              cmd->resp.code = VIRTIO_SND_S_NOT_SUPP;
>              break;
>          case VIRTIO_SND_R_PCM_INFO:
>     +        virtio_snd_handle_pcm_info(s, cmd);
>     +        break;
>          case VIRTIO_SND_R_PCM_SET_PARAMS:
>          case VIRTIO_SND_R_PCM_PREPARE:
>          case VIRTIO_SND_R_PCM_START:
>     --
>     2.39.2
> 
> 
> 


Marc-André can you please stop with trying to use gmail web client?
Look here to see how it corrupts text by wrapping lines:
https://lore.kernel.org/all/CAJ+F1C+H+82cA=mhpju-2nxRSA3BWnWJmp4-pi+G=Lsri0oGTw@mail.gmail.com/

And please cut out irrelevant parts of message - I've no idea what you tried to say here.

-- 
MST



  reply	other threads:[~2023-07-25 14:48 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-20 12:57 [PATCH v4 00/12] Add VIRTIO sound card Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 01/12] Add virtio-sound device stub Emmanouil Pitsidianakis
2023-07-25 14:22   ` Marc-André Lureau
2023-07-25 14:31   ` Marc-André Lureau
2023-07-25 14:50     ` Michael S. Tsirkin
2023-07-20 12:57 ` [PATCH v4 02/12] Add virtio-sound-pci device Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 03/12] virtio-sound: handle control messages and streams Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 04/12] virtio-sound: set PCM stream parameters Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 05/12] virtio-sound: prepare PCM streams Emmanouil Pitsidianakis
2023-07-25 13:38   ` Marc-André Lureau
2023-07-20 12:57 ` [PATCH v4 06/12] virtio-sound: handle VIRTIO_SND_R_PCM_INFO request Emmanouil Pitsidianakis
2023-07-25 14:29   ` Marc-André Lureau
2023-07-25 14:46     ` Michael S. Tsirkin [this message]
2023-07-25 14:54       ` Marc-André Lureau
2023-07-25 16:15         ` Michael S. Tsirkin
2023-07-25 14:30   ` Marc-André Lureau
2023-07-20 12:57 ` [PATCH v4 07/12] virtio-sound: handle VIRTIO_SND_R_PCM_{START,STOP} Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 08/12] virtio-sound: handle VIRTIO_SND_PCM_SET_PARAMS Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 09/12] virtio-sound: handle VIRTIO_SND_R_PCM_PREPARE Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 10/12] virtio-sound: handle VIRTIO_SND_PCM_RELEASE Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 11/12] virtio-sound: implement audio output (TX) Emmanouil Pitsidianakis
2023-07-20 12:57 ` [PATCH v4 12/12] virtio-sound: implement audio capture (RX) Emmanouil Pitsidianakis

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=20230725104417-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=Anton.Yakovlev@opensynergy.com \
    --cc=DirtY.iCE.hu@gmail.com \
    --cc=Igor.Skalkin@opensynergy.com \
    --cc=alex.bennee@linaro.org \
    --cc=berrange@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=kraxel@redhat.com \
    --cc=manos.pitsidianakis@linaro.org \
    --cc=marcandre.lureau@gmail.com \
    --cc=marcel.apfelbaum@gmail.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.