mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
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: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7c32ae35fb
commit
6740ea6776
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
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,
|
|||||||
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);
|
|||||||
/* 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);
|
||||||
|
Loading…
Reference in New Issue
Block a user