All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Jaroslav Kysela <perex@perex.cz>
Cc: Maciej Strozek <mstrozek@opensource.cirrus.com>,
	Takashi Iwai <tiwai@suse.com>,
	linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org,
	patches@opensource.cirrus.com, alsa-devel@alsa-project.org
Subject: Re: [PATCH v3 2/2] ALSA: control: add ioctl to retrieve full card components
Date: Fri, 06 Mar 2026 11:43:49 +0100	[thread overview]
Message-ID: <87zf4lutju.wl-tiwai@suse.de> (raw)
In-Reply-To: <3174b8c9-8801-4d09-8e30-450899b40ca2@perex.cz>

On Fri, 06 Mar 2026 10:39:46 +0100,
Jaroslav Kysela wrote:
> 
> On 3/5/26 11:18, Takashi Iwai wrote:
> > On Thu, 05 Mar 2026 11:11:40 +0100,
> > Maciej Strozek wrote:
> >> 
> >> W dniu czw, 05.03.2026 o godzinie 11∶04 +0100, użytkownik Takashi Iwai
> >> napisał:
> >>> On Thu, 05 Mar 2026 10:54:35 +0100,
> >>> Maciej Strozek wrote:
> >>>> 
> >>>> W dniu wto, 03.03.2026 o godzinie 16∶47 +0100, użytkownik Takashi
> >>>> Iwai
> >>>> napisał:
> >>>>>> 
> >>>>>> + */
> >>>>>> +struct snd_ctl_card_components {
> >>>>>> + int card;
> >>>>>> + unsigned int length;
> >>>>>> + unsigned char *components;
> >>>>>> +};
> >>>>> 
> >>>>> And the ioctl can serve for two purposes:
> >>>>> 
> >>>>> - When length=0 is set, the kernel stores the current number of
> >>>>> bytes
> >>>>>    and returns without copying.  User-space can use this mode for
> >>>>>    allocating the buffer.
> >>>>> 
> >>>> In alsa-lib all data must be allocated beforehand, so this
> >>>> length==0
> >>>> query is not very useful there, it will just go into a [512] array
> >>>> anyway. Are there any other users that may benefit from this?
> >>> 
> >>> My suggested API can work even with the fixed size 512, too, if 512
> >>> is
> >>> hight enough.  It's just more flexible.  And there is no restriction
> >>> about alsa-lib data allocation; the function can query the size then
> >>> allocate, too.
> >>> 
> >>> 
> >>> Takashi
> >> 
> >> OK, will prepare v4 with this, thanks
> > 
> > Well, let's see how others think, too.  The API design needs more
> > considerations because we can't change it any longer once after
> > defined.
> 
> I think that the indirect pointer in ioctl structure is the best at
> the moment unless we decide to use the fixed char array.

OK, it might be indeed better if the user-space API is something like:

int snd_ctl_card_components(snd_ctl_t *ctl, unsigned char *buf, size_t len);

Then it's simpler to pass the pointer as is without copying.

> But (for
> discussion) we may try to be a bit clever and define universal bytes
> ioctl which may carry also other things in future like:
> 
> enum {
> 	SND_CTL_CARD_BTYPE_COMPONENTS = 1
> };

So this is for future extensions?

> struct snd_ctl_card_bytes {
> 	unsigned int card;		// this is duplication with info ioctl
> 					// to be removed?

Right, it sounds like superfluous.  I thought we were to allow
extracting a card info for a different card number, but it doesn't
look so.

> 	unsigned int type;		// e.g. SND_CTL_CARD_BTYPE_COMPONENTS
> 	unsigned int data_allocated;	// overall size of data
> 	unsigned int data_len;		// actual data len
> 	unsigned char *data;		// pointer to data array
> };
> 
> Scenarios:
> 
> data_allocated = 0 or data == NULL -> driver just returns data_len
> data_allocated < data_len -> driver returns -ENOMEM
> data_allocated >= data_len -> driver will copy data
> 
> Note that data_len will be zero from the user space for read
> operations (driver knows it). But we can eventually use this ioctl to
> set some data in future, so data_len/data will be used for the write
> operation.

In all cases, data_len is filled with the expected data size in
return, right?


thanks,

Takashi

  reply	other threads:[~2026-03-06 10:44 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-03 14:57 [PATCH v3 1/2] ALSA: control: tidy up whitespaces Maciej Strozek
2026-03-03 14:58 ` [PATCH v3 2/2] ALSA: control: add ioctl to retrieve full card components Maciej Strozek
2026-03-03 15:47   ` Takashi Iwai
2026-03-03 19:23     ` Jaroslav Kysela
2026-03-04 10:28       ` Takashi Iwai
2026-03-05  9:54     ` Maciej Strozek
2026-03-05 10:04       ` Takashi Iwai
2026-03-05 10:11         ` Maciej Strozek
2026-03-05 10:18           ` Takashi Iwai
2026-03-06  9:39             ` Jaroslav Kysela
2026-03-06 10:43               ` Takashi Iwai [this message]
2026-03-09  9:44                 ` Jaroslav Kysela
2026-03-09 10:02                   ` Takashi Iwai

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=87zf4lutju.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=mstrozek@opensource.cirrus.com \
    --cc=patches@opensource.cirrus.com \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.com \
    /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.