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