1 #ifndef _LINUX_PCSP_H
2 #define _LINUX_PCSP_H
3 /*
4  * include/linux/pcsp.h
5  *
6  * /dev/pcsp implementation (dsp & audio for PC Speaker)
7  *
8  * Copyright (C) 1993, 1994  Michael Beck
9  * Some Parts (C) Hannu Savolainen 1992, 1993
10  *
11  * Minor Alterations for Paradise Sound Client
12  */
13 
14 #include <sys/ioctl.h>
15 
16 /* MUST BE defined from 0.5 */
17 /* #define SOUND_VERSION        0x60            */
18 
19 #define PCSP_MAJOR		30
20 #define PCSP_MIXER_MINOR	0
21 #define PCSP_DSP_MINOR		3
22 #define PCSP_AUD_MINOR 		4
23 
24 /* card ID, real soundcards use 0 to ... */
25 
26 #define SNDCARD_PCSP	128
27 #define SNDCARD_STO1	129
28 #define SNDCARD_DACM	130
29 #define SNDCARD_DACS	131
30 
31 /* IOCTL commands, compatible to real /dev/dsp */
32 /* SAMPLESIZE returns only the value, doesn't support changes */
33 
34 #ifndef SNDCTL_DSP_RESET
35 #define SNDCTL_DSP_RESET                _IO  ('P', 0)
36 #define SNDCTL_DSP_SYNC                 _IO  ('P', 1)
37 #define SNDCTL_DSP_SPEED                _IOWR('P', 2, int)
38 #define SNDCTL_DSP_STEREO               _IOWR('P', 3, int)
39 #define SNDCTL_DSP_GETBLKSIZE           _IOWR('P', 4, int)
40 /* #define SNDCTL_DSP_SAMPLESIZE           _IOWR('P', 5, int) */
41 
42 /*
43 #define SOUND_PCM_WRITE_CHANNELS        _IOWR('P', 6, int)
44 #define SOUND_PCM_WRITE_FILTER          _IOWR('P', 7, int)
45 */
46 /* #define SOUND_PCM_WRITE_BITS            SNDCTL_DSP_SAMPLESIZE */
47 #define SOUND_PCM_WRITE_RATE            SNDCTL_DSP_SPEED
48 
49 #define SOUND_PCM_READ_RATE             _IOR ('P', 2, int)
50 #define SOUND_PCM_READ_CHANNELS         _IOR ('P', 6, int)
51 #define SOUND_PCM_READ_BITS             _IOR ('P', 5, int)
52 #define SOUND_PCM_READ_FILTER           _IOR ('P', 7, int)
53 #endif
54 
55 
56 /* IOCTL for changing the play-device, real sample rate etc. */
57 
58 #define PCSP_SET_DEV					0x00014350
59 #define PCSP_GET_DEV					0x00024350
60 #define PCSP_SET_PORTS					0x00034350
61 #define PCSP_GET_PORTS					0x00044350
62 #define PCSP_SET_VOL					0x00054350
63 #define PCSP_GET_VOL					0x00064350
64 #define PCSP_SET_SRATE					0x00074350
65 #define PCSP_GET_SRATE					0x00084350
66 #define PCSP_GET_MEASURE				0x00094350
67 
68 /*********************************************
69  * IOCTL commands for /dev/mixer
70  */
71 
72 /* Mixer devices */
73 #undef SOUND_DEVICE_NAMES
74 #undef SOUND_DEVICE_LABELS
75 #undef SOUND_MIXER_NRDEVICES
76 #define SOUND_MIXER_NRDEVICES	12
77 #define SOUND_MIXER_VOLUME	0
78 #define SOUND_MIXER_BASS	1
79 #define SOUND_MIXER_TREBLE	2
80 #define SOUND_MIXER_SYNTH	3
81 #define SOUND_MIXER_PCM		4
82 #define SOUND_MIXER_SPEAKER	5
83 #define SOUND_MIXER_LINE	6
84 #define SOUND_MIXER_MIC		7
85 #define SOUND_MIXER_CD		8
86 #define SOUND_MIXER_IMIX	9	/*  Recording monitor  */
87 #define SOUND_MIXER_ALTPCM	10
88 #define SOUND_MIXER_RECLEV	11	/* Recording level */
89 
90 /* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
91 /* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
92 #define SOUND_ONOFF_MIN		28
93 #define SOUND_ONOFF_MAX		30
94 #if 0
95 #define SOUND_MIXER_MUTE	28	/* 0 or 1 */
96 #define SOUND_MIXER_ENHANCE	29	/* Enhanced stereo (0, 40, 60 or 80) */
97 #define SOUND_MIXER_LOUD	30	/* 0 or 1 */
98 #endif
99 
100 /* Note!        Number 31 cannot be used since the sign bit is reserved */
101 
102 #define SOUND_DEVICE_LABELS	{"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \
103 				 "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "rec"}
104 
105 #define SOUND_DEVICE_NAMES	{"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
106 				 "mic", "cd", "mix", "pcm2", "rec"}
107 
108 /*      Device bitmask identifiers      */
109 
110 #define SOUND_MIXER_RECSRC	0xff	/* Arg contains a bit for each recording source */
111 #define SOUND_MIXER_DEVMASK	0xfe	/* Arg contains a bit for each supported device */
112 #define SOUND_MIXER_RECMASK	0xfd	/* Arg contains a bit for each supported recording source */
113 #define SOUND_MIXER_CAPS	0xfc
114 #define SOUND_CAP_EXCL_INPUT	0x00000001	/* Only one recording source at a time */
115 #define SOUND_MIXER_STEREODEVS	0xfb	/* Mixer channels supporting stereo */
116 
117 /*      Device mask bits        */
118 
119 #define SOUND_MASK_VOLUME	(1 << SOUND_MIXER_VOLUME)
120 #define SOUND_MASK_BASS		(1 << SOUND_MIXER_BASS)
121 #define SOUND_MASK_TREBLE	(1 << SOUND_MIXER_TREBLE)
122 #define SOUND_MASK_SYNTH	(1 << SOUND_MIXER_SYNTH)
123 #define SOUND_MASK_PCM		(1 << SOUND_MIXER_PCM)
124 #define SOUND_MASK_SPEAKER	(1 << SOUND_MIXER_SPEAKER)
125 #define SOUND_MASK_LINE		(1 << SOUND_MIXER_LINE)
126 #define SOUND_MASK_MIC		(1 << SOUND_MIXER_MIC)
127 #define SOUND_MASK_CD		(1 << SOUND_MIXER_CD)
128 #define SOUND_MASK_IMIX		(1 << SOUND_MIXER_IMIX)
129 #define SOUND_MASK_ALTPCM	(1 << SOUND_MIXER_ALTPCM)
130 #define SOUND_MASK_RECLEV	(1 << SOUND_MIXER_RECLEV)
131 
132 #define SOUND_MASK_MUTE		(1 << SOUND_MIXER_MUTE)
133 #define SOUND_MASK_ENHANCE	(1 << SOUND_MIXER_ENHANCE)
134 #define SOUND_MASK_LOUD		(1 << SOUND_MIXER_LOUD)
135 
136 #ifndef MIXER_READ
137 #define MIXER_READ(dev)		_IOR('M', dev, int)
138 #endif
139 #define SOUND_MIXER_READ_VOLUME		MIXER_READ(SOUND_MIXER_VOLUME)
140 #define SOUND_MIXER_READ_BASS		MIXER_READ(SOUND_MIXER_BASS)
141 #define SOUND_MIXER_READ_TREBLE		MIXER_READ(SOUND_MIXER_TREBLE)
142 #define SOUND_MIXER_READ_SYNTH		MIXER_READ(SOUND_MIXER_SYNTH)
143 #define SOUND_MIXER_READ_PCM		MIXER_READ(SOUND_MIXER_PCM)
144 #define SOUND_MIXER_READ_SPEAKER	MIXER_READ(SOUND_MIXER_SPEAKER)
145 #define SOUND_MIXER_READ_LINE		MIXER_READ(SOUND_MIXER_LINE)
146 #define SOUND_MIXER_READ_MIC		MIXER_READ(SOUND_MIXER_MIC)
147 #define SOUND_MIXER_READ_CD		MIXER_READ(SOUND_MIXER_CD)
148 #define SOUND_MIXER_READ_IMIX		MIXER_READ(SOUND_MIXER_IMIX)
149 #define SOUND_MIXER_READ_ALTPCM		MIXER_READ(SOUND_MIXER_ALTPCM)
150 #define SOUND_MIXER_READ_RECLEV		MIXER_READ(SOUND_MIXER_RECLEV)
151 #define SOUND_MIXER_READ_MUTE		MIXER_READ(SOUND_MIXER_MUTE)
152 #define SOUND_MIXER_READ_ENHANCE	MIXER_READ(SOUND_MIXER_ENHANCE)
153 #define SOUND_MIXER_READ_LOUD		MIXER_READ(SOUND_MIXER_LOUD)
154 
155 #define SOUND_MIXER_READ_RECSRC		MIXER_READ(SOUND_MIXER_RECSRC)
156 #define SOUND_MIXER_READ_DEVMASK	MIXER_READ(SOUND_MIXER_DEVMASK)
157 #define SOUND_MIXER_READ_RECMASK	MIXER_READ(SOUND_MIXER_RECMASK)
158 #define SOUND_MIXER_READ_STEREODEVS	MIXER_READ(SOUND_MIXER_STEREODEVS)
159 #define SOUND_MIXER_READ_CAPS		MIXER_READ(SOUND_MIXER_CAPS)
160 
161 #ifndef MIXER_WRITE
162 #define MIXER_WRITE(dev)		_IOWR('M', dev, int)
163 #endif
164 #define SOUND_MIXER_WRITE_VOLUME	MIXER_WRITE(SOUND_MIXER_VOLUME)
165 #define SOUND_MIXER_WRITE_BASS		MIXER_WRITE(SOUND_MIXER_BASS)
166 #define SOUND_MIXER_WRITE_TREBLE	MIXER_WRITE(SOUND_MIXER_TREBLE)
167 #define SOUND_MIXER_WRITE_SYNTH		MIXER_WRITE(SOUND_MIXER_SYNTH)
168 #define SOUND_MIXER_WRITE_PCM		MIXER_WRITE(SOUND_MIXER_PCM)
169 #define SOUND_MIXER_WRITE_SPEAKER	MIXER_WRITE(SOUND_MIXER_SPEAKER)
170 #define SOUND_MIXER_WRITE_LINE		MIXER_WRITE(SOUND_MIXER_LINE)
171 #define SOUND_MIXER_WRITE_MIC		MIXER_WRITE(SOUND_MIXER_MIC)
172 #define SOUND_MIXER_WRITE_CD		MIXER_WRITE(SOUND_MIXER_CD)
173 #define SOUND_MIXER_WRITE_IMIX		MIXER_WRITE(SOUND_MIXER_IMIX)
174 #define SOUND_MIXER_WRITE_ALTPCM	MIXER_WRITE(SOUND_MIXER_ALTPCM)
175 #define SOUND_MIXER_WRITE_RECLEV	MIXER_WRITE(SOUND_MIXER_RECLEV)
176 #define SOUND_MIXER_WRITE_MUTE		MIXER_WRITE(SOUND_MIXER_MUTE)
177 #define SOUND_MIXER_WRITE_ENHANCE	MIXER_WRITE(SOUND_MIXER_ENHANCE)
178 #define SOUND_MIXER_WRITE_LOUD		MIXER_WRITE(SOUND_MIXER_LOUD)
179 
180 #define SOUND_MIXER_WRITE_RECSRC	MIXER_WRITE(SOUND_MIXER_RECSRC)
181 
182 /*
183  *    The following mixer ioctl calls are compatible with the BSD driver by
184  *        Steve Haehnichen <shaehnic@ucsd.edu>
185  */
186 
187 typedef unsigned char BYTE;
188 typedef unsigned char FLAG;
189 struct stereo_vol
190   {
191     BYTE            l;		/* Left volume */
192     BYTE            r;		/* Right volume */
193   };
194 
195 #define MIXER_IOCTL_SET_LEVELS 		_IOW ('s', 20, struct sb_mixer_levels)
196 #define MIXER_IOCTL_SET_PARAMS 		_IOW ('s', 21, struct sb_mixer_params)
197 #define MIXER_IOCTL_READ_LEVELS 	_IOR ('s', 22, struct sb_mixer_levels)
198 #define MIXER_IOCTL_READ_PARAMS 	_IOR ('s', 23, struct sb_mixer_params)
199 #define MIXER_IOCTL_RESET		_IO  ('s', 24)
200 
201 /*
202  * Mixer volume levels for MIXER_IOCTL_SET_VOL & MIXER_IOCTL_READ_VOL
203  */
204 struct sb_mixer_levels
205   {
206     struct stereo_vol master;	/* Master volume */
207     struct stereo_vol voc;	/* DSP Voice volume */
208     struct stereo_vol fm;	/* FM volume */
209     struct stereo_vol line;	/* Line-in volume */
210     struct stereo_vol cd;	/* CD audio */
211     BYTE            mic;	/* Microphone level */
212   };
213 
214 /*
215  * Mixer parameters for MIXER_IOCTL_SET_PARAMS & MIXER_IOCTL_READ_PARAMS
216  */
217 struct sb_mixer_params
218   {
219     BYTE            record_source;	/* Recording source (See SRC_xxx below) */
220     FLAG            hifreq_filter;	/* Filter frequency (hi/low) */
221     FLAG            filter_input;	/* ANFI input filter */
222     FLAG            filter_output;	/* DNFI output filter */
223     FLAG            dsp_stereo;	/* 1 if DSP is in Stereo mode */
224   };
225 
226 #define SRC_MIC         1	/* Select Microphone recording source */
227 #define SRC_CD          3	/* Select CD recording source */
228 #define SRC_LINE        7	/* Use Line-in for recording source */
229 
230 #endif
231