2019-05-27 08:55:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-16 15:20:36 -07:00
# ifndef __SOUND_PCM_OSS_H
# define __SOUND_PCM_OSS_H
/*
* Digital Audio ( PCM ) - OSS compatibility abstract layer
2007-10-15 09:50:19 +02:00
* Copyright ( c ) by Jaroslav Kysela < perex @ perex . cz >
2005-04-16 15:20:36 -07:00
*/
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_setup {
2005-04-16 15:20:36 -07:00
char * task_name ;
unsigned int disable : 1 ,
direct : 1 ,
block : 1 ,
nonblock : 1 ,
partialfrag : 1 ,
2005-09-08 13:48:34 +02:00
nosilence : 1 ,
buggyptr : 1 ;
2005-04-16 15:20:36 -07:00
unsigned int periods ;
unsigned int period_size ;
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_setup * next ;
2005-04-16 15:20:36 -07:00
} ;
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_runtime {
2005-04-16 15:20:36 -07:00
unsigned params : 1 , /* format/parameter change */
prepare : 1 , /* need to prepare the operation */
trigger : 1 , /* trigger flag */
sync_trigger : 1 ; /* sync trigger flag */
int rate ; /* requested rate */
int format ; /* requested OSS format */
unsigned int channels ; /* requested channels */
unsigned int fragshift ;
unsigned int maxfrags ;
unsigned int subdivision ; /* requested subdivision */
size_t period_bytes ; /* requested period size */
size_t period_frames ; /* period frames for poll */
size_t period_ptr ; /* actual write pointer to period */
unsigned int periods ;
size_t buffer_bytes ; /* requested buffer size */
size_t bytes ; /* total # bytes processed */
size_t mmap_bytes ;
char * buffer ; /* vmallocated period */
size_t buffer_used ; /* used length from period buffer */
2006-11-14 13:03:19 +01:00
struct mutex params_lock ;
2018-03-23 08:03:26 +01:00
atomic_t rw_ref ; /* concurrent read/write accesses */
2006-01-13 09:12:11 +01:00
# ifdef CONFIG_SND_PCM_OSS_PLUGINS
2005-11-17 14:01:49 +01:00
struct snd_pcm_plugin * plugin_first ;
struct snd_pcm_plugin * plugin_last ;
2006-01-13 09:12:11 +01:00
# endif
2010-01-05 17:19:34 +01:00
unsigned int prev_hw_ptr_period ;
2005-11-17 14:01:49 +01:00
} ;
2005-04-16 15:20:36 -07:00
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_file {
struct snd_pcm_substream * streams [ 2 ] ;
} ;
2005-04-16 15:20:36 -07:00
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_substream {
2005-04-16 15:20:36 -07:00
unsigned oss : 1 ; /* oss mode */
2006-03-27 16:44:52 +02:00
struct snd_pcm_oss_setup setup ; /* active setup */
2005-11-17 14:01:49 +01:00
} ;
2005-04-16 15:20:36 -07:00
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss_stream {
struct snd_pcm_oss_setup * setup_list ; /* setup list */
2006-01-16 16:29:08 +01:00
struct mutex setup_mutex ;
2006-04-25 12:56:04 +02:00
# ifdef CONFIG_SND_VERBOSE_PROCFS
2005-11-17 14:01:49 +01:00
struct snd_info_entry * proc_entry ;
2006-04-25 12:56:04 +02:00
# endif
2005-11-17 14:01:49 +01:00
} ;
2005-04-16 15:20:36 -07:00
2005-11-17 14:01:49 +01:00
struct snd_pcm_oss {
2005-04-16 15:20:36 -07:00
int reg ;
unsigned int reg_mask ;
2005-11-17 14:01:49 +01:00
} ;
2005-04-16 15:20:36 -07:00
# endif /* __SOUND_PCM_OSS_H */