2019-05-27 09:55:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-17 02:20:36 +04:00
/*
* ALSA sequencer FIFO
* Copyright ( c ) 1998 by Frank van de Pol < fvdpol @ coil . demon . nl >
*/
# ifndef __SND_SEQ_FIFO_H
# define __SND_SEQ_FIFO_H
# include "seq_memory.h"
# include "seq_lock.h"
/* === FIFO === */
2005-11-17 16:04:02 +03:00
struct snd_seq_fifo {
struct snd_seq_pool * pool ; /* FIFO pool */
struct snd_seq_event_cell * head ; /* pointer to head of fifo */
struct snd_seq_event_cell * tail ; /* pointer to tail of fifo */
2005-04-17 02:20:36 +04:00
int cells ;
spinlock_t lock ;
snd_use_lock_t use_lock ;
wait_queue_head_t input_sleep ;
atomic_t overflow ;
2005-11-17 16:04:02 +03:00
} ;
2005-04-17 02:20:36 +04:00
/* create new fifo (constructor) */
2005-11-17 16:04:02 +03:00
struct snd_seq_fifo * snd_seq_fifo_new ( int poolsize ) ;
2005-04-17 02:20:36 +04:00
/* delete fifo (destructor) */
2005-11-17 16:04:02 +03:00
void snd_seq_fifo_delete ( struct snd_seq_fifo * * f ) ;
2005-04-17 02:20:36 +04:00
/* enqueue event to fifo */
2005-11-17 16:04:02 +03:00
int snd_seq_fifo_event_in ( struct snd_seq_fifo * f , struct snd_seq_event * event ) ;
2005-04-17 02:20:36 +04:00
/* lock fifo from release */
# define snd_seq_fifo_lock(fifo) snd_use_lock_use(&(fifo)->use_lock)
# define snd_seq_fifo_unlock(fifo) snd_use_lock_free(&(fifo)->use_lock)
/* get a cell from fifo - fifo should be locked */
2005-11-17 16:04:02 +03:00
int snd_seq_fifo_cell_out ( struct snd_seq_fifo * f , struct snd_seq_event_cell * * cellp , int nonblock ) ;
2005-04-17 02:20:36 +04:00
/* free dequeued cell - fifo should be locked */
2005-11-17 16:04:02 +03:00
void snd_seq_fifo_cell_putback ( struct snd_seq_fifo * f , struct snd_seq_event_cell * cell ) ;
2005-04-17 02:20:36 +04:00
/* clean up queue */
2005-11-17 16:04:02 +03:00
void snd_seq_fifo_clear ( struct snd_seq_fifo * f ) ;
2005-04-17 02:20:36 +04:00
/* polling */
2005-11-17 16:04:02 +03:00
int snd_seq_fifo_poll_wait ( struct snd_seq_fifo * f , struct file * file , poll_table * wait ) ;
2005-04-17 02:20:36 +04:00
/* resize pool in fifo */
2005-11-17 16:04:02 +03:00
int snd_seq_fifo_resize ( struct snd_seq_fifo * f , int poolsize ) ;
2005-04-17 02:20:36 +04:00
2019-08-25 10:21:44 +03:00
/* get the number of unused cells safely */
int snd_seq_fifo_unused_cells ( struct snd_seq_fifo * f ) ;
2005-04-17 02:20:36 +04:00
# endif