[alsa-devel] [PATCH - seq 1/1] ALSA seq: expose the card number of ALSA seq clients
Takashi Iwai
tiwai at suse.de
Mon Jun 8 13:23:52 CEST 2015
At Thu, 4 Jun 2015 21:04:50 -0400,
Adam Goode wrote:
>
> Expose the card number of seq clients. This allows interested userspace
> programs to discover the hardware device that backs a particular seq
> client. Before this change, the only way to get information about the
> hardware for a client was by using brittle heuristics.
>
> Signed-off-by: Adam Goode <agoode at google.com>
The patch looks almost good. (One coding style fix about one-line if
would be better, though.)
However, if we want to have more changes, I'd prefer the protocol
version bump after all changes are merged.
Are you going to submit any further changes?
thanks,
Takashi
>
> diff --git a/include/uapi/sound/asequencer.h b/include/uapi/sound/asequencer.h
> index 5a5fa49..c2a659be 100644
> --- a/include/uapi/sound/asequencer.h
> +++ b/include/uapi/sound/asequencer.h
> @@ -25,7 +25,7 @@
> #include <sound/asound.h>
>
> /** version of the sequencer */
> -#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
> +#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 2)
>
> /**
> * definition of sequencer event types
> @@ -357,7 +357,8 @@ struct snd_seq_client_info {
> unsigned char event_filter[32]; /* event filter bitmap */
> int num_ports; /* RO: number of ports */
> int event_lost; /* number of lost events */
> - char reserved[64]; /* for future use */
> + int card_number; /* RO: card number, or -1 if no card. Added in protocol version 1.0.2 */
> + char reserved[60]; /* for future use */
> };
>
>
> diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
> index edbdab8..fcae784 100644
> --- a/sound/core/seq/seq_clientmgr.c
> +++ b/sound/core/seq/seq_clientmgr.c
> @@ -216,7 +216,7 @@ int __init client_init_data(void)
> }
>
>
> -static struct snd_seq_client *seq_create_client1(int client_index, int poolsize)
> +static struct snd_seq_client *seq_create_client1(int client_index, int poolsize, int card_number)
> {
> unsigned long flags;
> int c;
> @@ -232,6 +232,7 @@ static struct snd_seq_client *seq_create_client1(int client_index, int poolsize)
> return NULL;
> }
> client->type = NO_CLIENT;
> + client->card_number = card_number;
> snd_use_lock_init(&client->use_lock);
> rwlock_init(&client->ports_lock);
> mutex_init(&client->ports_mutex);
> @@ -327,7 +328,7 @@ static int snd_seq_open(struct inode *inode, struct file *file)
>
> if (mutex_lock_interruptible(®ister_mutex))
> return -ERESTARTSYS;
> - client = seq_create_client1(-1, SNDRV_SEQ_DEFAULT_EVENTS);
> + client = seq_create_client1(-1, SNDRV_SEQ_DEFAULT_EVENTS, -1);
> if (client == NULL) {
> mutex_unlock(®ister_mutex);
> return -ENOMEM; /* failure code */
> @@ -1194,6 +1195,7 @@ static void get_client_info(struct snd_seq_client *cptr,
> info->event_lost = cptr->event_lost;
> memcpy(info->event_filter, cptr->event_filter, 32);
> info->num_ports = cptr->num_ports;
> + info->card_number = cptr->card_number;
> memset(info->reserved, 0, sizeof(info->reserved));
> }
>
> @@ -2239,6 +2241,7 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
> {
> struct snd_seq_client *client;
> va_list args;
> + int card_number = -1;
>
> if (snd_BUG_ON(in_interrupt()))
> return -EBUSY;
> @@ -2252,6 +2255,7 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
> return -ERESTARTSYS;
>
> if (card) {
> + card_number = card->number;
> client_index += SNDRV_SEQ_GLOBAL_CLIENTS
> + card->number * SNDRV_SEQ_CLIENTS_PER_CARD;
> if (client_index >= SNDRV_SEQ_DYNAMIC_CLIENTS_BEGIN)
> @@ -2259,7 +2263,7 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
> }
>
> /* empty write queue as default */
> - client = seq_create_client1(client_index, 0);
> + client = seq_create_client1(client_index, 0, card_number);
> if (client == NULL) {
> mutex_unlock(®ister_mutex);
> return -EBUSY; /* failure code */
> @@ -2533,9 +2537,13 @@ void snd_seq_info_clients_read(struct snd_info_entry *entry,
> continue;
> }
>
> - snd_iprintf(buffer, "Client %3d : \"%s\" [%s]\n",
> + snd_iprintf(buffer, "Client %3d : \"%s\" [%s]",
> c, client->name,
> client->type == USER_CLIENT ? "User" : "Kernel");
> + if (client->card_number != -1) {
> + snd_iprintf(buffer, ", card %d", client->card_number);
> + }
> + snd_iprintf(buffer, "\n");
> snd_seq_info_dump_ports(buffer, client);
> if (snd_seq_write_pool_allocated(client)) {
> snd_iprintf(buffer, " Output pool :\n");
> diff --git a/sound/core/seq/seq_clientmgr.h b/sound/core/seq/seq_clientmgr.h
> index 20f0a72..627be9d 100644
> --- a/sound/core/seq/seq_clientmgr.h
> +++ b/sound/core/seq/seq_clientmgr.h
> @@ -50,6 +50,7 @@ struct snd_seq_client {
> accept_output: 1;
> char name[64]; /* client name */
> int number; /* client number */
> + int card_number; /* card number, or -1 if no card */
> unsigned int filter; /* filter flags */
> DECLARE_BITMAP(event_filter, 256);
> snd_use_lock_t use_lock;
> --
> 2.2.0.rc0.207.ga3a616c
>
More information about the Alsa-devel
mailing list