17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5d29f5a71Szhigang lu - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
6d29f5a71Szhigang lu - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22e272e4c8SBinzi Cao - Sun Microsystems - Beijing China  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef _SYS_USB_AUDIO_H
287c478bd9Sstevel@tonic-gate #define	_SYS_USB_AUDIO_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #ifdef __cplusplus
327c478bd9Sstevel@tonic-gate extern "C" {
337c478bd9Sstevel@tonic-gate #endif
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate /*
367c478bd9Sstevel@tonic-gate  * macros from audio spec 1.0
377c478bd9Sstevel@tonic-gate  *
387c478bd9Sstevel@tonic-gate  * audio class-specific descriptor types (Appendix A.4)
397c478bd9Sstevel@tonic-gate  */
407c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CS_DEVICE		0x21
417c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CS_CONFIGURATION	0x22
427c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CS_STRING		0x23
437c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CS_INTERFACE		0x24
447c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CS_ENDPOINT		0x25
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate /* audio class-specific AC Interface Descriptor Subtypes (A.5) */
477c478bd9Sstevel@tonic-gate #define	USB_AUDIO_HEADER		0x01
487c478bd9Sstevel@tonic-gate #define	USB_AUDIO_INPUT_TERMINAL	0x02
497c478bd9Sstevel@tonic-gate #define	USB_AUDIO_OUTPUT_TERMINAL	0x03
507c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MIXER_UNIT		0x04
517c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SELECTOR_UNIT		0x05
527c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FEATURE_UNIT		0x06
537c478bd9Sstevel@tonic-gate #define	USB_AUDIO_PROCESSING_UNIT	0x07
547c478bd9Sstevel@tonic-gate #define	USB_AUDIO_EXTENSION_UNIT	0x08
557c478bd9Sstevel@tonic-gate 
567c478bd9Sstevel@tonic-gate /* audio class-specific AS Interface descriptor Subtypes (A.6) */
577c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AS_GENERAL		0x01
587c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AS_FORMAT_TYPE	0x02
597c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AS_FORMAT_SPECIFIC	0x03
607c478bd9Sstevel@tonic-gate 
617c478bd9Sstevel@tonic-gate /* Processing Uniti Process Types (A.7) */
627c478bd9Sstevel@tonic-gate #define	USB_AUDIO_UP_DOWNMIX_PROCESS		0x01
637c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DOLBY_PROLOGIC_PROCESS	0x02
647c478bd9Sstevel@tonic-gate #define	USB_AUDIO_3D_STEREO_EXTENDER_PROCESS	0x03
657c478bd9Sstevel@tonic-gate #define	USB_AUDIO_REVERBERATION_PROCESS		0x04
667c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CHORUS_PROCESS		0x05
677c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DYN_RANGE_COMP_PROCESS	0x06
687c478bd9Sstevel@tonic-gate 
697c478bd9Sstevel@tonic-gate /* Audio Class-specific endpoint descriptor Subtypes (A.8) */
707c478bd9Sstevel@tonic-gate #define	USB_AUDIO_EP_GENERAL		0x07
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate /* Audio Class-specific Request Codes */
737c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SET_CUR		0x01
747c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_CUR		0x81
757c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SET_MIN		0x02
767c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_MIN		0x82
777c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SET_MAX		0x03
787c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_MAX		0x83
797c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SET_RES		0x04
807c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_RES		0x84
817c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SET_MEM		0x05
827c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_MEM		0x85
837c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GET_STAT		0xff
847c478bd9Sstevel@tonic-gate 
857c478bd9Sstevel@tonic-gate /* Terminal Control Selectors (A.10.1) */
867c478bd9Sstevel@tonic-gate #define	USB_AUDIO_COPY_PROTECT_CONTROL	0x01
877c478bd9Sstevel@tonic-gate 
887c478bd9Sstevel@tonic-gate /* Feature Unit Control Selectors (A.1.10.2) */
897c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MUTE_CONTROL		0x01
907c478bd9Sstevel@tonic-gate #define	USB_AUDIO_VOLUME_CONTROL	0x02
917c478bd9Sstevel@tonic-gate #define	USB_AUDIO_BASS_CONTROL		0x03
927c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MID_CONTROL		0x04
937c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TREBLE_CONTROL	0x05
947c478bd9Sstevel@tonic-gate #define	USB_AUDIO_GRAPHIC_CONTROL	0x06
957c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AUTOMATIC_GAIN_CONTROL 0x07
967c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DELAY_CONTROL		0x08
977c478bd9Sstevel@tonic-gate #define	USB_AUDIO_BASS_BOOST_CONTROL	0x09
987c478bd9Sstevel@tonic-gate #define	USB_AUDIO_LOUDNESS_CONTROL	0x0A
997c478bd9Sstevel@tonic-gate 
1007c478bd9Sstevel@tonic-gate /* the spec defines volume control value of 0x8000 as silence */
1017c478bd9Sstevel@tonic-gate #define	USB_AUDIO_VOLUME_SILENCE	0x8000
1027c478bd9Sstevel@tonic-gate 
1037c478bd9Sstevel@tonic-gate /* Up/Down-mix Processing Unit Control Selectors (A.10.3.1) */
1047c478bd9Sstevel@tonic-gate #define	USB_AUDIO_UD_ENABLE_CONTROL	0x01
1057c478bd9Sstevel@tonic-gate #define	USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02
1067c478bd9Sstevel@tonic-gate 
1077c478bd9Sstevel@tonic-gate /* Dolby Prologic Processing Unit Control Selectors (A.10.3.2) */
1087c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DP_ENABLE_CONTROL	0x01
1097c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DP_MODE_SELECT_CONTROL 0x02
1107c478bd9Sstevel@tonic-gate 
1117c478bd9Sstevel@tonic-gate /* Reverberation Processing Unit Control Selectors (A.10.3.3) */
1127c478bd9Sstevel@tonic-gate #define	USB_AUDIO_RV_ENABLE_CONTROL	0x01
1137c478bd9Sstevel@tonic-gate #define	USB_AUDIO_REVERB_LEVEL_CONTROL	0x02
1147c478bd9Sstevel@tonic-gate #define	USB_AUDIO_REVERB_TIME_CONTROL	0x03
1157c478bd9Sstevel@tonic-gate #define	USB_AUDIO_REVERB_FEEDBACK_CONTROL 0x04
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate /* Chorus Processing Unit Control Selectors (A.10.3.5) */
1187c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CH_ENABLE_CONTROL	0x01
1197c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CHORUS_LEVEL_CONTROL	0x02
1207c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CHORUS_RATE_CONTROL	0x03
1217c478bd9Sstevel@tonic-gate #define	USB_AUDIO_CHORUS_DEPTH_CONTROL	0x04
1227c478bd9Sstevel@tonic-gate 
1237c478bd9Sstevel@tonic-gate /* Dynamic range compressor Processing Unit Control Selectors (A.10.3.6) */
1247c478bd9Sstevel@tonic-gate #define	USB_AUDIO_DR_ENABLE_CONTROL	0x01
1257c478bd9Sstevel@tonic-gate #define	USB_AUDIO_COMPRESSION_RATE_CONTROL 0x02
1267c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MAXAMPL_CONTROL	0x03
1277c478bd9Sstevel@tonic-gate #define	USB_AUDIO_THRESHOLD_CONTROL	0x04
1287c478bd9Sstevel@tonic-gate #define	USB_AUDIO_ATTACK_TIME		0x05
1297c478bd9Sstevel@tonic-gate #define	USB_AUDIO_RELEASE_TIME		0x06
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate /* Extension Unit Control Selectors (A.10.4) */
1327c478bd9Sstevel@tonic-gate #define	USB_AUDIO_XU_ENABLE_CONTROL	0x01
1337c478bd9Sstevel@tonic-gate 
1347c478bd9Sstevel@tonic-gate /* Endpoint Control Selectors (A.10.5) */
1357c478bd9Sstevel@tonic-gate #define	USB_AUDIO_SAMPLING_FREQ_CONTROL	0x01
1367c478bd9Sstevel@tonic-gate #define	USB_AUDIO_PITCH_CONTROL		0x02
1377c478bd9Sstevel@tonic-gate 
1387c478bd9Sstevel@tonic-gate /* descriptors */
1397c478bd9Sstevel@tonic-gate /* Class specific AC interface header descriptor (4.3.2) */
1407c478bd9Sstevel@tonic-gate typedef struct usb_audio_cs_if_descr {
1417c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
1427c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
1437c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* HEADER */
1447c478bd9Sstevel@tonic-gate 	uint16_t bcdADC;	/* release # */
1457c478bd9Sstevel@tonic-gate 	uint16_t wTotalLength;	/* the whole wad */
1467c478bd9Sstevel@tonic-gate 	uint8_t blnCollection;	/* # interfaces */
1477c478bd9Sstevel@tonic-gate 	uint8_t baInterfaceNr[1]; /* interface # */
1487c478bd9Sstevel@tonic-gate } usb_audio_cs_if_descr_t;
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate #define	CS_AC_IF_HEADER_FORMAT "cccsscc"
1514610e4a0Sfrits #define	CS_AC_IF_HEADER_SIZE 9
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate /* input terminal descriptor (4.3.2.1) */
1547c478bd9Sstevel@tonic-gate typedef struct usb_audio_input_term_descr {
1557c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
1567c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
1577c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* INPUT_TERMINAL */
1587c478bd9Sstevel@tonic-gate 	uint8_t bTerminalID;	/* unique identifier */
1597c478bd9Sstevel@tonic-gate 	uint16_t wTerminalType;	/* type of terminal */
1607c478bd9Sstevel@tonic-gate 	uint8_t bAssocTerminal; /* identifier */
1617c478bd9Sstevel@tonic-gate 	uint8_t bNrChannels;	/* # channels */
1627c478bd9Sstevel@tonic-gate 	uint16_t wChannelConfig; /* logical channel loc */
1637c478bd9Sstevel@tonic-gate 	uint8_t iChannelNames;	/* string index */
1647c478bd9Sstevel@tonic-gate 	uint8_t iTerminal;	/* terminal string index */
1657c478bd9Sstevel@tonic-gate } usb_audio_input_term_descr_t;
1667c478bd9Sstevel@tonic-gate 
1677c478bd9Sstevel@tonic-gate #define	CS_AC_INPUT_TERM_FORMAT "ccccsccscc"
1687c478bd9Sstevel@tonic-gate #define	CS_AC_INPUT_TERM_SIZE 12
1697c478bd9Sstevel@tonic-gate 
1707c478bd9Sstevel@tonic-gate /* output terminal descriptor (4.3.2.2) */
1717c478bd9Sstevel@tonic-gate typedef struct usb_audio_output_term_descr {
1727c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
1737c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
1747c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* OUTPUT_TERMINAL */
1757c478bd9Sstevel@tonic-gate 	uint8_t bTerminalID;	/* unique identifier */
1767c478bd9Sstevel@tonic-gate 	uint16_t wTerminalType;	/* type of terminal */
1777c478bd9Sstevel@tonic-gate 	uint8_t bAssocTerminal; /* identifier */
1787c478bd9Sstevel@tonic-gate 	uint8_t bSourceID;	/* identifier */
1797c478bd9Sstevel@tonic-gate 	uint8_t iTerminal;	/* terminal string index */
1807c478bd9Sstevel@tonic-gate } usb_audio_output_term_descr_t;
1817c478bd9Sstevel@tonic-gate 
1827c478bd9Sstevel@tonic-gate #define	CS_AC_OUTPUT_TERM_FORMAT "ccccsccc"
1837c478bd9Sstevel@tonic-gate #define	CS_AC_OUTPUT_TERM_SIZE 9
1847c478bd9Sstevel@tonic-gate 
1857c478bd9Sstevel@tonic-gate /*
1867c478bd9Sstevel@tonic-gate  * mixer unit descriptor (4.3.2.3)
1877c478bd9Sstevel@tonic-gate  * this is awkward descriptors because of the variable size array in
1887c478bd9Sstevel@tonic-gate  * the middle (baSourceID).
1897c478bd9Sstevel@tonic-gate  */
1907c478bd9Sstevel@tonic-gate typedef struct usb_audio_mixer_unit_descr1 {
1917c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
1927c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
1937c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* MIXER_UNIT */
1947c478bd9Sstevel@tonic-gate 	uint8_t bUnitID;	/* identifier */
1957c478bd9Sstevel@tonic-gate 	uint8_t bNrInPins;	/* # input pins */
1967c478bd9Sstevel@tonic-gate 	uint8_t baSourceID[1];	/* idenfifiers */
1977c478bd9Sstevel@tonic-gate } usb_audio_mixer_unit_descr1_t;
1987c478bd9Sstevel@tonic-gate 
1997c478bd9Sstevel@tonic-gate #define	CS_AC_MIXER_UNIT_DESCR1_FORMAT "cccccc"
2007c478bd9Sstevel@tonic-gate #define	CS_AC_MIXER_UNIT_DESCR1_SIZE 6
2017c478bd9Sstevel@tonic-gate 
2027c478bd9Sstevel@tonic-gate typedef struct usb_audio_mixer_unit_descr2 {
2037c478bd9Sstevel@tonic-gate 	uint8_t bNrChannels;	/* # channels */
2047c478bd9Sstevel@tonic-gate 	uint16_t wChannelConfig; /* location of channels */
2057c478bd9Sstevel@tonic-gate 	uint8_t iChannelNames;	/* string index */
2067c478bd9Sstevel@tonic-gate 	uint8_t	bmControls[1];	/* bitmap prog. ctlrs */
2077c478bd9Sstevel@tonic-gate } usb_audio_mixer_unit_descr2_t;
2087c478bd9Sstevel@tonic-gate 
2097c478bd9Sstevel@tonic-gate typedef struct usb_audio_mixer_unit_descr3 {
2107c478bd9Sstevel@tonic-gate 	uint8_t iMixer;	/* string index */
2117c478bd9Sstevel@tonic-gate } usb_audio_mixer_unit_descr3_t;
2127c478bd9Sstevel@tonic-gate 
2137c478bd9Sstevel@tonic-gate /* selector unit descriptor (4.3.2.4) */
2147c478bd9Sstevel@tonic-gate typedef struct usb_audio_selector_unit_descr1 {
2157c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
2167c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
2177c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* SELECTOR_UNIT */
2187c478bd9Sstevel@tonic-gate 	uint8_t bUnitID;	/* identifier */
2197c478bd9Sstevel@tonic-gate 	uint8_t bNrInPins;	/* input pins on the unit */
2207c478bd9Sstevel@tonic-gate 	uint8_t baSourceID[1];	/* ID of pins */
2217c478bd9Sstevel@tonic-gate } usb_audio_selector_unit_descr1_t;
2227c478bd9Sstevel@tonic-gate 
2237c478bd9Sstevel@tonic-gate #define	CS_AC_SELECTOR_UNIT_DESCR1_FORMAT "cccccc"
2247c478bd9Sstevel@tonic-gate #define	CS_AC_SELECTOR_UNIT_DESCR1_SIZE 6
2257c478bd9Sstevel@tonic-gate 
2267c478bd9Sstevel@tonic-gate typedef struct usb_audio_selector_unit_descr2 {
2277c478bd9Sstevel@tonic-gate 	uint8_t iSelector[1];	/* string index */
2287c478bd9Sstevel@tonic-gate } usb_audio_selector_unit_descr2_t;
2297c478bd9Sstevel@tonic-gate 
2307c478bd9Sstevel@tonic-gate /* feature unit descriptor (4.3.2.5) */
2317c478bd9Sstevel@tonic-gate typedef struct usb_audio_feature_unit_descr1 {
2327c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
2337c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
2347c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* FEATURE_UNIT */
2357c478bd9Sstevel@tonic-gate 	uint8_t bUnitID;	/* identifier */
2367c478bd9Sstevel@tonic-gate 	uint8_t bSourceID;	/* identifier */
2377c478bd9Sstevel@tonic-gate 	uint8_t bControlSize;	/* size of bmaControls */
2387c478bd9Sstevel@tonic-gate 	uint8_t bmaControls[1];	/* bitmap of features */
2397c478bd9Sstevel@tonic-gate } usb_audio_feature_unit_descr1_t;
2407c478bd9Sstevel@tonic-gate 
2417c478bd9Sstevel@tonic-gate #define	CS_AC_FEATURE_UNIT_FORMAT	"ccccccc"
2427c478bd9Sstevel@tonic-gate #define	CS_AC_FEATURE_UNIT_SIZE		7
2437c478bd9Sstevel@tonic-gate 
2447c478bd9Sstevel@tonic-gate typedef struct usb_audio_feature_unit_descr2 {
2457c478bd9Sstevel@tonic-gate 	uint8_t iFeature;	/* string index */
2467c478bd9Sstevel@tonic-gate } usb_audio_feature_unit_descr2_t;
2477c478bd9Sstevel@tonic-gate 
2487c478bd9Sstevel@tonic-gate /* processing unit descriptor (4.3.2.6) */
2497c478bd9Sstevel@tonic-gate typedef struct usb_audio_processing_unit_descr1 {
2507c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
2517c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
2527c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* PROCESSING_UNIT */
2537c478bd9Sstevel@tonic-gate 	uint8_t bUnitID;	/* identifier */
2547c478bd9Sstevel@tonic-gate 	uint8_t	wProcessType;	/* type of processing */
2557c478bd9Sstevel@tonic-gate 	uint8_t bNrInPins;	/* input pins on the unit */
2567c478bd9Sstevel@tonic-gate 	uint8_t baSourceID[1];	/* ID of pins */
2577c478bd9Sstevel@tonic-gate } usb_audio_processing_unit_descr1_t;
2587c478bd9Sstevel@tonic-gate 
2594610e4a0Sfrits #define	CS_AC_PROCESSING_UNIT_DESCR1_FORMAT	"ccccccc"
2604610e4a0Sfrits #define	CS_AC_PROCESSING_UNIT_DESCR1_SIZE	7
2617c478bd9Sstevel@tonic-gate 
2627c478bd9Sstevel@tonic-gate typedef struct usb_audio_processing_unit_descr2 {
2637c478bd9Sstevel@tonic-gate 	uint8_t	bNrChannels;	/* # log. output channels */
2647c478bd9Sstevel@tonic-gate 	uint16_t wChannelConfig; /* spatial location */
2657c478bd9Sstevel@tonic-gate 	uint8_t iChannelnames;	/* index to name */
2667c478bd9Sstevel@tonic-gate 	uint8_t bControlSize;	/* size in bytes */
2677c478bd9Sstevel@tonic-gate 	uint8_t bmControls[1];	/* control bits */
2687c478bd9Sstevel@tonic-gate } usb_audio_processing_unit_descr2_t;
2697c478bd9Sstevel@tonic-gate 
2707c478bd9Sstevel@tonic-gate typedef struct usb_audio_processing_unit_descr3 {
2717c478bd9Sstevel@tonic-gate 	uint8_t iProcessing;	/* index to string descr */
2727c478bd9Sstevel@tonic-gate 	uint8_t Process_specific[1];
2737c478bd9Sstevel@tonic-gate } usb_audio_processing_unit_descr3_t;
2747c478bd9Sstevel@tonic-gate 
2757c478bd9Sstevel@tonic-gate /* extension unit descriptor (4.3.2.7) */
2767c478bd9Sstevel@tonic-gate typedef struct usb_audio_extension_unit_descr1 {
2777c478bd9Sstevel@tonic-gate 	uint8_t	bLength;	/* size */
2787c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
2797c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* PROCESSING_UNIT */
2807c478bd9Sstevel@tonic-gate 	uint8_t wExtensionCode; /* vendor spec. */
2817c478bd9Sstevel@tonic-gate 	uint8_t bUnitID;	/* identifier */
2827c478bd9Sstevel@tonic-gate 	uint8_t bNrInPins;	/* input pins on the unit */
2837c478bd9Sstevel@tonic-gate 	uint8_t baSourceID[1];	/* ID of pins */
2847c478bd9Sstevel@tonic-gate } usb_audio_extension_unit_descr1_t;
2857c478bd9Sstevel@tonic-gate 
2864610e4a0Sfrits #define	CS_AC_EXTENSION_UNIT_DESCR1_FORMAT	"ccccccc"
2874610e4a0Sfrits #define	CS_AC_EXTENSION_UNIT_DESCR1_SIZE	7
2887c478bd9Sstevel@tonic-gate 
2897c478bd9Sstevel@tonic-gate typedef struct usb_audio_extension_unit_descr2 {
2907c478bd9Sstevel@tonic-gate 	uint8_t	bNrChannels;	/* # log. output channels */
2917c478bd9Sstevel@tonic-gate 	uint16_t wChannelConfig; /* spatial location */
2927c478bd9Sstevel@tonic-gate 	uint8_t iChannelnames;	/* index to name */
2937c478bd9Sstevel@tonic-gate 	uint8_t bControlSize;	/* size in bytes */
2947c478bd9Sstevel@tonic-gate 	uint8_t bmControls[1];	/* control bits */
2957c478bd9Sstevel@tonic-gate } usb_audio_extension_unit_descr2_t;
2967c478bd9Sstevel@tonic-gate 
2977c478bd9Sstevel@tonic-gate typedef struct usb_audio_extension_unit_descr3 {
2987c478bd9Sstevel@tonic-gate 	uint8_t iExtension;	/* index to string descr */
2997c478bd9Sstevel@tonic-gate } usb_audio_extension_unit_descr3_t;
3007c478bd9Sstevel@tonic-gate 
3017c478bd9Sstevel@tonic-gate 
3027c478bd9Sstevel@tonic-gate 
3037c478bd9Sstevel@tonic-gate /* associated interface descriptor (4.3.2.8) */
3047c478bd9Sstevel@tonic-gate typedef struct usb_audio_associated_if_descr {
3057c478bd9Sstevel@tonic-gate 	uint8_t	blength;	/* size */
3067c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
3077c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* ASSOC Interface */
3087c478bd9Sstevel@tonic-gate 	uint8_t bInterfaceNr;	/* interface number */
3097c478bd9Sstevel@tonic-gate } usb_audio_associated_if_descr_t;
3107c478bd9Sstevel@tonic-gate 
3117c478bd9Sstevel@tonic-gate 
3127c478bd9Sstevel@tonic-gate /*
3137c478bd9Sstevel@tonic-gate  * class specific AS interface descriptor (4.5.2)
3147c478bd9Sstevel@tonic-gate  */
3157c478bd9Sstevel@tonic-gate typedef struct usb_audio_as_if_descr {
3167c478bd9Sstevel@tonic-gate 	uint8_t	blength;	/* size */
3177c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
3187c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* AS_GENERAL */
3197c478bd9Sstevel@tonic-gate 	uint8_t bTerminalLink;	/* identifier */
3207c478bd9Sstevel@tonic-gate 	uint8_t bDelay;		/* delay in data path */
3217c478bd9Sstevel@tonic-gate 	uint16_t wFormatTag;	/* data format */
3227c478bd9Sstevel@tonic-gate } usb_audio_as_if_descr_t;
3237c478bd9Sstevel@tonic-gate 
3247c478bd9Sstevel@tonic-gate #define	AS_IF_DESCR_FORMAT	"cccccs"
3254610e4a0Sfrits #define	AS_IF_DESCR_SIZE	7
3267c478bd9Sstevel@tonic-gate 
3277c478bd9Sstevel@tonic-gate 
3287c478bd9Sstevel@tonic-gate /* class specific AS isochronous audio data ep descr (4.6.1.2) */
3297c478bd9Sstevel@tonic-gate typedef struct usb_audio_as_isoc_ep_descr {
3307c478bd9Sstevel@tonic-gate 	uint8_t	blength;	/* size */
3317c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_ENDPOINT */
3327c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* EP_GENERAL */
3337c478bd9Sstevel@tonic-gate 	uint8_t bmAttributes;	/* bitmap of attributes */
3347c478bd9Sstevel@tonic-gate 	uint8_t bLockDelayUnits; /* type of units */
3354610e4a0Sfrits 	uint16_t wLockDelay;	/* lock of internal clock */
3367c478bd9Sstevel@tonic-gate } usb_audio_as_isoc_ep_descr_t;
3377c478bd9Sstevel@tonic-gate 
3384610e4a0Sfrits #define	AS_ISOC_EP_DESCR_FORMAT "5cs"
3394610e4a0Sfrits #define	AS_ISOC_EP_DESCR_SIZE 7
3407c478bd9Sstevel@tonic-gate 
3417c478bd9Sstevel@tonic-gate /*
3427c478bd9Sstevel@tonic-gate  * data format descriptor, no need for parse format since
3437c478bd9Sstevel@tonic-gate  * all fields are chars
3447c478bd9Sstevel@tonic-gate  */
3457c478bd9Sstevel@tonic-gate typedef struct usb_audio_type1_format_descr {
3467c478bd9Sstevel@tonic-gate 	uint8_t	blength;	/* size */
3477c478bd9Sstevel@tonic-gate 	uint8_t	bDescriptorType; /* CS_INTERFACE */
3487c478bd9Sstevel@tonic-gate 	uint8_t bDescriptorSubType; /* FORMAT_TYPE */
3497c478bd9Sstevel@tonic-gate 	uint8_t	bFormatType;	/* FORMAT_TYPE_1 */
3507c478bd9Sstevel@tonic-gate 	uint8_t bNrChannels;	/* #phys channels */
3517c478bd9Sstevel@tonic-gate 	uint8_t bSubFrameSize;	/* bytes per frame */
3527c478bd9Sstevel@tonic-gate 	uint8_t bBitResolution;	/* bits in subframe */
3537c478bd9Sstevel@tonic-gate 	uint8_t bSamFreqType;	/* sampling freq type */
3547c478bd9Sstevel@tonic-gate 	uint8_t bSamFreqs[6];	/* sampling freqs */
3557c478bd9Sstevel@tonic-gate } usb_audio_type1_format_descr_t;
3567c478bd9Sstevel@tonic-gate 
3574610e4a0Sfrits #define	AUDIO_TYPE1_FORMAT_FORMAT "10c"
3587c478bd9Sstevel@tonic-gate #define	AUDIO_TYPE1_FORMAT_SIZE	10
3597c478bd9Sstevel@tonic-gate 
3607c478bd9Sstevel@tonic-gate /* audio data format codes */
3617c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE1_PCM		0x0001
3627c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE1_PCM8		0x0002
3637c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE1_IEEE_FLOAT	0x0003
3647c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE1_ALAW		0x0004
3657c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE1_MULAW		0x0005
3667c478bd9Sstevel@tonic-gate 
3677c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE2_MPEG		0x1001
3687c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE2_AC		0x1002
3697c478bd9Sstevel@tonic-gate 
3707c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_AC_3	0x2001
3717c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG1_L1	0x2002
3727c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG1_L2	0x2003
3737c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG2_NOEXT 0x2003
3747c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG2_EXT 0x2004
3757c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG2_L1_LS 0x2005
3767c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE3_IEC1937_MPEG2_L2_LS 0x2006
3777c478bd9Sstevel@tonic-gate 
3787c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE_1			0x01
3797c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE_2			0x02
3807c478bd9Sstevel@tonic-gate #define	USB_AUDIO_FORMAT_TYPE_3			0x03
3817c478bd9Sstevel@tonic-gate 
3827c478bd9Sstevel@tonic-gate /* format specific control selectors */
3837c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_DUAL_CHANNEL_CONTROL	0x01
3847c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_SECOND_STEREO_CONTROL	0x02
3857c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_MULTILINGUAL		0x03
3867c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_DYN_RANGE_CONTROL		0x04
3877c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_SCALING_CONTROL		0x05
3887c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MP_HILO_SCALING_CONTROL	0x06
3897c478bd9Sstevel@tonic-gate 
3907c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AC_MODE_CONTROL		0x01
3917c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AC_DYN_RANGE_CONTROL		0x02
3927c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AC_SCALING_CONTROL		0x03
3937c478bd9Sstevel@tonic-gate #define	USB_AUDIO_AC_HILO_SCALING_CONTROL	0x04
3947c478bd9Sstevel@tonic-gate 
3957c478bd9Sstevel@tonic-gate /* From USB Device Class Definition for Terminal Types */
3967c478bd9Sstevel@tonic-gate /* USB Terminal Types (2.1) */
3977c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_STREAMING		0x0101
3987c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_VS			0x01ff
3997c478bd9Sstevel@tonic-gate 
4007c478bd9Sstevel@tonic-gate /* Input term types (2.2) */
4017c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_MICROPHONE		0x0201
4027c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DT_MICROPHONE	0x0202
4037c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_PERS_MICROPHONE	0x0203
4047c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_OMNI_DIR_MICROPHONE	0x0204
4057c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_MICROPHONE_ARRAY	0x0205
4067c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_PROCESSING_MIC_ARRAY 0x0206
4077c478bd9Sstevel@tonic-gate 
4087c478bd9Sstevel@tonic-gate /* output term types (2.3) */
4097c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_SPEAKER		0x0301
4107c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_HEADPHONES		0x0302
4117c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DISPLAY_AUDIO	0x0303
4127c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DT_SPEAKER		0x0304
4137c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_ROOM_SPEAKER	0x0305
4147c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_COMM_SPEAKER	0x0306
4157c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_LF_EFFECTS_SPEAKER	0x0307
4167c478bd9Sstevel@tonic-gate 
4177c478bd9Sstevel@tonic-gate /* bi-directional terminal types (2.4) */
4187c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_HANDSET		0x0401
4197c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_HEADSET		0x0402
4207c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_SPEAKERPHONE	0x0403
4217c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_ECHO_SUPP_SPEAKERPHONE 0x0404
4227c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_ECHO_CANCEL_SPEAKERPHONE 0x0405
4237c478bd9Sstevel@tonic-gate 
4247c478bd9Sstevel@tonic-gate /* telephony terminal types (2.5) */
4257c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_PHONE_LINE		0x0501
4267c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_TELEPHONE		0x0502
4277c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DOWN_LINE_PHONE	0x0503
4287c478bd9Sstevel@tonic-gate 
4297c478bd9Sstevel@tonic-gate /* external terminal types (2.6) */
4307c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_ANALOG_CONNECTOR	0x0601
4317c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DIGITAL_AUDIO_IF	0x0602
4327c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_LINE_CONNECTOR	0x0603
4337c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_LEGACY_AUDIO_CONNECTOR 0x0604
4347c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_SPDIF_IF		0x0605
4357c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_1394_DA_STREAM	0x0606
4367c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_1394_DV_STREAM_SNDTRCK 0x0607
4377c478bd9Sstevel@tonic-gate 
4387c478bd9Sstevel@tonic-gate /* embedded function term types (2.7) */
4397c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_LVL_CAL_NOISE_SRC	0x0701
4407c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_EQUAL_NOISE		0x0702
4417c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_CD_PLAYER		0x0703
4427c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DAT			0x0704
4437c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DCC			0x0705
4447c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_MINIDISK		0x0706
4457c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_ANALOG_TAPE		0x0707
4467c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_PHONOGRAPH		0x0708
4477c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_VCR_AUDIO		0x0709
4487c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_VIDEO_DISK_AUDIO	0x070A
4497c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_DVD_AUDIO		0x070B
4507c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_TV_TUNER_AUDIO	0x070C
4517c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_SATELLITE_RCV_AUDIO	0x070D
4527c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_CABLE_TUNER_AUDIO	0x070E
4537c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_CABLE_DSS_AUDIO	0x070F
4547c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_RADIO_RECEIVER	0x0710
4557c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_RADIO_TRANSMITTER	0x0711
4567c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_MULTI_TRACK_RECORDER 0x0712
4577c478bd9Sstevel@tonic-gate #define	USB_AUDIO_TERM_TYPE_SYNTHESIZER		0x0713
4587c478bd9Sstevel@tonic-gate 
4597c478bd9Sstevel@tonic-gate #define	PRINT_MASK_ATTA		0x00000001
4607c478bd9Sstevel@tonic-gate #define	PRINT_MASK_CLOSE	0x00000002
4617c478bd9Sstevel@tonic-gate #define	PRINT_MASK_OPEN		0x00000004
4627c478bd9Sstevel@tonic-gate #define	PRINT_MASK_EVENTS	0x00000008
4637c478bd9Sstevel@tonic-gate #define	PRINT_MASK_PM		0x00000010
4647c478bd9Sstevel@tonic-gate #define	PRINT_MASK_CB		0x00000020
4657c478bd9Sstevel@tonic-gate #define	PRINT_MASK_ALL		0xFFFFFFFF
4667c478bd9Sstevel@tonic-gate 
4677c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MIN_PKTSZ	0
4687c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MAX_PKTSZ	(4 * 1024)
4697c478bd9Sstevel@tonic-gate 
4707c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MUTE_ON	1
4717c478bd9Sstevel@tonic-gate #define	USB_AUDIO_MUTE_OFF	0
4727c478bd9Sstevel@tonic-gate 
473e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	USB_AUDIO_PRECISION_8	8
474e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	USB_AUDIO_PRECISION_16	16
475*64391892SAlbert Lee #define	USB_AUDIO_PRECISION_24	24
476*64391892SAlbert Lee #define	USB_AUDIO_PRECISION_32	32
477e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
478e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	USB_AUDIO_PLAY		0x0001
479e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	USB_AUDIO_RECORD	0x0002
480e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
4817c478bd9Sstevel@tonic-gate #ifdef __cplusplus
4827c478bd9Sstevel@tonic-gate }
4837c478bd9Sstevel@tonic-gate #endif
4847c478bd9Sstevel@tonic-gate 
4857c478bd9Sstevel@tonic-gate #endif	/* _SYS_USB_AUDIO_H */
486