xref: /OK3568_Linux_fs/kernel/include/sound/pcm_oss.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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