2005-04-17 02:20:36 +04:00
# ifndef __SOUND_PCM_OSS_H
# define __SOUND_PCM_OSS_H
/*
* Digital Audio ( PCM ) - OSS compatibility abstract layer
2007-10-15 11:50:19 +04:00
* Copyright ( c ) by Jaroslav Kysela < perex @ perex . cz >
2005-04-17 02:20:36 +04:00
*
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
*/
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_setup {
2005-04-17 02:20:36 +04:00
char * task_name ;
unsigned int disable : 1 ,
direct : 1 ,
block : 1 ,
nonblock : 1 ,
partialfrag : 1 ,
2005-09-08 15:48:34 +04:00
nosilence : 1 ,
buggyptr : 1 ;
2005-04-17 02:20:36 +04:00
unsigned int periods ;
unsigned int period_size ;
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_setup * next ;
2005-04-17 02:20:36 +04:00
} ;
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_runtime {
2005-04-17 02:20:36 +04: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 15:03:19 +03:00
struct mutex params_lock ;
2006-01-13 11:12:11 +03:00
# ifdef CONFIG_SND_PCM_OSS_PLUGINS
2005-11-17 16:01:49 +03:00
struct snd_pcm_plugin * plugin_first ;
struct snd_pcm_plugin * plugin_last ;
2006-01-13 11:12:11 +03:00
# endif
2005-04-17 02:20:36 +04:00
unsigned int prev_hw_ptr_interrupt ;
2005-11-17 16:01:49 +03:00
} ;
2005-04-17 02:20:36 +04:00
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_file {
struct snd_pcm_substream * streams [ 2 ] ;
} ;
2005-04-17 02:20:36 +04:00
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_substream {
2005-04-17 02:20:36 +04:00
unsigned oss : 1 ; /* oss mode */
2006-03-27 18:44:52 +04:00
struct snd_pcm_oss_setup setup ; /* active setup */
2005-11-17 16:01:49 +03:00
} ;
2005-04-17 02:20:36 +04:00
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss_stream {
struct snd_pcm_oss_setup * setup_list ; /* setup list */
2006-01-16 18:29:08 +03:00
struct mutex setup_mutex ;
2006-04-25 14:56:04 +04:00
# ifdef CONFIG_SND_VERBOSE_PROCFS
2005-11-17 16:01:49 +03:00
struct snd_info_entry * proc_entry ;
2006-04-25 14:56:04 +04:00
# endif
2005-11-17 16:01:49 +03:00
} ;
2005-04-17 02:20:36 +04:00
2005-11-17 16:01:49 +03:00
struct snd_pcm_oss {
2005-04-17 02:20:36 +04:00
int reg ;
unsigned int reg_mask ;
2005-11-17 16:01:49 +03:00
} ;
2005-04-17 02:20:36 +04:00
# endif /* __SOUND_PCM_OSS_H */