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