Annotation of sys/dev/usb/uaudioreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: uaudioreg.h,v 1.12 2007/06/09 11:06:53 mbalmer Exp $ */
2: /* $NetBSD: uaudioreg.h,v 1.11 2002/10/23 02:32:37 christos Exp $ */
3:
4: /*
5: * Copyright (c) 1999 The NetBSD Foundation, Inc.
6: * All rights reserved.
7: *
8: * This code is derived from software contributed to The NetBSD Foundation
9: * by Lennart Augustsson (lennart@augustsson.net) at
10: * Carlstedt Research & Technology.
11: *
12: * Redistribution and use in source and binary forms, with or without
13: * modification, are permitted provided that the following conditions
14: * are met:
15: * 1. Redistributions of source code must retain the above copyright
16: * notice, this list of conditions and the following disclaimer.
17: * 2. Redistributions in binary form must reproduce the above copyright
18: * notice, this list of conditions and the following disclaimer in the
19: * documentation and/or other materials provided with the distribution.
20: * 3. All advertising materials mentioning features or use of this software
21: * must display the following acknowledgement:
22: * This product includes software developed by the NetBSD
23: * Foundation, Inc. and its contributors.
24: * 4. Neither the name of The NetBSD Foundation nor the names of its
25: * contributors may be used to endorse or promote products derived
26: * from this software without specific prior written permission.
27: *
28: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
29: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
30: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
32: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38: * POSSIBILITY OF SUCH DAMAGE.
39: */
40:
41: #define UAUDIO_VERSION 0x100
42:
43: #define UDESC_CS_CONFIG 0x22
44: #define UDESC_CS_STRING 0x23
45: #define UDESC_CS_INTERFACE 0x24
46: #define UDESC_CS_ENDPOINT 0x25
47:
48: #define UDESCSUB_AC_HEADER 1
49: #define UDESCSUB_AC_INPUT 2
50: #define UDESCSUB_AC_OUTPUT 3
51: #define UDESCSUB_AC_MIXER 4
52: #define UDESCSUB_AC_SELECTOR 5
53: #define UDESCSUB_AC_FEATURE 6
54: #define UDESCSUB_AC_PROCESSING 7
55: #define UDESCSUB_AC_EXTENSION 8
56:
57: /* The first fields are identical to usb_endpoint_descriptor_t */
58: typedef struct {
59: uByte bLength;
60: uByte bDescriptorType;
61: uByte bEndpointAddress;
62: uByte bmAttributes;
63: uWord wMaxPacketSize;
64: uByte bInterval;
65: /*
66: * The following two entries are only used by the Audio Class.
67: * And according to the specs the Audio Class is the only one
68: * allowed to extend the endpoint descriptor.
69: * Who knows what goes on in the minds of the people in the USB
70: * standardization? :-(
71: */
72: uByte bRefresh;
73: uByte bSynchAddress;
74: } __packed usb_endpoint_descriptor_audio_t;
75:
76: struct usb_audio_control_descriptor {
77: uByte bLength;
78: uByte bDescriptorType;
79: uByte bDescriptorSubtype;
80: uWord bcdADC;
81: uWord wTotalLength;
82: uByte bInCollection;
83: uByte baInterfaceNr[1];
84: } __packed;
85:
86: struct usb_audio_streaming_interface_descriptor {
87: uByte bLength;
88: uByte bDescriptorType;
89: uByte bDescriptorSubtype;
90: uByte bTerminalLink;
91: uByte bDelay;
92: uWord wFormatTag;
93: } __packed;
94:
95: struct usb_audio_streaming_endpoint_descriptor {
96: uByte bLength;
97: uByte bDescriptorType;
98: uByte bDescriptorSubtype;
99: uByte bmAttributes;
100: #define UA_SED_FREQ_CONTROL 0x01
101: #define UA_SED_PITCH_CONTROL 0x02
102: #define UA_SED_MAXPACKETSONLY 0x80
103: uByte bLockDelayUnits;
104: uWord wLockDelay;
105: } __packed;
106:
107: struct usb_audio_streaming_type1_descriptor {
108: uByte bLength;
109: uByte bDescriptorType;
110: uByte bDescriptorSubtype;
111: uByte bFormatType;
112: uByte bNrChannels;
113: uByte bSubFrameSize;
114: uByte bBitResolution;
115: uByte bSamFreqType;
116: #define UA_SAMP_CONTNUOUS 0
117: uByte tSamFreq[3*2]; /* room for low and high */
118: #define UA_GETSAMP(p, n) ((p)->tSamFreq[(n)*3+0] | ((p)->tSamFreq[(n)*3+1] << 8) | ((p)->tSamFreq[(n)*3+2] << 16))
119: #define UA_SAMP_LO(p) UA_GETSAMP(p, 0)
120: #define UA_SAMP_HI(p) UA_GETSAMP(p, 1)
121: } __packed;
122:
123: struct usb_audio_cluster {
124: uByte bNrChannels;
125: uWord wChannelConfig;
126: uByte iChannelNames;
127: } __packed;
128:
129: /* Shared by all units and terminals */
130: struct usb_audio_unit {
131: uByte bLength;
132: uByte bDescriptorType;
133: uByte bDescriptorSubtype;
134: uByte bUnitId;
135: };
136:
137: /* UDESCSUB_AC_INPUT */
138: struct usb_audio_input_terminal {
139: uByte bLength;
140: uByte bDescriptorType;
141: uByte bDescriptorSubtype;
142: uByte bTerminalId;
143: uWord wTerminalType;
144: uByte bAssocTerminal;
145: uByte bNrChannels;
146: uWord wChannelConfig;
147: uByte iChannelNames;
148: uByte iTerminal;
149: } __packed;
150:
151: /* UDESCSUB_AC_OUTPUT */
152: struct usb_audio_output_terminal {
153: uByte bLength;
154: uByte bDescriptorType;
155: uByte bDescriptorSubtype;
156: uByte bTerminalId;
157: uWord wTerminalType;
158: uByte bAssocTerminal;
159: uByte bSourceId;
160: uByte iTerminal;
161: } __packed;
162:
163: /* UDESCSUB_AC_MIXER */
164: struct usb_audio_mixer_unit {
165: uByte bLength;
166: uByte bDescriptorType;
167: uByte bDescriptorSubtype;
168: uByte bUnitId;
169: uByte bNrInPins;
170: uByte baSourceId[255]; /* [bNrInPins] */
171: /* struct usb_audio_mixer_unit_1 */
172: } __packed;
173: struct usb_audio_mixer_unit_1 {
174: uByte bNrChannels;
175: uWord wChannelConfig;
176: uByte iChannelNames;
177: uByte bmControls[255]; /* [bNrChannels] */
178: /*uByte iMixer;*/
179: } __packed;
180:
181: /* UDESCSUB_AC_SELECTOR */
182: struct usb_audio_selector_unit {
183: uByte bLength;
184: uByte bDescriptorType;
185: uByte bDescriptorSubtype;
186: uByte bUnitId;
187: uByte bNrInPins;
188: uByte baSourceId[255]; /* [bNrInPins] */
189: /* uByte iSelector; */
190: } __packed;
191:
192: /* UDESCSUB_AC_FEATURE */
193: struct usb_audio_feature_unit {
194: uByte bLength;
195: uByte bDescriptorType;
196: uByte bDescriptorSubtype;
197: uByte bUnitId;
198: uByte bSourceId;
199: uByte bControlSize;
200: uByte bmaControls[255]; /* size for more than enough */
201: /* uByte iFeature; */
202: } __packed;
203:
204: /* UDESCSUB_AC_PROCESSING */
205: struct usb_audio_processing_unit {
206: uByte bLength;
207: uByte bDescriptorType;
208: uByte bDescriptorSubtype;
209: uByte bUnitId;
210: uWord wProcessType;
211: uByte bNrInPins;
212: uByte baSourceId[255]; /* [bNrInPins] */
213: /* struct usb_audio_processing_unit_1 */
214: } __packed;
215: struct usb_audio_processing_unit_1{
216: uByte bNrChannels;
217: uWord wChannelConfig;
218: uByte iChannelNames;
219: uByte bControlSize;
220: uByte bmControls[255]; /* [bControlSize] */
221: #define UA_PROC_ENABLE_MASK 1
222: } __packed;
223:
224: struct usb_audio_processing_unit_updown {
225: uByte iProcessing;
226: uByte bNrModes;
227: uWord waModes[255]; /* [bNrModes] */
228: } __packed;
229:
230: /* UDESCSUB_AC_EXTENSION */
231: struct usb_audio_extension_unit {
232: uByte bLength;
233: uByte bDescriptorType;
234: uByte bDescriptorSubtype;
235: uByte bUnitId;
236: uWord wExtensionCode;
237: uByte bNrInPins;
238: uByte baSourceId[255]; /* [bNrInPins] */
239: /* struct usb_audio_extension_unit_1 */
240: } __packed;
241: struct usb_audio_extension_unit_1 {
242: uByte bNrChannels;
243: uWord wChannelConfig;
244: uByte iChannelNames;
245: uByte bControlSize;
246: uByte bmControls[255]; /* [bControlSize] */
247: #define UA_EXT_ENABLE_MASK 1
248: #define UA_EXT_ENABLE 1
249: /*uByte iExtension;*/
250: } __packed;
251:
252: /* USB terminal types */
253: #define UAT_UNDEFINED 0x0100
254: #define UAT_STREAM 0x0101
255: #define UAT_VENDOR 0x01ff
256: /* input terminal types */
257: #define UATI_UNDEFINED 0x0200
258: #define UATI_MICROPHONE 0x0201
259: #define UATI_DESKMICROPHONE 0x0202
260: #define UATI_PERSONALMICROPHONE 0x0203
261: #define UATI_OMNIMICROPHONE 0x0204
262: #define UATI_MICROPHONEARRAY 0x0205
263: #define UATI_PROCMICROPHONEARR 0x0206
264: /* output terminal types */
265: #define UATO_UNDEFINED 0x0300
266: #define UATO_SPEAKER 0x0301
267: #define UATO_HEADPHONES 0x0302
268: #define UATO_DISPLAYAUDIO 0x0303
269: #define UATO_DESKTOPSPEAKER 0x0304
270: #define UATO_ROOMSPEAKER 0x0305
271: #define UATO_COMMSPEAKER 0x0306
272: #define UATO_SUBWOOFER 0x0307
273: /* bidir terminal types */
274: #define UATB_UNDEFINED 0x0400
275: #define UATB_HANDSET 0x0401
276: #define UATB_HEADSET 0x0402
277: #define UATB_SPEAKERPHONE 0x0403
278: #define UATB_SPEAKERPHONEESUP 0x0404
279: #define UATB_SPEAKERPHONEECANC 0x0405
280: /* telephony terminal types */
281: #define UATT_UNDEFINED 0x0500
282: #define UATT_PHONELINE 0x0501
283: #define UATT_TELEPHONE 0x0502
284: #define UATT_DOWNLINEPHONE 0x0503
285: /* external terminal types */
286: #define UATE_UNDEFINED 0x0600
287: #define UATE_ANALOGCONN 0x0601
288: #define UATE_DIGITALAUIFC 0x0602
289: #define UATE_LINECONN 0x0603
290: #define UATE_LEGACYCONN 0x0604
291: #define UATE_SPDIF 0x0605
292: #define UATE_1394DA 0x0606
293: #define UATE_1394DV 0x0607
294: /* embedded function terminal types */
295: #define UATF_UNDEFINED 0x0700
296: #define UATF_CALIBNOISE 0x0701
297: #define UATF_EQUNOISE 0x0702
298: #define UATF_CDPLAYER 0x0703
299: #define UATF_DAT 0x0704
300: #define UATF_DCC 0x0705
301: #define UATF_MINIDISK 0x0706
302: #define UATF_ANALOGTAPE 0x0707
303: #define UATF_PHONOGRAPH 0x0708
304: #define UATF_VCRAUDIO 0x0709
305: #define UATF_VIDEODISCAUDIO 0x070a
306: #define UATF_DVDAUDIO 0x070b
307: #define UATF_TVTUNERAUDIO 0x070c
308: #define UATF_SATELLITE 0x070d
309: #define UATF_CABLETUNER 0x070e
310: #define UATF_DSS 0x070f
311: #define UATF_RADIORECV 0x0710
312: #define UATF_RADIOXMIT 0x0711
313: #define UATF_MULTITRACK 0x0712
314: #define UATF_SYNTHESIZER 0x0713
315:
316:
317: #define SET_CUR 0x01
318: #define GET_CUR 0x81
319: #define SET_MIN 0x02
320: #define GET_MIN 0x82
321: #define SET_MAX 0x03
322: #define GET_MAX 0x83
323: #define SET_RES 0x04
324: #define GET_RES 0x84
325: #define SET_MEM 0x05
326: #define GET_MEM 0x85
327: #define GET_STAT 0xff
328:
329: #define MUTE_CONTROL 0x01
330: #define VOLUME_CONTROL 0x02
331: #define BASS_CONTROL 0x03
332: #define MID_CONTROL 0x04
333: #define TREBLE_CONTROL 0x05
334: #define GRAPHIC_EQUALIZER_CONTROL 0x06
335: #define AGC_CONTROL 0x07
336: #define DELAY_CONTROL 0x08
337: #define BASS_BOOST_CONTROL 0x09
338: #define LOUDNESS_CONTROL 0x0a
339:
340: #define FU_MASK(u) (1 << ((u)-1))
341:
342: #define MASTER_CHAN 0
343:
344: #define AS_GENERAL 1
345: #define FORMAT_TYPE 2
346: #define FORMAT_SPECIFIC 3
347:
348: #define UA_FMT_PCM 1
349: #define UA_FMT_PCM8 2
350: #define UA_FMT_IEEE_FLOAT 3
351: #define UA_FMT_ALAW 4
352: #define UA_FMT_MULAW 5
353: #define UA_FMT_MPEG 0x1001
354: #define UA_FMT_AC3 0x1002
355:
356: #define SAMPLING_FREQ_CONTROL 0x01
357: #define PITCH_CONTROL 0x02
358:
359: #define FORMAT_TYPE_UNDEFINED 0
360: #define FORMAT_TYPE_I 1
361: #define FORMAT_TYPE_II 2
362: #define FORMAT_TYPE_III 3
363:
364: #define UA_PROC_MASK(n) (1<< ((n)-1))
365: #define PROCESS_UNDEFINED 0
366: #define XX_ENABLE_CONTROL 1
367: #define UPDOWNMIX_PROCESS 1
368: #define UD_ENABLE_CONTROL 1
369: #define UD_MODE_SELECT_CONTROL 2
370: #define DOLBY_PROLOGIC_PROCESS 2
371: #define DP_ENABLE_CONTROL 1
372: #define DP_MODE_SELECT_CONTROL 2
373: #define P3D_STEREO_EXTENDER_PROCESS 3
374: #define P3D_ENABLE_CONTROL 1
375: #define P3D_SPACIOUSNESS_CONTROL 2
376: #define REVERBATION_PROCESS 4
377: #define RV_ENABLE_CONTROL 1
378: #define RV_LEVEL_CONTROL 2
379: #define RV_TIME_CONTROL 3
380: #define RV_FEEDBACK_CONTROL 4
381: #define CHORUS_PROCESS 5
382: #define CH_ENABLE_CONTROL 1
383: #define CH_LEVEL_CONTROL 2
384: #define CH_RATE_CONTROL 3
385: #define CH_DEPTH_CONTROL 4
386: #define DYN_RANGE_COMP_PROCESS 6
387: #define DR_ENABLE_CONTROL 1
388: #define DR_COMPRESSION_RATE_CONTROL 2
389: #define DR_MAXAMPL_CONTROL 3
390: #define DR_THRESHOLD_CONTROL 4
391: #define DR_ATTACK_TIME_CONTROL 5
392: #define DR_RELEASE_TIME_CONTROL 6
CVSweb