Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 16118
b: refs/heads/master
c: d001544
h: refs/heads/master
v: v3
  • Loading branch information
Clemens Ladisch authored and Jaroslav Kysela committed Jan 3, 2006
1 parent feaa3a9 commit fb17c7e
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 204bdb1b50013c7aa3922d8b66df943123087bd8
refs/heads/master: d001544ded23ddb1116f945ccc2d89a7f98ab7e8
7 changes: 6 additions & 1 deletion trunk/include/sound/driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@

#include <linux/config.h>

#define SNDRV_CARDS 8 /* number of supported soundcards - don't change - minor numbers */
/* number of supported soundcards */
#ifdef CONFIG_SND_DYNAMIC_MINORS
#define SNDRV_CARDS 32
#else
#define SNDRV_CARDS 8 /* don't change - minor numbers */
#endif

#ifndef CONFIG_SND_MAJOR /* standard configuration */
#define CONFIG_SND_MAJOR 116
Expand Down
18 changes: 11 additions & 7 deletions trunk/sound/core/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ int snd_card_free_in_thread(struct snd_card *card)

static void choose_default_id(struct snd_card *card)
{
int i, len, idx_flag = 0, loops = 8;
int i, len, idx_flag = 0, loops = SNDRV_CARDS;
char *id, *spos;

id = spos = card->shortname;
Expand Down Expand Up @@ -380,9 +380,12 @@ static void choose_default_id(struct snd_card *card)

__change:
len = strlen(id);
if (idx_flag)
id[len-1]++;
else if ((size_t)len <= sizeof(card->id) - 3) {
if (idx_flag) {
if (id[len-1] != '9')
id[len-1]++;
else
id[len-1] = 'A';
} else if ((size_t)len <= sizeof(card->id) - 3) {
strcat(id, "_1");
idx_flag++;
} else {
Expand Down Expand Up @@ -461,12 +464,12 @@ static void snd_card_info_read(struct snd_info_entry *entry,
read_lock(&snd_card_rwlock);
if ((card = snd_cards[idx]) != NULL) {
count++;
snd_iprintf(buffer, "%i [%-15s]: %s - %s\n",
snd_iprintf(buffer, "%2i [%-15s]: %s - %s\n",
idx,
card->id,
card->driver,
card->shortname);
snd_iprintf(buffer, " %s\n",
snd_iprintf(buffer, " %s\n",
card->longname);
}
read_unlock(&snd_card_rwlock);
Expand Down Expand Up @@ -508,7 +511,8 @@ static void snd_card_module_info_read(struct snd_info_entry *entry,
for (idx = 0; idx < SNDRV_CARDS; idx++) {
read_lock(&snd_card_rwlock);
if ((card = snd_cards[idx]) != NULL)
snd_iprintf(buffer, "%i %s\n", idx, card->module->name);
snd_iprintf(buffer, "%2i %s\n",
idx, card->module->name);
read_unlock(&snd_card_rwlock);
}
}
Expand Down
4 changes: 0 additions & 4 deletions trunk/sound/core/memalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,6 @@ MODULE_DESCRIPTION("Memory allocator for ALSA system.");
MODULE_LICENSE("GPL");


#ifndef SNDRV_CARDS
#define SNDRV_CARDS 8
#endif

/*
*/

Expand Down
31 changes: 25 additions & 6 deletions trunk/sound/core/seq/seq_clientmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
*
*/

/* range for dynamically allocated client numbers of kernel drivers */
#define SNDRV_SEQ_DYNAMIC_CLIENT_BEGIN 16
#define SNDRV_SEQ_DYNAMIC_CLIENT_END 48

#define SNDRV_SEQ_LFLG_INPUT 0x0001
#define SNDRV_SEQ_LFLG_OUTPUT 0x0002
#define SNDRV_SEQ_LFLG_OPEN (SNDRV_SEQ_LFLG_INPUT|SNDRV_SEQ_LFLG_OUTPUT)
Expand Down Expand Up @@ -203,7 +207,8 @@ 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 kernel_client)
{
unsigned long flags;
int c;
Expand All @@ -227,7 +232,15 @@ static struct snd_seq_client *seq_create_client1(int client_index, int poolsize)
/* find free slot in the client table */
spin_lock_irqsave(&clients_lock, flags);
if (client_index < 0) {
for (c = 128; c < SNDRV_SEQ_MAX_CLIENTS; c++) {
int cmin, cmax;
if (kernel_client) {
cmin = SNDRV_SEQ_DYNAMIC_CLIENT_BEGIN;
cmax = SNDRV_SEQ_DYNAMIC_CLIENT_END;
} else {
cmin = 128;
cmax = SNDRV_SEQ_MAX_CLIENTS;
}
for (c = cmin; c < cmax; c++) {
if (clienttab[c] || clienttablock[c])
continue;
clienttab[client->number = c] = client;
Expand Down Expand Up @@ -306,7 +319,7 @@ static int snd_seq_open(struct inode *inode, struct file *file)

if (down_interruptible(&register_mutex))
return -ERESTARTSYS;
client = seq_create_client1(-1, SNDRV_SEQ_DEFAULT_EVENTS);
client = seq_create_client1(-1, SNDRV_SEQ_DEFAULT_EVENTS, 0);
if (client == NULL) {
up(&register_mutex);
return -ENOMEM; /* failure code */
Expand Down Expand Up @@ -2212,13 +2225,19 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
return -EINVAL;
if (card == NULL && client_index > 63)
return -EINVAL;
if (card)
client_index += 64 + (card->number << 2);

if (down_interruptible(&register_mutex))
return -ERESTARTSYS;

if (card) {
if (card->number < 16)
client_index += 64 + (card->number << 2);
else
client_index = -1;
}

/* empty write queue as default */
client = seq_create_client1(client_index, 0);
client = seq_create_client1(client_index, 0, 1);
if (client == NULL) {
up(&register_mutex);
return -EBUSY; /* failure code */
Expand Down
6 changes: 3 additions & 3 deletions trunk/sound/core/sound.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,15 +358,15 @@ static void snd_minor_info_read(struct snd_info_entry *entry, struct snd_info_bu
continue;
if (mptr->card >= 0) {
if (mptr->device >= 0)
snd_iprintf(buffer, "%3i: [%i-%2i]: %s\n",
snd_iprintf(buffer, "%3i: [%2i-%2i]: %s\n",
minor, mptr->card, mptr->device,
snd_device_type_name(mptr->type));
else
snd_iprintf(buffer, "%3i: [%i] : %s\n",
snd_iprintf(buffer, "%3i: [%2i] : %s\n",
minor, mptr->card,
snd_device_type_name(mptr->type));
} else
snd_iprintf(buffer, "%3i: : %s\n", minor,
snd_iprintf(buffer, "%3i: : %s\n", minor,
snd_device_type_name(mptr->type));
}
up(&sound_mutex);
Expand Down
4 changes: 4 additions & 0 deletions trunk/sound/core/sound_oss.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
int register1 = -1, register2 = -1;
struct device *carddev = NULL;

if (card && card->number >= 8)
return 0; /* ignore silently */
if (minor < 0)
return minor;
preg = kmalloc(sizeof(struct snd_minor), GFP_KERNEL);
Expand Down Expand Up @@ -162,6 +164,8 @@ int snd_unregister_oss_device(int type, struct snd_card *card, int dev)
int track2 = -1;
struct snd_minor *mptr;

if (card && card->number >= 8)
return 0;
if (minor < 0)
return minor;
down(&sound_oss_mutex);
Expand Down

0 comments on commit fb17c7e

Please sign in to comment.