Commit 6740ea67 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: seq: Simplify snd_seq_kernel_client_enqueue() helper

We have two helpers for queuing a sequencer event from the kernel
client, and both are used only from OSS sequencer layer without any
hop and atomic set.  Let's simplify and unify two helpers into one.

No functional change, just a call pattern change.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7c32ae35
...@@ -73,7 +73,8 @@ __printf(3, 4) ...@@ -73,7 +73,8 @@ __printf(3, 4)
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, ...); const char *name_fmt, ...);
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,
struct file *file, bool blocking);
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);
int snd_seq_kernel_client_ctl(int client, unsigned int cmd, void *arg); int snd_seq_kernel_client_ctl(int client, unsigned int cmd, void *arg);
......
...@@ -180,14 +180,11 @@ insert_queue(struct seq_oss_devinfo *dp, union evrec *rec, struct file *opt) ...@@ -180,14 +180,11 @@ insert_queue(struct seq_oss_devinfo *dp, union evrec *rec, struct file *opt)
return 0; /* invalid event - no need to insert queue */ return 0; /* invalid event - no need to insert queue */
event.time.tick = snd_seq_oss_timer_cur_tick(dp->timer); event.time.tick = snd_seq_oss_timer_cur_tick(dp->timer);
if (dp->timer->realtime || !dp->timer->running) { if (dp->timer->realtime || !dp->timer->running)
snd_seq_oss_dispatch(dp, &event, 0, 0); snd_seq_oss_dispatch(dp, &event, 0, 0);
} else { else
if (is_nonblock_mode(dp->file_mode)) rc = snd_seq_kernel_client_enqueue(dp->cseq, &event, opt,
rc = snd_seq_kernel_client_enqueue(dp->cseq, &event, 0, 0); !is_nonblock_mode(dp->file_mode));
else
rc = snd_seq_kernel_client_enqueue_blocking(dp->cseq, &event, opt, 0, 0);
}
return rc; return rc;
} }
......
...@@ -116,7 +116,7 @@ snd_seq_oss_writeq_sync(struct seq_oss_writeq *q) ...@@ -116,7 +116,7 @@ snd_seq_oss_writeq_sync(struct seq_oss_writeq *q)
rec->t.code = SEQ_SYNCTIMER; rec->t.code = SEQ_SYNCTIMER;
rec->t.time = time; rec->t.time = time;
q->sync_event_put = 1; q->sync_event_put = 1;
snd_seq_kernel_client_enqueue_blocking(dp->cseq, &ev, NULL, 0, 0); snd_seq_kernel_client_enqueue(dp->cseq, &ev, NULL, true);
} }
wait_event_interruptible_timeout(q->sync_sleep, ! q->sync_event_put, HZ); wait_event_interruptible_timeout(q->sync_sleep, ! q->sync_event_put, HZ);
......
...@@ -2218,12 +2218,13 @@ int snd_seq_delete_kernel_client(int client) ...@@ -2218,12 +2218,13 @@ int snd_seq_delete_kernel_client(int client)
} }
EXPORT_SYMBOL(snd_seq_delete_kernel_client); EXPORT_SYMBOL(snd_seq_delete_kernel_client);
/* skeleton to enqueue event, called from snd_seq_kernel_client_enqueue /*
* and snd_seq_kernel_client_enqueue_blocking * exported, called by kernel clients to enqueue events (w/o blocking)
*
* RETURN VALUE: zero if succeed, negative if error
*/ */
static int kernel_client_enqueue(int client, struct snd_seq_event *ev, int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev,
struct file *file, int blocking, struct file *file, bool blocking)
int atomic, int hop)
{ {
struct snd_seq_client *cptr; struct snd_seq_client *cptr;
int result; int result;
...@@ -2250,37 +2251,13 @@ static int kernel_client_enqueue(int client, struct snd_seq_event *ev, ...@@ -2250,37 +2251,13 @@ static int kernel_client_enqueue(int client, struct snd_seq_event *ev,
result = -EPERM; result = -EPERM;
else /* send it */ else /* send it */
result = snd_seq_client_enqueue_event(cptr, ev, file, blocking, result = snd_seq_client_enqueue_event(cptr, ev, file, blocking,
atomic, hop, NULL); false, 0, NULL);
snd_seq_client_unlock(cptr); snd_seq_client_unlock(cptr);
return result; return result;
} }
/*
* exported, called by kernel clients to enqueue events (w/o blocking)
*
* RETURN VALUE: zero if succeed, negative if error
*/
int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event * ev,
int atomic, int hop)
{
return kernel_client_enqueue(client, ev, NULL, 0, atomic, hop);
}
EXPORT_SYMBOL(snd_seq_kernel_client_enqueue); EXPORT_SYMBOL(snd_seq_kernel_client_enqueue);
/*
* exported, called by kernel clients to enqueue events (with blocking)
*
* RETURN VALUE: zero if succeed, negative if error
*/
int snd_seq_kernel_client_enqueue_blocking(int client, struct snd_seq_event * ev,
struct file *file,
int atomic, int hop)
{
return kernel_client_enqueue(client, ev, file, 1, atomic, hop);
}
EXPORT_SYMBOL(snd_seq_kernel_client_enqueue_blocking);
/* /*
* exported, called by kernel clients to dispatch events directly to other * exported, called by kernel clients to dispatch events directly to other
* clients, bypassing the queues. Event time-stamp will be updated. * clients, bypassing the queues. Event time-stamp will be updated.
......
...@@ -93,10 +93,6 @@ struct snd_seq_client *snd_seq_client_use_ptr(int clientid); ...@@ -93,10 +93,6 @@ struct snd_seq_client *snd_seq_client_use_ptr(int clientid);
/* dispatch event to client(s) */ /* dispatch event to client(s) */
int snd_seq_dispatch_event(struct snd_seq_event_cell *cell, int atomic, int hop); int snd_seq_dispatch_event(struct snd_seq_event_cell *cell, int atomic, int hop);
/* exported to other modules */
int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev, int atomic, int hop);
int snd_seq_kernel_client_enqueue_blocking(int client, struct snd_seq_event * ev,
struct file *file, int atomic, int hop);
int snd_seq_kernel_client_write_poll(int clientid, struct file *file, poll_table *wait); int snd_seq_kernel_client_write_poll(int clientid, struct file *file, poll_table *wait);
int snd_seq_client_notify_subscription(int client, int port, int snd_seq_client_notify_subscription(int client, int port,
struct snd_seq_port_subscribe *info, int evtype); struct snd_seq_port_subscribe *info, int evtype);
......
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