1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun #ifndef __SOUND_PCM_OSS_H 3*4882a593Smuzhiyun #define __SOUND_PCM_OSS_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun /* 6*4882a593Smuzhiyun * Digital Audio (PCM) - OSS compatibility abstract layer 7*4882a593Smuzhiyun * Copyright (c) by Jaroslav Kysela <perex@perex.cz> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun struct snd_pcm_oss_setup { 11*4882a593Smuzhiyun char *task_name; 12*4882a593Smuzhiyun unsigned int disable:1, 13*4882a593Smuzhiyun direct:1, 14*4882a593Smuzhiyun block:1, 15*4882a593Smuzhiyun nonblock:1, 16*4882a593Smuzhiyun partialfrag:1, 17*4882a593Smuzhiyun nosilence:1, 18*4882a593Smuzhiyun buggyptr:1; 19*4882a593Smuzhiyun unsigned int periods; 20*4882a593Smuzhiyun unsigned int period_size; 21*4882a593Smuzhiyun struct snd_pcm_oss_setup *next; 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct snd_pcm_oss_runtime { 25*4882a593Smuzhiyun unsigned params: 1, /* format/parameter change */ 26*4882a593Smuzhiyun prepare: 1, /* need to prepare the operation */ 27*4882a593Smuzhiyun trigger: 1, /* trigger flag */ 28*4882a593Smuzhiyun sync_trigger: 1; /* sync trigger flag */ 29*4882a593Smuzhiyun int rate; /* requested rate */ 30*4882a593Smuzhiyun int format; /* requested OSS format */ 31*4882a593Smuzhiyun unsigned int channels; /* requested channels */ 32*4882a593Smuzhiyun unsigned int fragshift; 33*4882a593Smuzhiyun unsigned int maxfrags; 34*4882a593Smuzhiyun unsigned int subdivision; /* requested subdivision */ 35*4882a593Smuzhiyun size_t period_bytes; /* requested period size */ 36*4882a593Smuzhiyun size_t period_frames; /* period frames for poll */ 37*4882a593Smuzhiyun size_t period_ptr; /* actual write pointer to period */ 38*4882a593Smuzhiyun unsigned int periods; 39*4882a593Smuzhiyun size_t buffer_bytes; /* requested buffer size */ 40*4882a593Smuzhiyun size_t bytes; /* total # bytes processed */ 41*4882a593Smuzhiyun size_t mmap_bytes; 42*4882a593Smuzhiyun char *buffer; /* vmallocated period */ 43*4882a593Smuzhiyun size_t buffer_used; /* used length from period buffer */ 44*4882a593Smuzhiyun struct mutex params_lock; 45*4882a593Smuzhiyun atomic_t rw_ref; /* concurrent read/write accesses */ 46*4882a593Smuzhiyun #ifdef CONFIG_SND_PCM_OSS_PLUGINS 47*4882a593Smuzhiyun struct snd_pcm_plugin *plugin_first; 48*4882a593Smuzhiyun struct snd_pcm_plugin *plugin_last; 49*4882a593Smuzhiyun #endif 50*4882a593Smuzhiyun unsigned int prev_hw_ptr_period; 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct snd_pcm_oss_file { 54*4882a593Smuzhiyun struct snd_pcm_substream *streams[2]; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct snd_pcm_oss_substream { 58*4882a593Smuzhiyun unsigned oss: 1; /* oss mode */ 59*4882a593Smuzhiyun struct snd_pcm_oss_setup setup; /* active setup */ 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct snd_pcm_oss_stream { 63*4882a593Smuzhiyun struct snd_pcm_oss_setup *setup_list; /* setup list */ 64*4882a593Smuzhiyun struct mutex setup_mutex; 65*4882a593Smuzhiyun #ifdef CONFIG_SND_VERBOSE_PROCFS 66*4882a593Smuzhiyun struct snd_info_entry *proc_entry; 67*4882a593Smuzhiyun #endif 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun struct snd_pcm_oss { 71*4882a593Smuzhiyun int reg; 72*4882a593Smuzhiyun unsigned int reg_mask; 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun #endif /* __SOUND_PCM_OSS_H */ 76