uaudioreg.h revision 192984
1184610Salfred/* $NetBSD: uaudioreg.h,v 1.12 2004/11/05 19:08:29 kent Exp $ */ 2184610Salfred/* $FreeBSD: head/sys/dev/sound/usb/uaudioreg.h 192984 2009-05-28 17:36:36Z thompsa $ */ 3184610Salfred 4184610Salfred/*- 5184610Salfred * Copyright (c) 1999 The NetBSD Foundation, Inc. 6184610Salfred * All rights reserved. 7184610Salfred * 8184610Salfred * This code is derived from software contributed to The NetBSD Foundation 9184610Salfred * by Lennart Augustsson (lennart@augustsson.net) at 10184610Salfred * Carlstedt Research & Technology. 11184610Salfred * 12184610Salfred * Redistribution and use in source and binary forms, with or without 13184610Salfred * modification, are permitted provided that the following conditions 14184610Salfred * are met: 15184610Salfred * 1. Redistributions of source code must retain the above copyright 16184610Salfred * notice, this list of conditions and the following disclaimer. 17184610Salfred * 2. Redistributions in binary form must reproduce the above copyright 18184610Salfred * notice, this list of conditions and the following disclaimer in the 19184610Salfred * documentation and/or other materials provided with the distribution. 20184610Salfred * 21184610Salfred * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22184610Salfred * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23184610Salfred * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24184610Salfred * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25184610Salfred * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26184610Salfred * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27184610Salfred * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28184610Salfred * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29184610Salfred * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30184610Salfred * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31184610Salfred * POSSIBILITY OF SUCH DAMAGE. 32184610Salfred */ 33184610Salfred 34184610Salfred#define UAUDIO_VERSION 0x100 35184610Salfred 36184610Salfred#define UDESC_CS_CONFIG 0x22 37184610Salfred#define UDESC_CS_STRING 0x23 38184610Salfred#define UDESC_CS_INTERFACE 0x24 39184610Salfred#define UDESC_CS_ENDPOINT 0x25 40184610Salfred 41184610Salfred#define UDESCSUB_AC_HEADER 1 42184610Salfred#define UDESCSUB_AC_INPUT 2 43184610Salfred#define UDESCSUB_AC_OUTPUT 3 44184610Salfred#define UDESCSUB_AC_MIXER 4 45184610Salfred#define UDESCSUB_AC_SELECTOR 5 46184610Salfred#define UDESCSUB_AC_FEATURE 6 47184610Salfred#define UDESCSUB_AC_PROCESSING 7 48184610Salfred#define UDESCSUB_AC_EXTENSION 8 49184610Salfred 50192984Sthompsa/* The first fields are identical to struct usb_endpoint_descriptor */ 51184610Salfredtypedef struct { 52184610Salfred uByte bLength; 53184610Salfred uByte bDescriptorType; 54184610Salfred uByte bEndpointAddress; 55184610Salfred uByte bmAttributes; 56184610Salfred uWord wMaxPacketSize; 57184610Salfred uByte bInterval; 58184610Salfred /* 59184610Salfred * The following two entries are only used by the Audio Class. 60184610Salfred * And according to the specs the Audio Class is the only one 61184610Salfred * allowed to extend the endpoint descriptor. 62184610Salfred * Who knows what goes on in the minds of the people in the USB 63184610Salfred * standardization? :-( 64184610Salfred */ 65184610Salfred uByte bRefresh; 66184610Salfred uByte bSynchAddress; 67184610Salfred} __packed usb2_endpoint_descriptor_audio_t; 68184610Salfred 69184610Salfredstruct usb2_audio_control_descriptor { 70184610Salfred uByte bLength; 71184610Salfred uByte bDescriptorType; 72184610Salfred uByte bDescriptorSubtype; 73184610Salfred uWord bcdADC; 74184610Salfred uWord wTotalLength; 75184610Salfred uByte bInCollection; 76184610Salfred uByte baInterfaceNr[1]; 77184610Salfred} __packed; 78184610Salfred 79184610Salfredstruct usb2_audio_streaming_interface_descriptor { 80184610Salfred uByte bLength; 81184610Salfred uByte bDescriptorType; 82184610Salfred uByte bDescriptorSubtype; 83184610Salfred uByte bTerminalLink; 84184610Salfred uByte bDelay; 85184610Salfred uWord wFormatTag; 86184610Salfred} __packed; 87184610Salfred 88184610Salfredstruct usb2_audio_streaming_endpoint_descriptor { 89184610Salfred uByte bLength; 90184610Salfred uByte bDescriptorType; 91184610Salfred uByte bDescriptorSubtype; 92184610Salfred uByte bmAttributes; 93184610Salfred#define UA_SED_FREQ_CONTROL 0x01 94184610Salfred#define UA_SED_PITCH_CONTROL 0x02 95184610Salfred#define UA_SED_MAXPACKETSONLY 0x80 96184610Salfred uByte bLockDelayUnits; 97184610Salfred uWord wLockDelay; 98184610Salfred} __packed; 99184610Salfred 100184610Salfredstruct usb2_audio_streaming_type1_descriptor { 101184610Salfred uByte bLength; 102184610Salfred uByte bDescriptorType; 103184610Salfred uByte bDescriptorSubtype; 104184610Salfred uByte bFormatType; 105184610Salfred uByte bNrChannels; 106184610Salfred uByte bSubFrameSize; 107184610Salfred uByte bBitResolution; 108184610Salfred uByte bSamFreqType; 109184610Salfred#define UA_SAMP_CONTNUOUS 0 110184610Salfred uByte tSamFreq[0]; 111184610Salfred#define UA_GETSAMP(p, n) (((p)->tSamFreq[((n)*3)+0]) | \ 112184610Salfred ((p)->tSamFreq[((n)*3)+1] << 8) | \ 113184610Salfred ((p)->tSamFreq[((n)*3)+2] << 16)) 114184610Salfred#define UA_SAMP_LO(p) UA_GETSAMP(p, 0) 115184610Salfred#define UA_SAMP_HI(p) UA_GETSAMP(p, 1) 116184610Salfred} __packed; 117184610Salfred 118184610Salfredstruct usb2_audio_cluster { 119184610Salfred uByte bNrChannels; 120184610Salfred uWord wChannelConfig; 121184610Salfred#define UA_CHANNEL_LEFT 0x0001 122184610Salfred#define UA_CHANNEL_RIGHT 0x0002 123184610Salfred#define UA_CHANNEL_CENTER 0x0004 124184610Salfred#define UA_CHANNEL_LFE 0x0008 125184610Salfred#define UA_CHANNEL_L_SURROUND 0x0010 126184610Salfred#define UA_CHANNEL_R_SURROUND 0x0020 127184610Salfred#define UA_CHANNEL_L_CENTER 0x0040 128184610Salfred#define UA_CHANNEL_R_CENTER 0x0080 129184610Salfred#define UA_CHANNEL_SURROUND 0x0100 130184610Salfred#define UA_CHANNEL_L_SIDE 0x0200 131184610Salfred#define UA_CHANNEL_R_SIDE 0x0400 132184610Salfred#define UA_CHANNEL_TOP 0x0800 133184610Salfred uByte iChannelNames; 134184610Salfred} __packed; 135184610Salfred 136184610Salfred/* Shared by all units and terminals */ 137184610Salfredstruct usb2_audio_unit { 138184610Salfred uByte bLength; 139184610Salfred uByte bDescriptorType; 140184610Salfred uByte bDescriptorSubtype; 141184610Salfred uByte bUnitId; 142184610Salfred}; 143184610Salfred 144184610Salfred/* UDESCSUB_AC_INPUT */ 145184610Salfredstruct usb2_audio_input_terminal { 146184610Salfred uByte bLength; 147184610Salfred uByte bDescriptorType; 148184610Salfred uByte bDescriptorSubtype; 149184610Salfred uByte bTerminalId; 150184610Salfred uWord wTerminalType; 151184610Salfred uByte bAssocTerminal; 152184610Salfred uByte bNrChannels; 153184610Salfred uWord wChannelConfig; 154184610Salfred uByte iChannelNames; 155184610Salfred/* uByte iTerminal; */ 156184610Salfred} __packed; 157184610Salfred 158184610Salfred/* UDESCSUB_AC_OUTPUT */ 159184610Salfredstruct usb2_audio_output_terminal { 160184610Salfred uByte bLength; 161184610Salfred uByte bDescriptorType; 162184610Salfred uByte bDescriptorSubtype; 163184610Salfred uByte bTerminalId; 164184610Salfred uWord wTerminalType; 165184610Salfred uByte bAssocTerminal; 166184610Salfred uByte bSourceId; 167184610Salfred uByte iTerminal; 168184610Salfred} __packed; 169184610Salfred 170184610Salfred/* UDESCSUB_AC_MIXER */ 171184610Salfredstruct usb2_audio_mixer_unit_0 { 172184610Salfred uByte bLength; 173184610Salfred uByte bDescriptorType; 174184610Salfred uByte bDescriptorSubtype; 175184610Salfred uByte bUnitId; 176184610Salfred uByte bNrInPins; 177184610Salfred uByte baSourceId[0]; /* [bNrInPins] */ 178184610Salfred /* struct usb2_audio_mixer_unit_1 */ 179184610Salfred} __packed; 180184610Salfredstruct usb2_audio_mixer_unit_1 { 181184610Salfred uByte bNrChannels; 182184610Salfred uWord wChannelConfig; 183184610Salfred uByte iChannelNames; 184184610Salfred uByte bmControls[0]; /* [see source code] */ 185184610Salfred /* uByte iMixer; */ 186184610Salfred} __packed; 187184610Salfred 188184610Salfred/* UDESCSUB_AC_SELECTOR */ 189184610Salfredstruct usb2_audio_selector_unit { 190184610Salfred uByte bLength; 191184610Salfred uByte bDescriptorType; 192184610Salfred uByte bDescriptorSubtype; 193184610Salfred uByte bUnitId; 194184610Salfred uByte bNrInPins; 195184610Salfred uByte baSourceId[0]; /* [bNrInPins] */ 196184610Salfred /* uByte iSelector; */ 197184610Salfred} __packed; 198184610Salfred 199184610Salfred/* UDESCSUB_AC_FEATURE */ 200184610Salfredstruct usb2_audio_feature_unit { 201184610Salfred uByte bLength; 202184610Salfred uByte bDescriptorType; 203184610Salfred uByte bDescriptorSubtype; 204184610Salfred uByte bUnitId; 205184610Salfred uByte bSourceId; 206184610Salfred uByte bControlSize; 207184610Salfred uByte bmaControls[0]; /* [bControlSize * x] */ 208184610Salfred /* uByte iFeature; */ 209184610Salfred} __packed; 210184610Salfred 211184610Salfred/* UDESCSUB_AC_PROCESSING */ 212184610Salfredstruct usb2_audio_processing_unit_0 { 213184610Salfred uByte bLength; 214184610Salfred uByte bDescriptorType; 215184610Salfred uByte bDescriptorSubtype; 216184610Salfred uByte bUnitId; 217184610Salfred uWord wProcessType; 218184610Salfred uByte bNrInPins; 219184610Salfred uByte baSourceId[0]; /* [bNrInPins] */ 220184610Salfred /* struct usb2_audio_processing_unit_1 */ 221184610Salfred} __packed; 222184610Salfredstruct usb2_audio_processing_unit_1 { 223184610Salfred uByte bNrChannels; 224184610Salfred uWord wChannelConfig; 225184610Salfred uByte iChannelNames; 226184610Salfred uByte bControlSize; 227184610Salfred uByte bmControls[0]; /* [bControlSize] */ 228184610Salfred#define UA_PROC_ENABLE_MASK 1 229184610Salfred} __packed; 230184610Salfred 231184610Salfredstruct usb2_audio_processing_unit_updown { 232184610Salfred uByte iProcessing; 233184610Salfred uByte bNrModes; 234184610Salfred uWord waModes[0]; /* [bNrModes] */ 235184610Salfred} __packed; 236184610Salfred 237184610Salfred/* UDESCSUB_AC_EXTENSION */ 238184610Salfredstruct usb2_audio_extension_unit_0 { 239184610Salfred uByte bLength; 240184610Salfred uByte bDescriptorType; 241184610Salfred uByte bDescriptorSubtype; 242184610Salfred uByte bUnitId; 243184610Salfred uWord wExtensionCode; 244184610Salfred uByte bNrInPins; 245184610Salfred uByte baSourceId[0]; /* [bNrInPins] */ 246184610Salfred /* struct usb2_audio_extension_unit_1 */ 247184610Salfred} __packed; 248184610Salfredstruct usb2_audio_extension_unit_1 { 249184610Salfred uByte bNrChannels; 250184610Salfred uWord wChannelConfig; 251184610Salfred uByte iChannelNames; 252184610Salfred uByte bControlSize; 253184610Salfred uByte bmControls[0]; /* [bControlSize] */ 254184610Salfred#define UA_EXT_ENABLE_MASK 1 255184610Salfred#define UA_EXT_ENABLE 1 256184610Salfred /* uByte iExtension; */ 257184610Salfred} __packed; 258184610Salfred 259184610Salfred/* USB terminal types */ 260184610Salfred#define UAT_UNDEFINED 0x0100 261184610Salfred#define UAT_STREAM 0x0101 262184610Salfred#define UAT_VENDOR 0x01ff 263184610Salfred/* input terminal types */ 264184610Salfred#define UATI_UNDEFINED 0x0200 265184610Salfred#define UATI_MICROPHONE 0x0201 266184610Salfred#define UATI_DESKMICROPHONE 0x0202 267184610Salfred#define UATI_PERSONALMICROPHONE 0x0203 268184610Salfred#define UATI_OMNIMICROPHONE 0x0204 269184610Salfred#define UATI_MICROPHONEARRAY 0x0205 270184610Salfred#define UATI_PROCMICROPHONEARR 0x0206 271184610Salfred/* output terminal types */ 272184610Salfred#define UATO_UNDEFINED 0x0300 273184610Salfred#define UATO_SPEAKER 0x0301 274184610Salfred#define UATO_HEADPHONES 0x0302 275184610Salfred#define UATO_DISPLAYAUDIO 0x0303 276184610Salfred#define UATO_DESKTOPSPEAKER 0x0304 277184610Salfred#define UATO_ROOMSPEAKER 0x0305 278184610Salfred#define UATO_COMMSPEAKER 0x0306 279184610Salfred#define UATO_SUBWOOFER 0x0307 280184610Salfred/* bidir terminal types */ 281184610Salfred#define UATB_UNDEFINED 0x0400 282184610Salfred#define UATB_HANDSET 0x0401 283184610Salfred#define UATB_HEADSET 0x0402 284184610Salfred#define UATB_SPEAKERPHONE 0x0403 285184610Salfred#define UATB_SPEAKERPHONEESUP 0x0404 286184610Salfred#define UATB_SPEAKERPHONEECANC 0x0405 287184610Salfred/* telephony terminal types */ 288184610Salfred#define UATT_UNDEFINED 0x0500 289184610Salfred#define UATT_PHONELINE 0x0501 290184610Salfred#define UATT_TELEPHONE 0x0502 291184610Salfred#define UATT_DOWNLINEPHONE 0x0503 292184610Salfred/* external terminal types */ 293184610Salfred#define UATE_UNDEFINED 0x0600 294184610Salfred#define UATE_ANALOGCONN 0x0601 295184610Salfred#define UATE_DIGITALAUIFC 0x0602 296184610Salfred#define UATE_LINECONN 0x0603 297184610Salfred#define UATE_LEGACYCONN 0x0604 298184610Salfred#define UATE_SPDIF 0x0605 299184610Salfred#define UATE_1394DA 0x0606 300184610Salfred#define UATE_1394DV 0x0607 301184610Salfred/* embedded function terminal types */ 302184610Salfred#define UATF_UNDEFINED 0x0700 303184610Salfred#define UATF_CALIBNOISE 0x0701 304184610Salfred#define UATF_EQUNOISE 0x0702 305184610Salfred#define UATF_CDPLAYER 0x0703 306184610Salfred#define UATF_DAT 0x0704 307184610Salfred#define UATF_DCC 0x0705 308184610Salfred#define UATF_MINIDISK 0x0706 309184610Salfred#define UATF_ANALOGTAPE 0x0707 310184610Salfred#define UATF_PHONOGRAPH 0x0708 311184610Salfred#define UATF_VCRAUDIO 0x0709 312184610Salfred#define UATF_VIDEODISCAUDIO 0x070a 313184610Salfred#define UATF_DVDAUDIO 0x070b 314184610Salfred#define UATF_TVTUNERAUDIO 0x070c 315184610Salfred#define UATF_SATELLITE 0x070d 316184610Salfred#define UATF_CABLETUNER 0x070e 317184610Salfred#define UATF_DSS 0x070f 318184610Salfred#define UATF_RADIORECV 0x0710 319184610Salfred#define UATF_RADIOXMIT 0x0711 320184610Salfred#define UATF_MULTITRACK 0x0712 321184610Salfred#define UATF_SYNTHESIZER 0x0713 322184610Salfred 323184610Salfred 324184610Salfred#define SET_CUR 0x01 325184610Salfred#define GET_CUR 0x81 326184610Salfred#define SET_MIN 0x02 327184610Salfred#define GET_MIN 0x82 328184610Salfred#define SET_MAX 0x03 329184610Salfred#define GET_MAX 0x83 330184610Salfred#define SET_RES 0x04 331184610Salfred#define GET_RES 0x84 332184610Salfred#define SET_MEM 0x05 333184610Salfred#define GET_MEM 0x85 334184610Salfred#define GET_STAT 0xff 335184610Salfred 336184610Salfred#define MUTE_CONTROL 0x01 337184610Salfred#define VOLUME_CONTROL 0x02 338184610Salfred#define BASS_CONTROL 0x03 339184610Salfred#define MID_CONTROL 0x04 340184610Salfred#define TREBLE_CONTROL 0x05 341184610Salfred#define GRAPHIC_EQUALIZER_CONTROL 0x06 342184610Salfred#define AGC_CONTROL 0x07 343184610Salfred#define DELAY_CONTROL 0x08 344184610Salfred#define BASS_BOOST_CONTROL 0x09 345184610Salfred#define LOUDNESS_CONTROL 0x0a 346184610Salfred 347184610Salfred#define FU_MASK(u) (1 << ((u)-1)) 348184610Salfred 349184610Salfred#define MASTER_CHAN 0 350184610Salfred 351184610Salfred#define AS_GENERAL 1 352184610Salfred#define FORMAT_TYPE 2 353184610Salfred#define FORMAT_SPECIFIC 3 354184610Salfred 355184610Salfred#define UA_FMT_PCM 1 356184610Salfred#define UA_FMT_PCM8 2 357184610Salfred#define UA_FMT_IEEE_FLOAT 3 358184610Salfred#define UA_FMT_ALAW 4 359184610Salfred#define UA_FMT_MULAW 5 360184610Salfred#define UA_FMT_MPEG 0x1001 361184610Salfred#define UA_FMT_AC3 0x1002 362184610Salfred 363184610Salfred#define SAMPLING_FREQ_CONTROL 0x01 364184610Salfred#define PITCH_CONTROL 0x02 365184610Salfred 366184610Salfred#define FORMAT_TYPE_UNDEFINED 0 367184610Salfred#define FORMAT_TYPE_I 1 368184610Salfred#define FORMAT_TYPE_II 2 369184610Salfred#define FORMAT_TYPE_III 3 370184610Salfred 371184610Salfred#define UA_PROC_MASK(n) (1<< ((n)-1)) 372184610Salfred#define PROCESS_UNDEFINED 0 373184610Salfred#define XX_ENABLE_CONTROL 1 374184610Salfred#define UPDOWNMIX_PROCESS 1 375184610Salfred#define UD_ENABLE_CONTROL 1 376184610Salfred#define UD_MODE_SELECT_CONTROL 2 377184610Salfred#define DOLBY_PROLOGIC_PROCESS 2 378184610Salfred#define DP_ENABLE_CONTROL 1 379184610Salfred#define DP_MODE_SELECT_CONTROL 2 380184610Salfred#define P3D_STEREO_EXTENDER_PROCESS 3 381184610Salfred#define P3D_ENABLE_CONTROL 1 382184610Salfred#define P3D_SPACIOUSNESS_CONTROL 2 383184610Salfred#define REVERBATION_PROCESS 4 384184610Salfred#define RV_ENABLE_CONTROL 1 385184610Salfred#define RV_LEVEL_CONTROL 2 386184610Salfred#define RV_TIME_CONTROL 3 387184610Salfred#define RV_FEEDBACK_CONTROL 4 388184610Salfred#define CHORUS_PROCESS 5 389184610Salfred#define CH_ENABLE_CONTROL 1 390184610Salfred#define CH_LEVEL_CONTROL 2 391184610Salfred#define CH_RATE_CONTROL 3 392184610Salfred#define CH_DEPTH_CONTROL 4 393184610Salfred#define DYN_RANGE_COMP_PROCESS 6 394184610Salfred#define DR_ENABLE_CONTROL 1 395184610Salfred#define DR_COMPRESSION_RATE_CONTROL 2 396184610Salfred#define DR_MAXAMPL_CONTROL 3 397184610Salfred#define DR_THRESHOLD_CONTROL 4 398184610Salfred#define DR_ATTACK_TIME_CONTROL 5 399184610Salfred#define DR_RELEASE_TIME_CONTROL 6 400