Commit 7b6d9245 authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Jaroslav Kysela

[ALSA] seq: set client name in snd_seq_create_kernel_client()

All users of snd_seq_create_kernel_client() have to set the client name
anyway, so we can just pass the name as parameter.  This relieves us
from having to muck around with a struct snd_seq_client_info in these
cases.
Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
parent 83e8ad69
...@@ -75,7 +75,9 @@ struct snd_seq_port_callback { ...@@ -75,7 +75,9 @@ struct snd_seq_port_callback {
}; };
/* interface for kernel client */ /* interface for kernel client */
int snd_seq_create_kernel_client(struct snd_card *card, int client_index); int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
const char *name_fmt, ...)
__attribute__ ((format (printf, 3, 4)));
int snd_seq_delete_kernel_client(int client); int snd_seq_delete_kernel_client(int client);
int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev, int atomic, int hop); int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev, int atomic, int hop);
int snd_seq_kernel_client_dispatch(int client, struct snd_seq_event *ev, int atomic, int hop); int snd_seq_kernel_client_dispatch(int client, struct snd_seq_event *ev, int atomic, int hop);
......
...@@ -65,33 +65,24 @@ int __init ...@@ -65,33 +65,24 @@ int __init
snd_seq_oss_create_client(void) snd_seq_oss_create_client(void)
{ {
int rc; int rc;
struct snd_seq_client_info *info;
struct snd_seq_port_info *port; struct snd_seq_port_info *port;
struct snd_seq_port_callback port_callback; struct snd_seq_port_callback port_callback;
info = kmalloc(sizeof(*info), GFP_KERNEL);
port = kmalloc(sizeof(*port), GFP_KERNEL); port = kmalloc(sizeof(*port), GFP_KERNEL);
if (!info || !port) { if (!port) {
rc = -ENOMEM; rc = -ENOMEM;
goto __error; goto __error;
} }
/* create ALSA client */ /* create ALSA client */
rc = snd_seq_create_kernel_client(NULL, SNDRV_SEQ_CLIENT_OSS); rc = snd_seq_create_kernel_client(NULL, SNDRV_SEQ_CLIENT_OSS,
"OSS sequencer");
if (rc < 0) if (rc < 0)
goto __error; goto __error;
system_client = rc; system_client = rc;
debug_printk(("new client = %d\n", rc)); debug_printk(("new client = %d\n", rc));
/* set client information */
memset(info, 0, sizeof(*info));
info->client = system_client;
info->type = KERNEL_CLIENT;
strcpy(info->name, "OSS sequencer");
rc = call_ctl(SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, info);
/* look up midi devices */ /* look up midi devices */
snd_seq_oss_midi_lookup_ports(system_client); snd_seq_oss_midi_lookup_ports(system_client);
...@@ -124,7 +115,6 @@ snd_seq_oss_create_client(void) ...@@ -124,7 +115,6 @@ snd_seq_oss_create_client(void)
__error: __error:
kfree(port); kfree(port);
kfree(info);
return rc; return rc;
} }
......
...@@ -2212,9 +2212,11 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg ...@@ -2212,9 +2212,11 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg
/* exported to kernel modules */ /* exported to kernel modules */
int snd_seq_create_kernel_client(struct snd_card *card, int client_index) int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
const char *name_fmt, ...)
{ {
struct snd_seq_client *client; struct snd_seq_client *client;
va_list args;
snd_assert(! in_interrupt(), return -EBUSY); snd_assert(! in_interrupt(), return -EBUSY);
...@@ -2244,7 +2246,9 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index) ...@@ -2244,7 +2246,9 @@ int snd_seq_create_kernel_client(struct snd_card *card, int client_index)
client->accept_input = 1; client->accept_input = 1;
client->accept_output = 1; client->accept_output = 1;
sprintf(client->name, "Client-%d", client->number); va_start(args, name_fmt);
vsnprintf(client->name, sizeof(client->name), name_fmt, args);
va_end(args);
client->type = KERNEL_CLIENT; client->type = KERNEL_CLIENT;
up(&register_mutex); up(&register_mutex);
......
...@@ -193,7 +193,6 @@ create_port(int idx, int type) ...@@ -193,7 +193,6 @@ create_port(int idx, int type)
static int __init static int __init
register_client(void) register_client(void)
{ {
struct snd_seq_client_info cinfo;
struct snd_seq_dummy_port *rec1, *rec2; struct snd_seq_dummy_port *rec1, *rec2;
int i; int i;
...@@ -203,17 +202,11 @@ register_client(void) ...@@ -203,17 +202,11 @@ register_client(void)
} }
/* create client */ /* create client */
my_client = snd_seq_create_kernel_client(NULL, SNDRV_SEQ_CLIENT_DUMMY); my_client = snd_seq_create_kernel_client(NULL, SNDRV_SEQ_CLIENT_DUMMY,
"Midi Through");
if (my_client < 0) if (my_client < 0)
return my_client; return my_client;
/* set client name */
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = my_client;
cinfo.type = KERNEL_CLIENT;
strcpy(cinfo.name, "Midi Through");
snd_seq_kernel_client_ctl(my_client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
/* create ports */ /* create ports */
for (i = 0; i < ports; i++) { for (i = 0; i < ports; i++) {
rec1 = create_port(i, 0); rec1 = create_port(i, 0);
......
...@@ -270,21 +270,6 @@ static void snd_seq_midisynth_delete(struct seq_midisynth *msynth) ...@@ -270,21 +270,6 @@ static void snd_seq_midisynth_delete(struct seq_midisynth *msynth)
snd_midi_event_free(msynth->parser); snd_midi_event_free(msynth->parser);
} }
/* set our client name */
static int set_client_name(struct seq_midisynth_client *client, struct snd_card *card,
struct snd_rawmidi_info *rmidi)
{
struct snd_seq_client_info cinfo;
const char *name;
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = client->seq_client;
cinfo.type = KERNEL_CLIENT;
name = rmidi->name[0] ? (const char *)rmidi->name : "External MIDI";
strlcpy(cinfo.name, name, sizeof(cinfo.name));
return snd_seq_kernel_client_ctl(client->seq_client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
}
/* register new midi synth port */ /* register new midi synth port */
static int static int
snd_seq_midisynth_register_port(struct snd_seq_device *dev) snd_seq_midisynth_register_port(struct snd_seq_device *dev)
...@@ -333,16 +318,17 @@ snd_seq_midisynth_register_port(struct snd_seq_device *dev) ...@@ -333,16 +318,17 @@ snd_seq_midisynth_register_port(struct snd_seq_device *dev)
kfree(info); kfree(info);
return -ENOMEM; return -ENOMEM;
} }
client->seq_client = snd_seq_create_kernel_client(card, 0); client->seq_client =
snd_seq_create_kernel_client(
card, 0, "%s", info->name[0] ?
(const char *)info->name : "External MIDI");
if (client->seq_client < 0) { if (client->seq_client < 0) {
kfree(client); kfree(client);
up(&register_mutex); up(&register_mutex);
kfree(info); kfree(info);
return -ENOMEM; return -ENOMEM;
} }
set_client_name(client, card, info); }
} else if (device == 0)
set_client_name(client, card, info); /* use the first device's name */
msynth = kcalloc(ports, sizeof(struct seq_midisynth), GFP_KERNEL); msynth = kcalloc(ports, sizeof(struct seq_midisynth), GFP_KERNEL);
port = kmalloc(sizeof(*port), GFP_KERNEL); port = kmalloc(sizeof(*port), GFP_KERNEL);
......
...@@ -121,29 +121,18 @@ static int event_input_timer(struct snd_seq_event * ev, int direct, void *privat ...@@ -121,29 +121,18 @@ static int event_input_timer(struct snd_seq_event * ev, int direct, void *privat
int __init snd_seq_system_client_init(void) int __init snd_seq_system_client_init(void)
{ {
struct snd_seq_port_callback pcallbacks; struct snd_seq_port_callback pcallbacks;
struct snd_seq_client_info *inf;
struct snd_seq_port_info *port; struct snd_seq_port_info *port;
inf = kzalloc(sizeof(*inf), GFP_KERNEL);
port = kzalloc(sizeof(*port), GFP_KERNEL); port = kzalloc(sizeof(*port), GFP_KERNEL);
if (! inf || ! port) { if (!port)
kfree(inf);
kfree(port);
return -ENOMEM; return -ENOMEM;
}
memset(&pcallbacks, 0, sizeof(pcallbacks)); memset(&pcallbacks, 0, sizeof(pcallbacks));
pcallbacks.owner = THIS_MODULE; pcallbacks.owner = THIS_MODULE;
pcallbacks.event_input = event_input_timer; pcallbacks.event_input = event_input_timer;
/* register client */ /* register client */
sysclient = snd_seq_create_kernel_client(NULL, 0); sysclient = snd_seq_create_kernel_client(NULL, 0, "System");
/* set our name */
inf->client = 0;
inf->type = KERNEL_CLIENT;
strcpy(inf->name, "System");
snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, inf);
/* register timer */ /* register timer */
strcpy(port->name, "Timer"); strcpy(port->name, "Timer");
...@@ -167,7 +156,6 @@ int __init snd_seq_system_client_init(void) ...@@ -167,7 +156,6 @@ int __init snd_seq_system_client_init(void)
snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port); snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port);
announce_port = port->addr.port; announce_port = port->addr.port;
kfree(inf);
kfree(port); kfree(port);
return 0; return 0;
} }
......
...@@ -360,34 +360,28 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev) ...@@ -360,34 +360,28 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev)
{ {
int client; int client;
struct snd_seq_port_callback pcallbacks; struct snd_seq_port_callback pcallbacks;
struct snd_seq_client_info *info;
struct snd_seq_port_info *pinfo; struct snd_seq_port_info *pinfo;
int err; int err;
if (rdev->client >= 0) if (rdev->client >= 0)
return 0; return 0;
info = kmalloc(sizeof(*info), GFP_KERNEL);
pinfo = kmalloc(sizeof(*pinfo), GFP_KERNEL); pinfo = kmalloc(sizeof(*pinfo), GFP_KERNEL);
if (! info || ! pinfo) { if (!pinfo) {
err = -ENOMEM; err = -ENOMEM;
goto __error; goto __error;
} }
client = snd_seq_create_kernel_client(rdev->card, rdev->device); client = snd_seq_create_kernel_client(rdev->card, rdev->device,
"%s %d-%d", rdev->rmidi->name,
rdev->card->number,
rdev->device);
if (client < 0) { if (client < 0) {
err = client; err = client;
goto __error; goto __error;
} }
rdev->client = client; rdev->client = client;
/* set client name */
memset(info, 0, sizeof(*info));
info->client = client;
info->type = KERNEL_CLIENT;
sprintf(info->name, "%s %d-%d", rdev->rmidi->name, rdev->card->number, rdev->device);
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, info);
/* create a port */ /* create a port */
memset(pinfo, 0, sizeof(*pinfo)); memset(pinfo, 0, sizeof(*pinfo));
pinfo->addr.client = client; pinfo->addr.client = client;
...@@ -418,7 +412,6 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev) ...@@ -418,7 +412,6 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev)
err = 0; /* success */ err = 0; /* success */
__error: __error:
kfree(info);
kfree(pinfo); kfree(pinfo);
return err; return err;
} }
......
...@@ -219,7 +219,7 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev) ...@@ -219,7 +219,7 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
{ {
struct snd_opl3 *opl3; struct snd_opl3 *opl3;
int client; int client;
struct snd_seq_client_info cinfo; char name[32];
int opl_ver; int opl_ver;
opl3 = *(struct snd_opl3 **)SNDRV_SEQ_DEVICE_ARGPTR(dev); opl3 = *(struct snd_opl3 **)SNDRV_SEQ_DEVICE_ARGPTR(dev);
...@@ -231,19 +231,14 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev) ...@@ -231,19 +231,14 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
opl3->seq_client = -1; opl3->seq_client = -1;
/* allocate new client */ /* allocate new client */
opl_ver = (opl3->hardware & OPL3_HW_MASK) >> 8;
sprintf(name, "OPL%i FM synth", opl_ver);
client = opl3->seq_client = client = opl3->seq_client =
snd_seq_create_kernel_client(opl3->card, opl3->seq_dev_num); snd_seq_create_kernel_client(opl3->card, opl3->seq_dev_num,
name);
if (client < 0) if (client < 0)
return client; return client;
/* change name of client */
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = client;
cinfo.type = KERNEL_CLIENT;
opl_ver = (opl3->hardware & OPL3_HW_MASK) >> 8;
sprintf(cinfo.name, "OPL%i FM synth", opl_ver);
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
snd_opl3_synth_create_port(opl3); snd_opl3_synth_create_port(opl3);
/* initialize instrument list */ /* initialize instrument list */
...@@ -264,7 +259,7 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev) ...@@ -264,7 +259,7 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
opl3->sys_timer_status = 0; opl3->sys_timer_status = 0;
#ifdef CONFIG_SND_SEQUENCER_OSS #ifdef CONFIG_SND_SEQUENCER_OSS
snd_opl3_init_seq_oss(opl3, cinfo.name); snd_opl3_init_seq_oss(opl3, name);
#endif #endif
return 0; return 0;
} }
......
...@@ -127,7 +127,6 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev) ...@@ -127,7 +127,6 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev)
{ {
struct snd_opl4 *opl4; struct snd_opl4 *opl4;
int client; int client;
struct snd_seq_client_info cinfo;
struct snd_seq_port_callback pcallbacks; struct snd_seq_port_callback pcallbacks;
opl4 = *(struct snd_opl4 **)SNDRV_SEQ_DEVICE_ARGPTR(dev); opl4 = *(struct snd_opl4 **)SNDRV_SEQ_DEVICE_ARGPTR(dev);
...@@ -143,7 +142,8 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev) ...@@ -143,7 +142,8 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev)
opl4->chset->private_data = opl4; opl4->chset->private_data = opl4;
/* allocate new client */ /* allocate new client */
client = snd_seq_create_kernel_client(opl4->card, opl4->seq_dev_num); client = snd_seq_create_kernel_client(opl4->card, opl4->seq_dev_num,
"OPL4 Wavetable");
if (client < 0) { if (client < 0) {
snd_midi_channel_free_set(opl4->chset); snd_midi_channel_free_set(opl4->chset);
return client; return client;
...@@ -151,13 +151,6 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev) ...@@ -151,13 +151,6 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev)
opl4->seq_client = client; opl4->seq_client = client;
opl4->chset->client = client; opl4->chset->client = client;
/* change name of client */
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = client;
cinfo.type = KERNEL_CLIENT;
strcpy(cinfo.name, "OPL4 Wavetable");
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
/* create new port */ /* create new port */
memset(&pcallbacks, 0, sizeof(pcallbacks)); memset(&pcallbacks, 0, sizeof(pcallbacks));
pcallbacks.owner = THIS_MODULE; pcallbacks.owner = THIS_MODULE;
......
...@@ -214,7 +214,6 @@ static int snd_gus_synth_new_device(struct snd_seq_device *dev) ...@@ -214,7 +214,6 @@ static int snd_gus_synth_new_device(struct snd_seq_device *dev)
{ {
struct snd_gus_card *gus; struct snd_gus_card *gus;
int client, i; int client, i;
struct snd_seq_client_info *cinfo;
struct snd_seq_port_subscribe sub; struct snd_seq_port_subscribe sub;
struct snd_iwffff_ops *iwops; struct snd_iwffff_ops *iwops;
struct snd_gf1_ops *gf1ops; struct snd_gf1_ops *gf1ops;
...@@ -227,25 +226,12 @@ static int snd_gus_synth_new_device(struct snd_seq_device *dev) ...@@ -227,25 +226,12 @@ static int snd_gus_synth_new_device(struct snd_seq_device *dev)
init_MUTEX(&gus->register_mutex); init_MUTEX(&gus->register_mutex);
gus->gf1.seq_client = -1; gus->gf1.seq_client = -1;
cinfo = kmalloc(sizeof(*cinfo), GFP_KERNEL);
if (! cinfo)
return -ENOMEM;
/* allocate new client */ /* allocate new client */
client = gus->gf1.seq_client = client = gus->gf1.seq_client =
snd_seq_create_kernel_client(gus->card, 1); snd_seq_create_kernel_client(gus->card, 1, gus->interwave ?
if (client < 0) { "AMD InterWave" : "GF1");
kfree(cinfo); if (client < 0)
return client; return client;
}
/* change name of client */
memset(cinfo, 0, sizeof(*cinfo));
cinfo->client = client;
cinfo->type = KERNEL_CLIENT;
sprintf(cinfo->name, gus->interwave ? "AMD InterWave" : "GF1");
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, cinfo);
kfree(cinfo);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
snd_gus_synth_create_port(gus, i); snd_gus_synth_create_port(gus, i);
......
...@@ -934,7 +934,6 @@ static int snd_trident_synth_new_device(struct snd_seq_device *dev) ...@@ -934,7 +934,6 @@ static int snd_trident_synth_new_device(struct snd_seq_device *dev)
{ {
struct snd_trident *trident; struct snd_trident *trident;
int client, i; int client, i;
struct snd_seq_client_info cinfo;
struct snd_seq_port_subscribe sub; struct snd_seq_port_subscribe sub;
struct snd_simple_ops *simpleops; struct snd_simple_ops *simpleops;
char *str; char *str;
...@@ -946,23 +945,16 @@ static int snd_trident_synth_new_device(struct snd_seq_device *dev) ...@@ -946,23 +945,16 @@ static int snd_trident_synth_new_device(struct snd_seq_device *dev)
trident->synth.seq_client = -1; trident->synth.seq_client = -1;
/* allocate new client */ /* allocate new client */
client = trident->synth.seq_client =
snd_seq_create_kernel_client(trident->card, 1);
if (client < 0)
return client;
/* change name of client */
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = client;
cinfo.type = KERNEL_CLIENT;
str = "???"; str = "???";
switch (trident->device) { switch (trident->device) {
case TRIDENT_DEVICE_ID_DX: str = "Trident 4DWave-DX"; break; case TRIDENT_DEVICE_ID_DX: str = "Trident 4DWave-DX"; break;
case TRIDENT_DEVICE_ID_NX: str = "Trident 4DWave-NX"; break; case TRIDENT_DEVICE_ID_NX: str = "Trident 4DWave-NX"; break;
case TRIDENT_DEVICE_ID_SI7018: str = "SiS 7018"; break; case TRIDENT_DEVICE_ID_SI7018: str = "SiS 7018"; break;
} }
sprintf(cinfo.name, str); client = trident->synth.seq_client =
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo); snd_seq_create_kernel_client(trident->card, 1, str);
if (client < 0)
return client;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
snd_trident_synth_create_port(trident, i); snd_trident_synth_create_port(trident, i);
......
...@@ -28,7 +28,6 @@ static void free_port(void *private); ...@@ -28,7 +28,6 @@ static void free_port(void *private);
static void snd_emux_init_port(struct snd_emux_port *p); static void snd_emux_init_port(struct snd_emux_port *p);
static int snd_emux_use(void *private_data, struct snd_seq_port_subscribe *info); static int snd_emux_use(void *private_data, struct snd_seq_port_subscribe *info);
static int snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info); static int snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info);
static int get_client(struct snd_card *card, int index, char *name);
/* /*
* MIDI emulation operators * MIDI emulation operators
...@@ -71,8 +70,8 @@ snd_emux_init_seq(struct snd_emux *emu, struct snd_card *card, int index) ...@@ -71,8 +70,8 @@ snd_emux_init_seq(struct snd_emux *emu, struct snd_card *card, int index)
struct snd_seq_port_callback pinfo; struct snd_seq_port_callback pinfo;
char tmpname[64]; char tmpname[64];
sprintf(tmpname, "%s WaveTable", emu->name); emu->client = snd_seq_create_kernel_client(card, index,
emu->client = get_client(card, index, tmpname); "%s WaveTable", emu->name);
if (emu->client < 0) { if (emu->client < 0) {
snd_printk("can't create client\n"); snd_printk("can't create client\n");
return -ENODEV; return -ENODEV;
...@@ -341,30 +340,6 @@ snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info) ...@@ -341,30 +340,6 @@ snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info)
} }
/*
* Create a sequencer client
*/
static int
get_client(struct snd_card *card, int index, char *name)
{
struct snd_seq_client_info cinfo;
int client;
/* Find a free client, start from 1 as the MPU expects to use 0 */
client = snd_seq_create_kernel_client(card, index);
if (client < 0)
return client;
memset(&cinfo, 0, sizeof(cinfo));
cinfo.client = client;
cinfo.type = KERNEL_CLIENT;
strcpy(cinfo.name, name);
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
return client;
}
/* /*
* attach virtual rawmidi devices * attach virtual rawmidi devices
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment