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