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 */ |
76 | |