1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 #ifndef _SYS_LX_IOCTL_H
27 #define _SYS_LX_IOCTL_H
28
29 #pragma ident "%Z%%M% %I% %E% SMI"
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 extern int lx_ioctl_init(void);
36
37 /*
38 * LX_NCC must be different from LX_NCCS since while the termio and termios
39 * structures may look similar they are fundamentally different sizes and
40 * have different members.
41 */
42 #define LX_NCC 8
43 #define LX_NCCS 19
44
45 struct lx_termio {
46 unsigned short c_iflag; /* input mode flags */
47 unsigned short c_oflag; /* output mode flags */
48 unsigned short c_cflag; /* control mode flags */
49 unsigned short c_lflag; /* local mode flags */
50 unsigned char c_line; /* line discipline */
51 unsigned char c_cc[LX_NCC]; /* control characters */
52 };
53
54 struct lx_termios {
55 uint32_t c_iflag; /* input mode flags */
56 uint32_t c_oflag; /* output mode flags */
57 uint32_t c_cflag; /* control mode flags */
58 uint32_t c_lflag; /* local mode flags */
59 unsigned char c_line; /* line discipline */
60 unsigned char c_cc[LX_NCCS]; /* control characters */
61 };
62
63 /*
64 * c_cc characters which are valid for lx_termio and lx_termios
65 */
66 #define LX_VINTR 0
67 #define LX_VQUIT 1
68 #define LX_VERASE 2
69 #define LX_VKILL 3
70 #define LX_VEOF 4
71 #define LX_VTIME 5
72 #define LX_VMIN 6
73 #define LX_VSWTC 7
74
75 /*
76 * c_cc characters which are valid for lx_termios
77 */
78 #define LX_VSTART 8
79 #define LX_VSTOP 9
80 #define LX_VSUSP 10
81 #define LX_VEOL 11
82 #define LX_VREPRINT 12
83 #define LX_VDISCARD 13
84 #define LX_VWERASE 14
85 #define LX_VLNEXT 15
86 #define LX_VEOL2 16
87
88 /*
89 * Sound formats
90 */
91 #define LX_AFMT_QUERY 0x00000000
92 #define LX_AFMT_MU_LAW 0x00000001
93 #define LX_AFMT_A_LAW 0x00000002
94 #define LX_AFMT_IMA_ADPCM 0x00000004
95 #define LX_AFMT_U8 0x00000008
96 #define LX_AFMT_S16_LE 0x00000010
97 #define LX_AFMT_S16_BE 0x00000020
98 #define LX_AFMT_S8 0x00000040
99 #define LX_AFMT_U16_LE 0x00000080
100 #define LX_AFMT_U16_BE 0x00000100
101 #define LX_AFMT_MPEG 0x00000200
102 #define LX_AFMT_AC3 0x00000400
103
104 /*
105 * Supported ioctls
106 */
107 #define LX_TCGETS 0x5401
108 #define LX_TCSETS 0x5402
109 #define LX_TCSETSW 0x5403
110 #define LX_TCSETSF 0x5404
111 #define LX_TCGETA 0x5405
112 #define LX_TCSETA 0x5406
113 #define LX_TCSETAW 0x5407
114 #define LX_TCSETAF 0x5408
115 #define LX_TCSBRK 0x5409
116 #define LX_TCXONC 0x540a
117 #define LX_TCFLSH 0x540b
118 #define LX_TIOCEXCL 0x540c
119 #define LX_TIOCNXCL 0x540d
120 #define LX_TIOCSCTTY 0x540e
121 #define LX_TIOCGPGRP 0x540f
122 #define LX_TIOCSPGRP 0x5410
123 #define LX_TIOCOUTQ 0x5411
124 #define LX_TIOCSTI 0x5412
125 #define LX_TIOCGWINSZ 0x5413
126 #define LX_TIOCSWINSZ 0x5414
127 #define LX_TIOCMGET 0x5415
128 #define LX_TIOCMBIS 0x5416
129 #define LX_TIOCMBIC 0x5417
130 #define LX_TIOCMSET 0x5418
131 #define LX_TIOCGSOFTCAR 0x5419
132 #define LX_TIOCSSOFTCAR 0x541a
133 #define LX_FIONREAD 0x541b
134 #define LX_TIOCPKT 0x5420
135 #define LX_FIONBIO 0x5421
136 #define LX_TIOCNOTTY 0x5422
137 #define LX_TIOCSETD 0x5423
138 #define LX_TIOCGETD 0x5424
139 #define LX_TCSBRKP 0x5425
140 #define LX_TIOCGSID 0x5429
141 #define LX_TIOCGPTN 0x80045430
142 #define LX_TIOCSPTLCK 0x40045431
143 #define LX_FIONCLEX 0x5450
144 #define LX_FIOCLEX 0x5451
145 #define LX_FIOASYNC 0x5452
146 #define LX_FIOSETOWN 0x8901
147 #define LX_SIOCSPGRP 0x8902
148 #define LX_FIOGETOWN 0x8903
149 #define LX_SIOCGPGRP 0x8904
150 #define LX_SIOCATMARK 0x8905
151 #define LX_SIOCGIFCONF 0x8912
152 #define LX_SIOCGIFFLAGS 0x8913
153 #define LX_SIOCSIFFLAGS 0x8914
154 #define LX_SIOCGIFADDR 0x8915
155 #define LX_SIOCSIFADDR 0x8916
156 #define LX_SIOCGIFDSTADDR 0x8917
157 #define LX_SIOCSIFDSTADDR 0x8918
158 #define LX_SIOCGIFBRDADDR 0x8919
159 #define LX_SIOCSIFBRDADDR 0x891a
160 #define LX_SIOCGIFNETMASK 0x891b
161 #define LX_SIOCSIFNETMASK 0x891c
162 #define LX_SIOCGIFMETRIC 0x891d
163 #define LX_SIOCSIFMETRIC 0x891e
164 #define LX_SIOCGIFMEM 0x891f
165 #define LX_SIOCSIFMEM 0x8920
166 #define LX_SIOCGIFMTU 0x8921
167 #define LX_SIOCSIFMTU 0x8922
168 #define LX_SIOCSIFHWADDR 0x8924
169 #define LX_SIOCGIFHWADDR 0x8927
170
171 /*
172 * /dev/dsp ioctls - supported
173 */
174 #define LX_OSS_SNDCTL_DSP_RESET 0x5000
175 #define LX_OSS_SNDCTL_DSP_SYNC 0x5001
176 #define LX_OSS_SNDCTL_DSP_SPEED 0xc0045002
177 #define LX_OSS_SNDCTL_DSP_STEREO 0xc0045003
178 #define LX_OSS_SNDCTL_DSP_GETBLKSIZE 0xc0045004
179 #define LX_OSS_SNDCTL_DSP_SETFMTS 0xc0045005
180 #define LX_OSS_SNDCTL_DSP_CHANNELS 0xc0045006
181 #define LX_OSS_SNDCTL_DSP_SETFRAGMENT 0xc004500a
182 #define LX_OSS_SNDCTL_DSP_GETFMTS 0x8004500b
183 #define LX_OSS_SNDCTL_DSP_GETOSPACE 0x8010500c
184 #define LX_OSS_SNDCTL_DSP_GETCAPS 0x8004500f
185 #define LX_OSS_SNDCTL_DSP_SETTRIGGER 0x40045010
186 #define LX_OSS_SNDCTL_DSP_GETOPTR 0x800c5012
187 #define LX_OSS_SNDCTL_DSP_GETISPACE 0x8010500d
188
189 /*
190 * support for /dev/dsp SNDCTL_DSP_GETFMTS and SNDCTL_DSP_SETFMTS
191 */
192 #define LX_OSS_AFMT_QUERY 0x0000
193 #define LX_OSS_AFMT_MU_LAW 0x0001
194 #define LX_OSS_AFMT_A_LAW 0x0002
195 #define LX_OSS_AFMT_IMA_ADPCM 0x0004
196 #define LX_OSS_AFMT_U8 0x0008
197 #define LX_OSS_AFMT_S16_LE 0x0010
198 #define LX_OSS_AFMT_S16_BE 0x0020
199 #define LX_OSS_AFMT_S8 0x0040
200 #define LX_OSS_AFMT_U16_LE 0x0080
201 #define LX_OSS_AFMT_U16_BE 0x0100
202 #define LX_OSS_AFMT_MPEG 0x0200
203
204 #ifdef _LITTLE_ENDIAN
205 #define LX_OSS_AFMT_S16_NE LX_OSS_AFMT_S16_LE
206 #define LX_OSS_AFMT_U16_NE LX_OSS_AFMT_U16_LE
207 #elif defined(_BIG_ENDIAN)
208 #define LX_OSS_AFMT_S16_NE LX_OSS_AFMT_S16_BE
209 #define LX_OSS_AFMT_U16_NE LX_OSS_AFMT_U16_BE
210 #else /* _LITTLE_ENDIAN */
211 #error NO ENDIAN defined.
212 #endif /* _LITTLE_ENDIAN */
213
214 /*
215 * support for /dev/dsp SNDCTL_DSP_GETISPACE and SNDCTL_DSP_GETOSPACE
216 */
217 typedef struct lx_oss_audio_buf_info {
218 int fragments; /* fragments that can be rd/wr without blocking */
219 int fragstotal; /* total number of fragments allocated for buffering */
220 int fragsize; /* size of fragments, same as SNDCTL_DSP_GETBLKSIZE */
221 int bytes; /* what can be rd/wr immediatly without blocking */
222 } lx_oss_audio_buf_info_t;
223
224 /*
225 * support for /dev/dsp SNDCTL_DSP_GETOPTR
226 */
227 typedef struct lx_oss_count_info {
228 /* # of bytes processed since opening the device */
229 int bytes;
230
231 /*
232 * # of fragment transitions since last call to this function.
233 * only valid for mmap acess mode.
234 */
235 int blocks;
236
237 /*
238 * byte offset of the current recording/playback position from
239 * the beginning of the audio buffer. only valid for mmap access
240 * mode.
241 */
242 int ptr;
243 } lx_oss_count_info_t;
244
245 /*
246 * support for /dev/dsp SNDCTL_DSP_GETCAPS
247 */
248 #define LX_OSS_DSP_CAP_TRIGGER 0x1000
249 #define LX_OSS_DSP_CAP_MMAP 0x2000
250
251 /*
252 * support for /dev/dsp/ SNDCTL_DSP_SETTRIGGER
253 */
254 #define LX_OSS_PCM_DISABLE_OUTPUT 0
255 #define LX_OSS_PCM_ENABLE_OUTPUT 2
256
257 /*
258 * /dev/mixer ioctl macros
259 */
260 #define LX_OSS_SM_NRDEVICES 25
261 #define LX_OSS_SM_READ(x) (0x80044d00 | (x))
262 #define LX_OSS_SM_WRITE(x) (0xc0044d00 | (x))
263
264 /*
265 * /dev/mixer ioctls - supported
266 */
267 #define LX_OSS_SOUND_MIXER_READ_VOLUME LX_OSS_SM_READ(LX_OSS_SM_VOLUME)
268 #define LX_OSS_SOUND_MIXER_READ_PCM LX_OSS_SM_READ(LX_OSS_SM_PCM)
269 #define LX_OSS_SOUND_MIXER_READ_MIC LX_OSS_SM_READ(LX_OSS_SM_MIC)
270 #define LX_OSS_SOUND_MIXER_READ_IGAIN LX_OSS_SM_READ(LX_OSS_SM_IGAIN)
271 #define LX_OSS_SOUND_MIXER_WRITE_VOLUME LX_OSS_SM_WRITE(LX_OSS_SM_VOLUME)
272 #define LX_OSS_SOUND_MIXER_WRITE_PCM LX_OSS_SM_WRITE(LX_OSS_SM_PCM)
273 #define LX_OSS_SOUND_MIXER_WRITE_MIC LX_OSS_SM_WRITE(LX_OSS_SM_MIC)
274 #define LX_OSS_SOUND_MIXER_WRITE_IGAIN LX_OSS_SM_WRITE(LX_OSS_SM_IGAIN)
275 #define LX_OSS_SOUND_MIXER_READ_STEREODEVS LX_OSS_SM_READ(LX_OSS_SM_STEREODEVS)
276 #define LX_OSS_SOUND_MIXER_READ_RECMASK LX_OSS_SM_READ(LX_OSS_SM_RECMASK)
277 #define LX_OSS_SOUND_MIXER_READ_DEVMASK LX_OSS_SM_READ(LX_OSS_SM_DEVMASK)
278 #define LX_OSS_SOUND_MIXER_READ_RECSRC LX_OSS_SM_READ(LX_OSS_SM_RECSRC)
279
280 /*
281 * /dev/mixer channels
282 */
283 #define LX_OSS_SM_VOLUME 0
284 #define LX_OSS_SM_BASS 1
285 #define LX_OSS_SM_TREBLE 2
286 #define LX_OSS_SM_SYNTH 3
287 #define LX_OSS_SM_PCM 4
288 #define LX_OSS_SM_SPEAKER 5
289 #define LX_OSS_SM_LINE 6
290 #define LX_OSS_SM_MIC 7
291 #define LX_OSS_SM_CD 8
292 #define LX_OSS_SM_MIX 9
293 #define LX_OSS_SM_PCM2 10
294 #define LX_OSS_SM_REC 11
295 #define LX_OSS_SM_IGAIN 12
296 #define LX_OSS_SM_OGAIN 13
297 #define LX_OSS_SM_LINE1 14
298 #define LX_OSS_SM_LINE2 15
299 #define LX_OSS_SM_LINE3 16
300 #define LX_OSS_SM_DIGITAL1 17
301 #define LX_OSS_SM_DIGITAL2 18
302 #define LX_OSS_SM_DIGITAL3 19
303 #define LX_OSS_SM_PHONEIN 20
304 #define LX_OSS_SM_PHONEOUT 21
305 #define LX_OSS_SM_VIDEO 22
306 #define LX_OSS_SM_RADIO 23
307 #define LX_OSS_SM_MONITOR 24
308
309 /*
310 * /dev/mixer operations
311 */
312 #define LX_OSS_SM_STEREODEVS 251
313 #define LX_OSS_SM_CAPS 252
314 #define LX_OSS_SM_RECMASK 253
315 #define LX_OSS_SM_DEVMASK 254
316 #define LX_OSS_SM_RECSRC 255
317
318 /*
319 * /dev/mixer value conversion macros
320 *
321 * solaris expects gain level on a scale of 0 - 255
322 * oss expects gain level on a scale of 0 - 100
323 *
324 * oss also encodes multiple channels volume values in a single int,
325 * one channel value per byte.
326 */
327 #define LX_OSS_S2L_GAIN(v) (((v) * 100) / 255)
328 #define LX_OSS_L2S_GAIN(v) (((v) * 255) / 100)
329 #define LX_OSS_MIXER_DEC1(v) ((v) & 0xff)
330 #define LX_OSS_MIXER_DEC2(v) (((v) >> 8) & 0xff)
331 #define LX_OSS_MIXER_ENC2(v1, v2) (((v2) << 8) | (v1))
332
333 /*
334 * /dev/mixer value verification macros
335 */
336 #define LX_OSS_MIXER_VCHECK(x) (((int)(x) >= 0) && ((int)(x) <= 100))
337 #define LX_OSS_MIXER_1CH_OK(x) ((((x) & ~0xff) == 0) && \
338 LX_OSS_MIXER_VCHECK(LX_OSS_MIXER_DEC1(x)))
339 #define LX_OSS_MIXER_2CH_OK(x) ((((x) & ~0xffff) == 0) && \
340 LX_OSS_MIXER_VCHECK(LX_OSS_MIXER_DEC1(x)) && \
341 LX_OSS_MIXER_VCHECK(LX_OSS_MIXER_DEC2(x)))
342
343 /*
344 * Unsupported ioctls (NOT a comprehensive list)
345 */
346 #define LX_TIOCLINUX 0x541c
347 #define LX_TIOCCONS 0x541d
348 #define LX_TIOCGSERIAL 0x541e
349 #define LX_TIOCSSERIAL 0x541f
350 #define LX_TIOCTTYGSTRUCT 0x5426
351 #define LX_TIOCSERCONFIG 0x5453
352 #define LX_TIOCSERGWILD 0x5454
353 #define LX_TIOCSERSWILD 0x5455
354 #define LX_TIOCGLCKTRMIOS 0x5456
355 #define LX_TIOCSLCKTRMIOS 0x5457
356 #define LX_TIOCSERGSTRUCT 0x5458
357 #define LX_TIOCSERGETLSR 0x5459
358 #define LX_TIOCSERGETMULTI 0x545a
359 #define LX_TIOCSERSETMULTI 0x545b
360 #define LX_OLD_SIOCGIFHWADDR 0x8923
361 #define LX_SIOCSIFENCAP 0x8926
362 #define LX_SIOCGIFSLAVE 0x8929
363 #define LX_SIOCSIFSLAVE 0x8930
364 #define LX_SIOCADDMULTI 0x8931
365 #define LX_SIOCDELMULTI 0x8932
366 #define LX_SIOCADDRTOLD 0x8940
367 #define LX_SIOCDELRTOLD 0x8941
368 #define LX_SIOCGIFTXQLEN 0x8942
369 #define LX_SIOCDARP 0x8950
370 #define LX_SIOCGARP 0x8951
371 #define LX_SIOCSARP 0x8952
372 #define LX_SIOCDRARP 0x8960
373 #define LX_SIOCGRARP 0x8961
374 #define LX_SIOCSRARP 0x8962
375 #define LX_SIOCGIFMAP 0x8970
376 #define LX_SIOCSIFMAP 0x8971
377
378 #ifdef __cplusplus
379 }
380 #endif
381
382 #endif /* _SYS_LX_IOCTL_H */