1*53ee8cc1Swenshuai.xi #ifndef __LINUX_IXJUSER_H 2*53ee8cc1Swenshuai.xi #define __LINUX_IXJUSER_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi /****************************************************************************** 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * ixjuser.h 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * Device Driver for Quicknet Technologies, Inc.'s Telephony cards 9*53ee8cc1Swenshuai.xi * including the Internet PhoneJACK, Internet PhoneJACK Lite, 10*53ee8cc1Swenshuai.xi * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and 11*53ee8cc1Swenshuai.xi * SmartCABLE 12*53ee8cc1Swenshuai.xi * 13*53ee8cc1Swenshuai.xi * (c) Copyright 1999-2001 Quicknet Technologies, Inc. 14*53ee8cc1Swenshuai.xi * 15*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or 16*53ee8cc1Swenshuai.xi * modify it under the terms of the GNU General Public License 17*53ee8cc1Swenshuai.xi * as published by the Free Software Foundation; either version 18*53ee8cc1Swenshuai.xi * 2 of the License, or (at your option) any later version. 19*53ee8cc1Swenshuai.xi * 20*53ee8cc1Swenshuai.xi * Author: Ed Okerson, <eokerson@quicknet.net> 21*53ee8cc1Swenshuai.xi * 22*53ee8cc1Swenshuai.xi * Contributors: Greg Herlein, <gherlein@quicknet.net> 23*53ee8cc1Swenshuai.xi * David W. Erhart, <derhart@quicknet.net> 24*53ee8cc1Swenshuai.xi * John Sellers, <jsellers@quicknet.net> 25*53ee8cc1Swenshuai.xi * Mike Preston, <mpreston@quicknet.net> 26*53ee8cc1Swenshuai.xi * 27*53ee8cc1Swenshuai.xi * More information about the hardware related to this driver can be found 28*53ee8cc1Swenshuai.xi * at our website: http://www.quicknet.net 29*53ee8cc1Swenshuai.xi * 30*53ee8cc1Swenshuai.xi * Fixes: 31*53ee8cc1Swenshuai.xi * 32*53ee8cc1Swenshuai.xi * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR 33*53ee8cc1Swenshuai.xi * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT 34*53ee8cc1Swenshuai.xi * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET 35*53ee8cc1Swenshuai.xi * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36*53ee8cc1Swenshuai.xi * 37*53ee8cc1Swenshuai.xi * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES, 38*53ee8cc1Swenshuai.xi * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 39*53ee8cc1Swenshuai.xi * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 40*53ee8cc1Swenshuai.xi * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION 41*53ee8cc1Swenshuai.xi * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 42*53ee8cc1Swenshuai.xi * 43*53ee8cc1Swenshuai.xi *****************************************************************************/ 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xi #include <linux/telephony.h> 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi /****************************************************************************** 49*53ee8cc1Swenshuai.xi * 50*53ee8cc1Swenshuai.xi * IOCTL's used for the Quicknet Telephony Cards 51*53ee8cc1Swenshuai.xi * 52*53ee8cc1Swenshuai.xi * If you use the IXJCTL_TESTRAM command, the card must be power cycled to 53*53ee8cc1Swenshuai.xi * reset the SRAM values before futher use. 54*53ee8cc1Swenshuai.xi * 55*53ee8cc1Swenshuai.xi ******************************************************************************/ 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi #define IXJCTL_DSP_RESET _IO ('q', 0xC0) 58*53ee8cc1Swenshuai.xi 59*53ee8cc1Swenshuai.xi #define IXJCTL_RING PHONE_RING 60*53ee8cc1Swenshuai.xi #define IXJCTL_HOOKSTATE PHONE_HOOKSTATE 61*53ee8cc1Swenshuai.xi #define IXJCTL_MAXRINGS PHONE_MAXRINGS 62*53ee8cc1Swenshuai.xi #define IXJCTL_RING_CADENCE PHONE_RING_CADENCE 63*53ee8cc1Swenshuai.xi #define IXJCTL_RING_START PHONE_RING_START 64*53ee8cc1Swenshuai.xi #define IXJCTL_RING_STOP PHONE_RING_STOP 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi #define IXJCTL_CARDTYPE _IOR ('q', 0xC1, int) 67*53ee8cc1Swenshuai.xi #define IXJCTL_SERIAL _IOR ('q', 0xC2, int) 68*53ee8cc1Swenshuai.xi #define IXJCTL_DSP_TYPE _IOR ('q', 0xC3, int) 69*53ee8cc1Swenshuai.xi #define IXJCTL_DSP_VERSION _IOR ('q', 0xC4, int) 70*53ee8cc1Swenshuai.xi #define IXJCTL_VERSION _IOR ('q', 0xDA, char *) 71*53ee8cc1Swenshuai.xi #define IXJCTL_DSP_IDLE _IO ('q', 0xC5) 72*53ee8cc1Swenshuai.xi #define IXJCTL_TESTRAM _IO ('q', 0xC6) 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi /****************************************************************************** 75*53ee8cc1Swenshuai.xi * 76*53ee8cc1Swenshuai.xi * This group of IOCTLs deal with the record settings of the DSP 77*53ee8cc1Swenshuai.xi * 78*53ee8cc1Swenshuai.xi * The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP. 79*53ee8cc1Swenshuai.xi * Setting a lower depth reduces latency, but increases the demand of the 80*53ee8cc1Swenshuai.xi * application to service the driver without frame loss. The DSP has 480 81*53ee8cc1Swenshuai.xi * bytes of physical buffer memory for the record channel so the true 82*53ee8cc1Swenshuai.xi * maximum limit is determined by how many frames will fit in the buffer. 83*53ee8cc1Swenshuai.xi * 84*53ee8cc1Swenshuai.xi * 1 uncompressed (480 byte) 16-bit linear frame. 85*53ee8cc1Swenshuai.xi * 2 uncompressed (240 byte) 8-bit A-law/mu-law frames. 86*53ee8cc1Swenshuai.xi * 15 TrueSpeech 8.5 frames. 87*53ee8cc1Swenshuai.xi * 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames. 88*53ee8cc1Swenshuai.xi * 89*53ee8cc1Swenshuai.xi * The default in the driver is currently set to 2 frames. 90*53ee8cc1Swenshuai.xi * 91*53ee8cc1Swenshuai.xi * The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8 92*53ee8cc1Swenshuai.xi * number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the 93*53ee8cc1Swenshuai.xi * signal by 2.0, 0x80 scales the signal by 0.5. No protection is given 94*53ee8cc1Swenshuai.xi * against over-scaling, if the multiplication factor times the input 95*53ee8cc1Swenshuai.xi * signal exceeds 16 bits, overflow distortion will occur. The default 96*53ee8cc1Swenshuai.xi * setting is 0x100 (1.0). 97*53ee8cc1Swenshuai.xi * 98*53ee8cc1Swenshuai.xi * The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on 99*53ee8cc1Swenshuai.xi * the most recently recorded frame as a 16 bit value. 100*53ee8cc1Swenshuai.xi ******************************************************************************/ 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi #define IXJCTL_REC_CODEC PHONE_REC_CODEC 103*53ee8cc1Swenshuai.xi #define IXJCTL_REC_START PHONE_REC_START 104*53ee8cc1Swenshuai.xi #define IXJCTL_REC_STOP PHONE_REC_STOP 105*53ee8cc1Swenshuai.xi #define IXJCTL_REC_DEPTH PHONE_REC_DEPTH 106*53ee8cc1Swenshuai.xi #define IXJCTL_FRAME PHONE_FRAME 107*53ee8cc1Swenshuai.xi #define IXJCTL_REC_VOLUME PHONE_REC_VOLUME 108*53ee8cc1Swenshuai.xi #define IXJCTL_REC_LEVEL PHONE_REC_LEVEL 109*53ee8cc1Swenshuai.xi 110*53ee8cc1Swenshuai.xi typedef enum { 111*53ee8cc1Swenshuai.xi f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50, 112*53ee8cc1Swenshuai.xi f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400, 113*53ee8cc1Swenshuai.xi f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450, 114*53ee8cc1Swenshuai.xi f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450, 115*53ee8cc1Swenshuai.xi f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587, 116*53ee8cc1Swenshuai.xi f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850, 117*53ee8cc1Swenshuai.xi f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400, 118*53ee8cc1Swenshuai.xi f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336, 119*53ee8cc1Swenshuai.xi lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860 120*53ee8cc1Swenshuai.xi } IXJ_FILTER_FREQ; 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi typedef struct { 123*53ee8cc1Swenshuai.xi unsigned int filter; 124*53ee8cc1Swenshuai.xi IXJ_FILTER_FREQ freq; 125*53ee8cc1Swenshuai.xi char enable; 126*53ee8cc1Swenshuai.xi } IXJ_FILTER; 127*53ee8cc1Swenshuai.xi 128*53ee8cc1Swenshuai.xi typedef struct { 129*53ee8cc1Swenshuai.xi char enable; 130*53ee8cc1Swenshuai.xi char en_filter; 131*53ee8cc1Swenshuai.xi unsigned int filter; 132*53ee8cc1Swenshuai.xi unsigned int on1; 133*53ee8cc1Swenshuai.xi unsigned int off1; 134*53ee8cc1Swenshuai.xi unsigned int on2; 135*53ee8cc1Swenshuai.xi unsigned int off2; 136*53ee8cc1Swenshuai.xi unsigned int on3; 137*53ee8cc1Swenshuai.xi unsigned int off3; 138*53ee8cc1Swenshuai.xi } IXJ_FILTER_CADENCE; 139*53ee8cc1Swenshuai.xi 140*53ee8cc1Swenshuai.xi #define IXJCTL_SET_FILTER _IOW ('q', 0xC7, IXJ_FILTER *) 141*53ee8cc1Swenshuai.xi #define IXJCTL_SET_FILTER_RAW _IOW ('q', 0xDD, IXJ_FILTER_RAW *) 142*53ee8cc1Swenshuai.xi #define IXJCTL_GET_FILTER_HIST _IOW ('q', 0xC8, int) 143*53ee8cc1Swenshuai.xi #define IXJCTL_FILTER_CADENCE _IOW ('q', 0xD6, IXJ_FILTER_CADENCE *) 144*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_CID _IO ('q', 0xD7) 145*53ee8cc1Swenshuai.xi /****************************************************************************** 146*53ee8cc1Swenshuai.xi * 147*53ee8cc1Swenshuai.xi * This IOCTL allows you to reassign values in the tone index table. The 148*53ee8cc1Swenshuai.xi * tone table has 32 entries (0 - 31), but the driver only allows entries 149*53ee8cc1Swenshuai.xi * 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are 150*53ee8cc1Swenshuai.xi * the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D. 151*53ee8cc1Swenshuai.xi * The positions used internally for Call Progress Tones are as follows: 152*53ee8cc1Swenshuai.xi * Dial Tone - 25 153*53ee8cc1Swenshuai.xi * Ring Back - 26 154*53ee8cc1Swenshuai.xi * Busy Signal - 27 155*53ee8cc1Swenshuai.xi * 156*53ee8cc1Swenshuai.xi * The freq values are calculated as: 157*53ee8cc1Swenshuai.xi * freq = cos(2 * PI * frequency / 8000) 158*53ee8cc1Swenshuai.xi * 159*53ee8cc1Swenshuai.xi * The most commonly needed values are already calculated and listed in the 160*53ee8cc1Swenshuai.xi * enum IXJ_TONE_FREQ. Each tone index can have two frequencies with 161*53ee8cc1Swenshuai.xi * different gains, if you are only using a single frequency set the unused 162*53ee8cc1Swenshuai.xi * one to 0. 163*53ee8cc1Swenshuai.xi * 164*53ee8cc1Swenshuai.xi * The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB 165*53ee8cc1Swenshuai.xi * increments. 166*53ee8cc1Swenshuai.xi * 167*53ee8cc1Swenshuai.xi ******************************************************************************/ 168*53ee8cc1Swenshuai.xi 169*53ee8cc1Swenshuai.xi typedef enum { 170*53ee8cc1Swenshuai.xi hz20 = 0x7ffa, 171*53ee8cc1Swenshuai.xi hz50 = 0x7fe5, 172*53ee8cc1Swenshuai.xi hz133 = 0x7f4c, 173*53ee8cc1Swenshuai.xi hz200 = 0x7e6b, 174*53ee8cc1Swenshuai.xi hz261 = 0x7d50, /* .63 C1 */ 175*53ee8cc1Swenshuai.xi hz277 = 0x7cfa, /* .18 CS1 */ 176*53ee8cc1Swenshuai.xi hz293 = 0x7c9f, /* .66 D1 */ 177*53ee8cc1Swenshuai.xi hz300 = 0x7c75, 178*53ee8cc1Swenshuai.xi hz311 = 0x7c32, /* .13 DS1 */ 179*53ee8cc1Swenshuai.xi hz329 = 0x7bbf, /* .63 E1 */ 180*53ee8cc1Swenshuai.xi hz330 = 0x7bb8, 181*53ee8cc1Swenshuai.xi hz340 = 0x7b75, 182*53ee8cc1Swenshuai.xi hz349 = 0x7b37, /* .23 F1 */ 183*53ee8cc1Swenshuai.xi hz350 = 0x7b30, 184*53ee8cc1Swenshuai.xi hz360 = 0x7ae9, 185*53ee8cc1Swenshuai.xi hz369 = 0x7aa8, /* .99 FS1 */ 186*53ee8cc1Swenshuai.xi hz380 = 0x7a56, 187*53ee8cc1Swenshuai.xi hz392 = 0x79fa, /* .00 G1 */ 188*53ee8cc1Swenshuai.xi hz400 = 0x79bb, 189*53ee8cc1Swenshuai.xi hz415 = 0x7941, /* .30 GS1 */ 190*53ee8cc1Swenshuai.xi hz420 = 0x7918, 191*53ee8cc1Swenshuai.xi hz425 = 0x78ee, 192*53ee8cc1Swenshuai.xi hz435 = 0x7899, 193*53ee8cc1Swenshuai.xi hz440 = 0x786d, /* .00 A1 */ 194*53ee8cc1Swenshuai.xi hz445 = 0x7842, 195*53ee8cc1Swenshuai.xi hz450 = 0x7815, 196*53ee8cc1Swenshuai.xi hz452 = 0x7803, 197*53ee8cc1Swenshuai.xi hz466 = 0x7784, /* .16 AS1 */ 198*53ee8cc1Swenshuai.xi hz475 = 0x7731, 199*53ee8cc1Swenshuai.xi hz480 = 0x7701, 200*53ee8cc1Swenshuai.xi hz493 = 0x7685, /* .88 B1 */ 201*53ee8cc1Swenshuai.xi hz494 = 0x767b, 202*53ee8cc1Swenshuai.xi hz500 = 0x7640, 203*53ee8cc1Swenshuai.xi hz520 = 0x7578, 204*53ee8cc1Swenshuai.xi hz523 = 0x7559, /* .25 C2 */ 205*53ee8cc1Swenshuai.xi hz525 = 0x7544, 206*53ee8cc1Swenshuai.xi hz540 = 0x74a7, 207*53ee8cc1Swenshuai.xi hz554 = 0x7411, /* .37 CS2 */ 208*53ee8cc1Swenshuai.xi hz587 = 0x72a1, /* .33 D2 */ 209*53ee8cc1Swenshuai.xi hz590 = 0x727f, 210*53ee8cc1Swenshuai.xi hz600 = 0x720b, 211*53ee8cc1Swenshuai.xi hz620 = 0x711e, 212*53ee8cc1Swenshuai.xi hz622 = 0x7106, /* .25 DS2 */ 213*53ee8cc1Swenshuai.xi hz659 = 0x6f3b, /* .26 E2 */ 214*53ee8cc1Swenshuai.xi hz660 = 0x6f2e, 215*53ee8cc1Swenshuai.xi hz698 = 0x6d3d, /* .46 F2 */ 216*53ee8cc1Swenshuai.xi hz700 = 0x6d22, 217*53ee8cc1Swenshuai.xi hz739 = 0x6b09, /* .99 FS2 */ 218*53ee8cc1Swenshuai.xi hz740 = 0x6afa, 219*53ee8cc1Swenshuai.xi hz750 = 0x6a6c, 220*53ee8cc1Swenshuai.xi hz770 = 0x694b, 221*53ee8cc1Swenshuai.xi hz783 = 0x688b, /* .99 G2 */ 222*53ee8cc1Swenshuai.xi hz800 = 0x678d, 223*53ee8cc1Swenshuai.xi hz816 = 0x6698, 224*53ee8cc1Swenshuai.xi hz830 = 0x65bf, /* .61 GS2 */ 225*53ee8cc1Swenshuai.xi hz850 = 0x6484, 226*53ee8cc1Swenshuai.xi hz857 = 0x6414, 227*53ee8cc1Swenshuai.xi hz880 = 0x629f, /* .00 A2 */ 228*53ee8cc1Swenshuai.xi hz900 = 0x6154, 229*53ee8cc1Swenshuai.xi hz932 = 0x5f35, /* .33 AS2 */ 230*53ee8cc1Swenshuai.xi hz935 = 0x5f01, 231*53ee8cc1Swenshuai.xi hz941 = 0x5e9a, 232*53ee8cc1Swenshuai.xi hz942 = 0x5e88, 233*53ee8cc1Swenshuai.xi hz950 = 0x5dfd, 234*53ee8cc1Swenshuai.xi hz975 = 0x5c44, 235*53ee8cc1Swenshuai.xi hz1000 = 0x5a81, 236*53ee8cc1Swenshuai.xi hz1020 = 0x5912, 237*53ee8cc1Swenshuai.xi hz1050 = 0x56e2, 238*53ee8cc1Swenshuai.xi hz1100 = 0x5320, 239*53ee8cc1Swenshuai.xi hz1140 = 0x5007, 240*53ee8cc1Swenshuai.xi hz1200 = 0x4b3b, 241*53ee8cc1Swenshuai.xi hz1209 = 0x4a80, 242*53ee8cc1Swenshuai.xi hz1215 = 0x4a02, 243*53ee8cc1Swenshuai.xi hz1250 = 0x471c, 244*53ee8cc1Swenshuai.xi hz1300 = 0x42e0, 245*53ee8cc1Swenshuai.xi hz1330 = 0x4049, 246*53ee8cc1Swenshuai.xi hz1336 = 0x3fc4, 247*53ee8cc1Swenshuai.xi hz1366 = 0x3d22, 248*53ee8cc1Swenshuai.xi hz1380 = 0x3be4, 249*53ee8cc1Swenshuai.xi hz1400 = 0x3a1b, 250*53ee8cc1Swenshuai.xi hz1450 = 0x3596, 251*53ee8cc1Swenshuai.xi hz1477 = 0x331c, 252*53ee8cc1Swenshuai.xi hz1500 = 0x30fb, 253*53ee8cc1Swenshuai.xi hz1600 = 0x278d, 254*53ee8cc1Swenshuai.xi hz1633 = 0x2462, 255*53ee8cc1Swenshuai.xi hz1638 = 0x23e7, 256*53ee8cc1Swenshuai.xi hz1645 = 0x233a, 257*53ee8cc1Swenshuai.xi hz1750 = 0x18f8, 258*53ee8cc1Swenshuai.xi hz1800 = 0x1405, 259*53ee8cc1Swenshuai.xi hz1860 = 0xe0b, 260*53ee8cc1Swenshuai.xi hz2100 = 0xf5f6, 261*53ee8cc1Swenshuai.xi hz2130 = 0xf2f5, 262*53ee8cc1Swenshuai.xi hz2450 = 0xd3b3, 263*53ee8cc1Swenshuai.xi hz2750 = 0xb8e4 264*53ee8cc1Swenshuai.xi } IXJ_FREQ; 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi typedef enum { 267*53ee8cc1Swenshuai.xi C1 = hz261, 268*53ee8cc1Swenshuai.xi CS1 = hz277, 269*53ee8cc1Swenshuai.xi D1 = hz293, 270*53ee8cc1Swenshuai.xi DS1 = hz311, 271*53ee8cc1Swenshuai.xi E1 = hz329, 272*53ee8cc1Swenshuai.xi F1 = hz349, 273*53ee8cc1Swenshuai.xi FS1 = hz369, 274*53ee8cc1Swenshuai.xi G1 = hz392, 275*53ee8cc1Swenshuai.xi GS1 = hz415, 276*53ee8cc1Swenshuai.xi A1 = hz440, 277*53ee8cc1Swenshuai.xi AS1 = hz466, 278*53ee8cc1Swenshuai.xi B1 = hz493, 279*53ee8cc1Swenshuai.xi C2 = hz523, 280*53ee8cc1Swenshuai.xi CS2 = hz554, 281*53ee8cc1Swenshuai.xi D2 = hz587, 282*53ee8cc1Swenshuai.xi DS2 = hz622, 283*53ee8cc1Swenshuai.xi E2 = hz659, 284*53ee8cc1Swenshuai.xi F2 = hz698, 285*53ee8cc1Swenshuai.xi FS2 = hz739, 286*53ee8cc1Swenshuai.xi G2 = hz783, 287*53ee8cc1Swenshuai.xi GS2 = hz830, 288*53ee8cc1Swenshuai.xi A2 = hz880, 289*53ee8cc1Swenshuai.xi AS2 = hz932, 290*53ee8cc1Swenshuai.xi } IXJ_NOTE; 291*53ee8cc1Swenshuai.xi 292*53ee8cc1Swenshuai.xi typedef struct { 293*53ee8cc1Swenshuai.xi int tone_index; 294*53ee8cc1Swenshuai.xi int freq0; 295*53ee8cc1Swenshuai.xi int gain0; 296*53ee8cc1Swenshuai.xi int freq1; 297*53ee8cc1Swenshuai.xi int gain1; 298*53ee8cc1Swenshuai.xi } IXJ_TONE; 299*53ee8cc1Swenshuai.xi 300*53ee8cc1Swenshuai.xi #define IXJCTL_INIT_TONE _IOW ('q', 0xC9, IXJ_TONE *) 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi /****************************************************************************** 303*53ee8cc1Swenshuai.xi * 304*53ee8cc1Swenshuai.xi * The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various 305*53ee8cc1Swenshuai.xi * Call Progress Tones (CPT). This is accomplished by setting up an array of 306*53ee8cc1Swenshuai.xi * IXJ_CADENCE_ELEMENT structures that sequentially define the states of 307*53ee8cc1Swenshuai.xi * the tone sequence. The tone_on_time and tone_off time are in 308*53ee8cc1Swenshuai.xi * 250 microsecond intervals. A pointer to this array is passed to the 309*53ee8cc1Swenshuai.xi * driver as the ce element of an IXJ_CADENCE structure. The elements_used 310*53ee8cc1Swenshuai.xi * must be set to the number of IXJ_CADENCE_ELEMENTS in the array. The 311*53ee8cc1Swenshuai.xi * termination variable defines what to do at the end of a cadence, the 312*53ee8cc1Swenshuai.xi * options are to play the cadence once and stop, to repeat the last 313*53ee8cc1Swenshuai.xi * element of the cadence indefinitely, or to repeat the entire cadence 314*53ee8cc1Swenshuai.xi * indefinitely. The ce variable is a pointer to the array of IXJ_TONE 315*53ee8cc1Swenshuai.xi * structures. If the freq0 variable is non-zero, the tone table contents 316*53ee8cc1Swenshuai.xi * for the tone_index are updated to the frequencies and gains defined. It 317*53ee8cc1Swenshuai.xi * should be noted that DTMF tones cannot be reassigned, so if DTMF tone 318*53ee8cc1Swenshuai.xi * table indexes are used in a cadence the frequency and gain variables will 319*53ee8cc1Swenshuai.xi * be ignored. 320*53ee8cc1Swenshuai.xi * 321*53ee8cc1Swenshuai.xi * If the array elements contain frequency parameters the driver will 322*53ee8cc1Swenshuai.xi * initialize the needed tone table elements and begin playing the tone, 323*53ee8cc1Swenshuai.xi * there is no preset limit on the number of elements in the cadence. If 324*53ee8cc1Swenshuai.xi * there is more than one frequency used in the cadence, sequential elements 325*53ee8cc1Swenshuai.xi * of different frequencies MUST use different tone table indexes. Only one 326*53ee8cc1Swenshuai.xi * cadence can be played at a time. It is possible to build complex 327*53ee8cc1Swenshuai.xi * cadences with multiple frequencies using 2 tone table indexes by 328*53ee8cc1Swenshuai.xi * alternating between them. 329*53ee8cc1Swenshuai.xi * 330*53ee8cc1Swenshuai.xi ******************************************************************************/ 331*53ee8cc1Swenshuai.xi 332*53ee8cc1Swenshuai.xi typedef struct { 333*53ee8cc1Swenshuai.xi int index; 334*53ee8cc1Swenshuai.xi int tone_on_time; 335*53ee8cc1Swenshuai.xi int tone_off_time; 336*53ee8cc1Swenshuai.xi int freq0; 337*53ee8cc1Swenshuai.xi int gain0; 338*53ee8cc1Swenshuai.xi int freq1; 339*53ee8cc1Swenshuai.xi int gain1; 340*53ee8cc1Swenshuai.xi } IXJ_CADENCE_ELEMENT; 341*53ee8cc1Swenshuai.xi 342*53ee8cc1Swenshuai.xi typedef enum { 343*53ee8cc1Swenshuai.xi PLAY_ONCE, 344*53ee8cc1Swenshuai.xi REPEAT_LAST_ELEMENT, 345*53ee8cc1Swenshuai.xi REPEAT_ALL 346*53ee8cc1Swenshuai.xi } IXJ_CADENCE_TERM; 347*53ee8cc1Swenshuai.xi 348*53ee8cc1Swenshuai.xi typedef struct { 349*53ee8cc1Swenshuai.xi int elements_used; 350*53ee8cc1Swenshuai.xi IXJ_CADENCE_TERM termination; 351*53ee8cc1Swenshuai.xi IXJ_CADENCE_ELEMENT *ce; 352*53ee8cc1Swenshuai.xi } IXJ_CADENCE; 353*53ee8cc1Swenshuai.xi 354*53ee8cc1Swenshuai.xi #define IXJCTL_TONE_CADENCE _IOW ('q', 0xCA, IXJ_CADENCE *) 355*53ee8cc1Swenshuai.xi /****************************************************************************** 356*53ee8cc1Swenshuai.xi * 357*53ee8cc1Swenshuai.xi * This group of IOCTLs deal with the playback settings of the DSP 358*53ee8cc1Swenshuai.xi * 359*53ee8cc1Swenshuai.xi ******************************************************************************/ 360*53ee8cc1Swenshuai.xi 361*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_CODEC PHONE_PLAY_CODEC 362*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_START PHONE_PLAY_START 363*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_STOP PHONE_PLAY_STOP 364*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_DEPTH PHONE_PLAY_DEPTH 365*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_VOLUME PHONE_PLAY_VOLUME 366*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_LEVEL PHONE_PLAY_LEVEL 367*53ee8cc1Swenshuai.xi 368*53ee8cc1Swenshuai.xi /****************************************************************************** 369*53ee8cc1Swenshuai.xi * 370*53ee8cc1Swenshuai.xi * This group of IOCTLs deal with the Acoustic Echo Cancellation settings 371*53ee8cc1Swenshuai.xi * of the DSP 372*53ee8cc1Swenshuai.xi * 373*53ee8cc1Swenshuai.xi * Issuing the IXJCTL_AEC_START command with a value of AEC_OFF has the 374*53ee8cc1Swenshuai.xi * same effect as IXJCTL_AEC_STOP. This is to simplify slider bar 375*53ee8cc1Swenshuai.xi * controls. IXJCTL_AEC_GET_LEVEL returns the current setting of the AEC. 376*53ee8cc1Swenshuai.xi ******************************************************************************/ 377*53ee8cc1Swenshuai.xi #define IXJCTL_AEC_START _IOW ('q', 0xCB, int) 378*53ee8cc1Swenshuai.xi #define IXJCTL_AEC_STOP _IO ('q', 0xCC) 379*53ee8cc1Swenshuai.xi #define IXJCTL_AEC_GET_LEVEL _IO ('q', 0xCD) 380*53ee8cc1Swenshuai.xi 381*53ee8cc1Swenshuai.xi #define AEC_OFF 0 382*53ee8cc1Swenshuai.xi #define AEC_LOW 1 383*53ee8cc1Swenshuai.xi #define AEC_MED 2 384*53ee8cc1Swenshuai.xi #define AEC_HIGH 3 385*53ee8cc1Swenshuai.xi #define AEC_AUTO 4 386*53ee8cc1Swenshuai.xi #define AEC_AGC 5 387*53ee8cc1Swenshuai.xi /****************************************************************************** 388*53ee8cc1Swenshuai.xi * 389*53ee8cc1Swenshuai.xi * Call Progress Tones, DTMF, etc. 390*53ee8cc1Swenshuai.xi * IXJCTL_DTMF_OOB determines if DTMF signaling is sent as Out-Of-Band 391*53ee8cc1Swenshuai.xi * only. If you pass a 1, DTMF is suppressed from the audio stream. 392*53ee8cc1Swenshuai.xi * Tone on and off times are in 250 microsecond intervals so 393*53ee8cc1Swenshuai.xi * ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360); 394*53ee8cc1Swenshuai.xi * will set the tone on time of board ixj1 to 360 * 250us = 90ms 395*53ee8cc1Swenshuai.xi * the default values of tone on and off times is 840 or 210ms 396*53ee8cc1Swenshuai.xi ******************************************************************************/ 397*53ee8cc1Swenshuai.xi 398*53ee8cc1Swenshuai.xi #define IXJCTL_DTMF_READY PHONE_DTMF_READY 399*53ee8cc1Swenshuai.xi #define IXJCTL_GET_DTMF PHONE_GET_DTMF 400*53ee8cc1Swenshuai.xi #define IXJCTL_GET_DTMF_ASCII PHONE_GET_DTMF_ASCII 401*53ee8cc1Swenshuai.xi #define IXJCTL_DTMF_OOB PHONE_DTMF_OOB 402*53ee8cc1Swenshuai.xi #define IXJCTL_EXCEPTION PHONE_EXCEPTION 403*53ee8cc1Swenshuai.xi #define IXJCTL_PLAY_TONE PHONE_PLAY_TONE 404*53ee8cc1Swenshuai.xi #define IXJCTL_SET_TONE_ON_TIME PHONE_SET_TONE_ON_TIME 405*53ee8cc1Swenshuai.xi #define IXJCTL_SET_TONE_OFF_TIME PHONE_SET_TONE_OFF_TIME 406*53ee8cc1Swenshuai.xi #define IXJCTL_GET_TONE_ON_TIME PHONE_GET_TONE_ON_TIME 407*53ee8cc1Swenshuai.xi #define IXJCTL_GET_TONE_OFF_TIME PHONE_GET_TONE_OFF_TIME 408*53ee8cc1Swenshuai.xi #define IXJCTL_GET_TONE_STATE PHONE_GET_TONE_STATE 409*53ee8cc1Swenshuai.xi #define IXJCTL_BUSY PHONE_BUSY 410*53ee8cc1Swenshuai.xi #define IXJCTL_RINGBACK PHONE_RINGBACK 411*53ee8cc1Swenshuai.xi #define IXJCTL_DIALTONE PHONE_DIALTONE 412*53ee8cc1Swenshuai.xi #define IXJCTL_CPT_STOP PHONE_CPT_STOP 413*53ee8cc1Swenshuai.xi 414*53ee8cc1Swenshuai.xi /****************************************************************************** 415*53ee8cc1Swenshuai.xi * LineJACK specific IOCTLs 416*53ee8cc1Swenshuai.xi * 417*53ee8cc1Swenshuai.xi * The lsb 4 bits of the LED argument represent the state of each of the 4 418*53ee8cc1Swenshuai.xi * LED's on the LineJACK 419*53ee8cc1Swenshuai.xi ******************************************************************************/ 420*53ee8cc1Swenshuai.xi 421*53ee8cc1Swenshuai.xi #define IXJCTL_SET_LED _IOW ('q', 0xCE, int) 422*53ee8cc1Swenshuai.xi #define IXJCTL_MIXER _IOW ('q', 0xCF, int) 423*53ee8cc1Swenshuai.xi 424*53ee8cc1Swenshuai.xi /****************************************************************************** 425*53ee8cc1Swenshuai.xi * 426*53ee8cc1Swenshuai.xi * The master volume controls use attenuation with 32 levels from 0 to -62dB 427*53ee8cc1Swenshuai.xi * with steps of 2dB each, the defines should be OR'ed together then sent 428*53ee8cc1Swenshuai.xi * as the parameter to the mixer command to change the mixer settings. 429*53ee8cc1Swenshuai.xi * 430*53ee8cc1Swenshuai.xi ******************************************************************************/ 431*53ee8cc1Swenshuai.xi #define MIXER_MASTER_L 0x0000 432*53ee8cc1Swenshuai.xi #define MIXER_MASTER_R 0x0100 433*53ee8cc1Swenshuai.xi #define ATT00DB 0x00 434*53ee8cc1Swenshuai.xi #define ATT02DB 0x01 435*53ee8cc1Swenshuai.xi #define ATT04DB 0x02 436*53ee8cc1Swenshuai.xi #define ATT06DB 0x03 437*53ee8cc1Swenshuai.xi #define ATT08DB 0x04 438*53ee8cc1Swenshuai.xi #define ATT10DB 0x05 439*53ee8cc1Swenshuai.xi #define ATT12DB 0x06 440*53ee8cc1Swenshuai.xi #define ATT14DB 0x07 441*53ee8cc1Swenshuai.xi #define ATT16DB 0x08 442*53ee8cc1Swenshuai.xi #define ATT18DB 0x09 443*53ee8cc1Swenshuai.xi #define ATT20DB 0x0A 444*53ee8cc1Swenshuai.xi #define ATT22DB 0x0B 445*53ee8cc1Swenshuai.xi #define ATT24DB 0x0C 446*53ee8cc1Swenshuai.xi #define ATT26DB 0x0D 447*53ee8cc1Swenshuai.xi #define ATT28DB 0x0E 448*53ee8cc1Swenshuai.xi #define ATT30DB 0x0F 449*53ee8cc1Swenshuai.xi #define ATT32DB 0x10 450*53ee8cc1Swenshuai.xi #define ATT34DB 0x11 451*53ee8cc1Swenshuai.xi #define ATT36DB 0x12 452*53ee8cc1Swenshuai.xi #define ATT38DB 0x13 453*53ee8cc1Swenshuai.xi #define ATT40DB 0x14 454*53ee8cc1Swenshuai.xi #define ATT42DB 0x15 455*53ee8cc1Swenshuai.xi #define ATT44DB 0x16 456*53ee8cc1Swenshuai.xi #define ATT46DB 0x17 457*53ee8cc1Swenshuai.xi #define ATT48DB 0x18 458*53ee8cc1Swenshuai.xi #define ATT50DB 0x19 459*53ee8cc1Swenshuai.xi #define ATT52DB 0x1A 460*53ee8cc1Swenshuai.xi #define ATT54DB 0x1B 461*53ee8cc1Swenshuai.xi #define ATT56DB 0x1C 462*53ee8cc1Swenshuai.xi #define ATT58DB 0x1D 463*53ee8cc1Swenshuai.xi #define ATT60DB 0x1E 464*53ee8cc1Swenshuai.xi #define ATT62DB 0x1F 465*53ee8cc1Swenshuai.xi #define MASTER_MUTE 0x80 466*53ee8cc1Swenshuai.xi 467*53ee8cc1Swenshuai.xi /****************************************************************************** 468*53ee8cc1Swenshuai.xi * 469*53ee8cc1Swenshuai.xi * The input volume controls use gain with 32 levels from +12dB to -50dB 470*53ee8cc1Swenshuai.xi * with steps of 2dB each, the defines should be OR'ed together then sent 471*53ee8cc1Swenshuai.xi * as the parameter to the mixer command to change the mixer settings. 472*53ee8cc1Swenshuai.xi * 473*53ee8cc1Swenshuai.xi ******************************************************************************/ 474*53ee8cc1Swenshuai.xi #define MIXER_PORT_CD_L 0x0600 475*53ee8cc1Swenshuai.xi #define MIXER_PORT_CD_R 0x0700 476*53ee8cc1Swenshuai.xi #define MIXER_PORT_LINE_IN_L 0x0800 477*53ee8cc1Swenshuai.xi #define MIXER_PORT_LINE_IN_R 0x0900 478*53ee8cc1Swenshuai.xi #define MIXER_PORT_POTS_REC 0x0C00 479*53ee8cc1Swenshuai.xi #define MIXER_PORT_MIC 0x0E00 480*53ee8cc1Swenshuai.xi 481*53ee8cc1Swenshuai.xi #define GAIN12DB 0x00 482*53ee8cc1Swenshuai.xi #define GAIN10DB 0x01 483*53ee8cc1Swenshuai.xi #define GAIN08DB 0x02 484*53ee8cc1Swenshuai.xi #define GAIN06DB 0x03 485*53ee8cc1Swenshuai.xi #define GAIN04DB 0x04 486*53ee8cc1Swenshuai.xi #define GAIN02DB 0x05 487*53ee8cc1Swenshuai.xi #define GAIN00DB 0x06 488*53ee8cc1Swenshuai.xi #define GAIN_02DB 0x07 489*53ee8cc1Swenshuai.xi #define GAIN_04DB 0x08 490*53ee8cc1Swenshuai.xi #define GAIN_06DB 0x09 491*53ee8cc1Swenshuai.xi #define GAIN_08DB 0x0A 492*53ee8cc1Swenshuai.xi #define GAIN_10DB 0x0B 493*53ee8cc1Swenshuai.xi #define GAIN_12DB 0x0C 494*53ee8cc1Swenshuai.xi #define GAIN_14DB 0x0D 495*53ee8cc1Swenshuai.xi #define GAIN_16DB 0x0E 496*53ee8cc1Swenshuai.xi #define GAIN_18DB 0x0F 497*53ee8cc1Swenshuai.xi #define GAIN_20DB 0x10 498*53ee8cc1Swenshuai.xi #define GAIN_22DB 0x11 499*53ee8cc1Swenshuai.xi #define GAIN_24DB 0x12 500*53ee8cc1Swenshuai.xi #define GAIN_26DB 0x13 501*53ee8cc1Swenshuai.xi #define GAIN_28DB 0x14 502*53ee8cc1Swenshuai.xi #define GAIN_30DB 0x15 503*53ee8cc1Swenshuai.xi #define GAIN_32DB 0x16 504*53ee8cc1Swenshuai.xi #define GAIN_34DB 0x17 505*53ee8cc1Swenshuai.xi #define GAIN_36DB 0x18 506*53ee8cc1Swenshuai.xi #define GAIN_38DB 0x19 507*53ee8cc1Swenshuai.xi #define GAIN_40DB 0x1A 508*53ee8cc1Swenshuai.xi #define GAIN_42DB 0x1B 509*53ee8cc1Swenshuai.xi #define GAIN_44DB 0x1C 510*53ee8cc1Swenshuai.xi #define GAIN_46DB 0x1D 511*53ee8cc1Swenshuai.xi #define GAIN_48DB 0x1E 512*53ee8cc1Swenshuai.xi #define GAIN_50DB 0x1F 513*53ee8cc1Swenshuai.xi #define INPUT_MUTE 0x80 514*53ee8cc1Swenshuai.xi 515*53ee8cc1Swenshuai.xi /****************************************************************************** 516*53ee8cc1Swenshuai.xi * 517*53ee8cc1Swenshuai.xi * The POTS volume control use attenuation with 8 levels from 0dB to -28dB 518*53ee8cc1Swenshuai.xi * with steps of 4dB each, the defines should be OR'ed together then sent 519*53ee8cc1Swenshuai.xi * as the parameter to the mixer command to change the mixer settings. 520*53ee8cc1Swenshuai.xi * 521*53ee8cc1Swenshuai.xi ******************************************************************************/ 522*53ee8cc1Swenshuai.xi #define MIXER_PORT_POTS_PLAY 0x0F00 523*53ee8cc1Swenshuai.xi 524*53ee8cc1Swenshuai.xi #define POTS_ATT_00DB 0x00 525*53ee8cc1Swenshuai.xi #define POTS_ATT_04DB 0x01 526*53ee8cc1Swenshuai.xi #define POTS_ATT_08DB 0x02 527*53ee8cc1Swenshuai.xi #define POTS_ATT_12DB 0x03 528*53ee8cc1Swenshuai.xi #define POTS_ATT_16DB 0x04 529*53ee8cc1Swenshuai.xi #define POTS_ATT_20DB 0x05 530*53ee8cc1Swenshuai.xi #define POTS_ATT_24DB 0x06 531*53ee8cc1Swenshuai.xi #define POTS_ATT_28DB 0x07 532*53ee8cc1Swenshuai.xi #define POTS_MUTE 0x80 533*53ee8cc1Swenshuai.xi 534*53ee8cc1Swenshuai.xi /****************************************************************************** 535*53ee8cc1Swenshuai.xi * 536*53ee8cc1Swenshuai.xi * The DAA controls the interface to the PSTN port. The driver loads the 537*53ee8cc1Swenshuai.xi * US coefficients by default, so if you live in a different country you 538*53ee8cc1Swenshuai.xi * need to load the set for your countries phone system. 539*53ee8cc1Swenshuai.xi * 540*53ee8cc1Swenshuai.xi ******************************************************************************/ 541*53ee8cc1Swenshuai.xi #define IXJCTL_DAA_COEFF_SET _IOW ('q', 0xD0, int) 542*53ee8cc1Swenshuai.xi 543*53ee8cc1Swenshuai.xi #define DAA_US 1 /*PITA 8kHz */ 544*53ee8cc1Swenshuai.xi #define DAA_UK 2 /*ISAR34 8kHz */ 545*53ee8cc1Swenshuai.xi #define DAA_FRANCE 3 /* */ 546*53ee8cc1Swenshuai.xi #define DAA_GERMANY 4 547*53ee8cc1Swenshuai.xi #define DAA_AUSTRALIA 5 548*53ee8cc1Swenshuai.xi #define DAA_JAPAN 6 549*53ee8cc1Swenshuai.xi 550*53ee8cc1Swenshuai.xi /****************************************************************************** 551*53ee8cc1Swenshuai.xi * 552*53ee8cc1Swenshuai.xi * Use IXJCTL_PORT to set or query the port the card is set to. If the 553*53ee8cc1Swenshuai.xi * argument is set to PORT_QUERY, the return value of the ioctl will 554*53ee8cc1Swenshuai.xi * indicate which port is currently in use, otherwise it will change the 555*53ee8cc1Swenshuai.xi * port. 556*53ee8cc1Swenshuai.xi * 557*53ee8cc1Swenshuai.xi ******************************************************************************/ 558*53ee8cc1Swenshuai.xi #define IXJCTL_PORT _IOW ('q', 0xD1, int) 559*53ee8cc1Swenshuai.xi 560*53ee8cc1Swenshuai.xi #define PORT_QUERY 0 561*53ee8cc1Swenshuai.xi #define PORT_POTS 1 562*53ee8cc1Swenshuai.xi #define PORT_PSTN 2 563*53ee8cc1Swenshuai.xi #define PORT_SPEAKER 3 564*53ee8cc1Swenshuai.xi #define PORT_HANDSET 4 565*53ee8cc1Swenshuai.xi 566*53ee8cc1Swenshuai.xi #define IXJCTL_PSTN_SET_STATE PHONE_PSTN_SET_STATE 567*53ee8cc1Swenshuai.xi #define IXJCTL_PSTN_GET_STATE PHONE_PSTN_GET_STATE 568*53ee8cc1Swenshuai.xi 569*53ee8cc1Swenshuai.xi #define PSTN_ON_HOOK 0 570*53ee8cc1Swenshuai.xi #define PSTN_RINGING 1 571*53ee8cc1Swenshuai.xi #define PSTN_OFF_HOOK 2 572*53ee8cc1Swenshuai.xi #define PSTN_PULSE_DIAL 3 573*53ee8cc1Swenshuai.xi 574*53ee8cc1Swenshuai.xi /****************************************************************************** 575*53ee8cc1Swenshuai.xi * 576*53ee8cc1Swenshuai.xi * The DAA Analog GAIN sets 2 parameters at one time, the receive gain (AGRR), 577*53ee8cc1Swenshuai.xi * and the transmit gain (AGX). OR together the components and pass them 578*53ee8cc1Swenshuai.xi * as the parameter to IXJCTL_DAA_AGAIN. The default setting is both at 0dB. 579*53ee8cc1Swenshuai.xi * 580*53ee8cc1Swenshuai.xi ******************************************************************************/ 581*53ee8cc1Swenshuai.xi #define IXJCTL_DAA_AGAIN _IOW ('q', 0xD2, int) 582*53ee8cc1Swenshuai.xi 583*53ee8cc1Swenshuai.xi #define AGRR00DB 0x00 /* Analog gain in receive direction 0dB */ 584*53ee8cc1Swenshuai.xi #define AGRR3_5DB 0x10 /* Analog gain in receive direction 3.5dB */ 585*53ee8cc1Swenshuai.xi #define AGRR06DB 0x30 /* Analog gain in receive direction 6dB */ 586*53ee8cc1Swenshuai.xi 587*53ee8cc1Swenshuai.xi #define AGX00DB 0x00 /* Analog gain in transmit direction 0dB */ 588*53ee8cc1Swenshuai.xi #define AGX_6DB 0x04 /* Analog gain in transmit direction -6dB */ 589*53ee8cc1Swenshuai.xi #define AGX3_5DB 0x08 /* Analog gain in transmit direction 3.5dB */ 590*53ee8cc1Swenshuai.xi #define AGX_2_5B 0x0C /* Analog gain in transmit direction -2.5dB */ 591*53ee8cc1Swenshuai.xi 592*53ee8cc1Swenshuai.xi #define IXJCTL_PSTN_LINETEST _IO ('q', 0xD3) 593*53ee8cc1Swenshuai.xi 594*53ee8cc1Swenshuai.xi #define IXJCTL_CID _IOR ('q', 0xD4, PHONE_CID *) 595*53ee8cc1Swenshuai.xi #define IXJCTL_VMWI _IOR ('q', 0xD8, int) 596*53ee8cc1Swenshuai.xi #define IXJCTL_CIDCW _IOW ('q', 0xD9, PHONE_CID *) 597*53ee8cc1Swenshuai.xi /****************************************************************************** 598*53ee8cc1Swenshuai.xi * 599*53ee8cc1Swenshuai.xi * The wink duration is tunable with this ioctl. The default wink duration 600*53ee8cc1Swenshuai.xi * is 320ms. You do not need to use this ioctl if you do not require a 601*53ee8cc1Swenshuai.xi * different wink duration. 602*53ee8cc1Swenshuai.xi * 603*53ee8cc1Swenshuai.xi ******************************************************************************/ 604*53ee8cc1Swenshuai.xi #define IXJCTL_WINK_DURATION PHONE_WINK_DURATION 605*53ee8cc1Swenshuai.xi 606*53ee8cc1Swenshuai.xi /****************************************************************************** 607*53ee8cc1Swenshuai.xi * 608*53ee8cc1Swenshuai.xi * This ioctl will connect the POTS port to the PSTN port on the LineJACK 609*53ee8cc1Swenshuai.xi * In order for this to work properly the port selection should be set to 610*53ee8cc1Swenshuai.xi * the PSTN port with IXJCTL_PORT prior to calling this ioctl. This will 611*53ee8cc1Swenshuai.xi * enable conference calls between PSTN callers and network callers. 612*53ee8cc1Swenshuai.xi * Passing a 1 to this ioctl enables the POTS<->PSTN connection while 613*53ee8cc1Swenshuai.xi * passing a 0 turns it back off. 614*53ee8cc1Swenshuai.xi * 615*53ee8cc1Swenshuai.xi ******************************************************************************/ 616*53ee8cc1Swenshuai.xi #define IXJCTL_POTS_PSTN _IOW ('q', 0xD5, int) 617*53ee8cc1Swenshuai.xi 618*53ee8cc1Swenshuai.xi /****************************************************************************** 619*53ee8cc1Swenshuai.xi * 620*53ee8cc1Swenshuai.xi * IOCTLs added by request. 621*53ee8cc1Swenshuai.xi * 622*53ee8cc1Swenshuai.xi * IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in 623*53ee8cc1Swenshuai.xi * /usr/include/asm/param.h, this determines the fundamental 624*53ee8cc1Swenshuai.xi * frequency of the clock ticks on your Linux system. The kernel 625*53ee8cc1Swenshuai.xi * must be rebuilt if you change this value, also all modules you 626*53ee8cc1Swenshuai.xi * use (except this one) must be recompiled. The default value 627*53ee8cc1Swenshuai.xi * is 100, and you only need to use this IOCTL if you use some 628*53ee8cc1Swenshuai.xi * other value. 629*53ee8cc1Swenshuai.xi * 630*53ee8cc1Swenshuai.xi * 631*53ee8cc1Swenshuai.xi * IXJCTL_RATE sets the number of times per second that the driver polls 632*53ee8cc1Swenshuai.xi * the DSP. This value cannot be larger than HZ. By 633*53ee8cc1Swenshuai.xi * increasing both of these values, you may be able to reduce 634*53ee8cc1Swenshuai.xi * latency because the max hang time that can exist between the 635*53ee8cc1Swenshuai.xi * driver and the DSP will be reduced. 636*53ee8cc1Swenshuai.xi * 637*53ee8cc1Swenshuai.xi ******************************************************************************/ 638*53ee8cc1Swenshuai.xi 639*53ee8cc1Swenshuai.xi #define IXJCTL_HZ _IOW ('q', 0xE0, int) 640*53ee8cc1Swenshuai.xi #define IXJCTL_RATE _IOW ('q', 0xE1, int) 641*53ee8cc1Swenshuai.xi #define IXJCTL_FRAMES_READ _IOR ('q', 0xE2, unsigned long) 642*53ee8cc1Swenshuai.xi #define IXJCTL_FRAMES_WRITTEN _IOR ('q', 0xE3, unsigned long) 643*53ee8cc1Swenshuai.xi #define IXJCTL_READ_WAIT _IOR ('q', 0xE4, unsigned long) 644*53ee8cc1Swenshuai.xi #define IXJCTL_WRITE_WAIT _IOR ('q', 0xE5, unsigned long) 645*53ee8cc1Swenshuai.xi #define IXJCTL_DRYBUFFER_READ _IOR ('q', 0xE6, unsigned long) 646*53ee8cc1Swenshuai.xi #define IXJCTL_DRYBUFFER_CLEAR _IO ('q', 0xE7) 647*53ee8cc1Swenshuai.xi #define IXJCTL_DTMF_PRESCALE _IOW ('q', 0xE8, int) 648*53ee8cc1Swenshuai.xi 649*53ee8cc1Swenshuai.xi /****************************************************************************** 650*53ee8cc1Swenshuai.xi * 651*53ee8cc1Swenshuai.xi * This ioctl allows the user application to control what events the driver 652*53ee8cc1Swenshuai.xi * will send signals for, and what signals it will send for which event. 653*53ee8cc1Swenshuai.xi * By default, if signaling is enabled, all events will send SIGIO when 654*53ee8cc1Swenshuai.xi * they occur. To disable signals for an event set the signal to 0. 655*53ee8cc1Swenshuai.xi * 656*53ee8cc1Swenshuai.xi ******************************************************************************/ 657*53ee8cc1Swenshuai.xi typedef enum { 658*53ee8cc1Swenshuai.xi SIG_DTMF_READY, 659*53ee8cc1Swenshuai.xi SIG_HOOKSTATE, 660*53ee8cc1Swenshuai.xi SIG_FLASH, 661*53ee8cc1Swenshuai.xi SIG_PSTN_RING, 662*53ee8cc1Swenshuai.xi SIG_CALLER_ID, 663*53ee8cc1Swenshuai.xi SIG_PSTN_WINK, 664*53ee8cc1Swenshuai.xi SIG_F0, SIG_F1, SIG_F2, SIG_F3, 665*53ee8cc1Swenshuai.xi SIG_FC0, SIG_FC1, SIG_FC2, SIG_FC3, 666*53ee8cc1Swenshuai.xi SIG_READ_READY = 33, 667*53ee8cc1Swenshuai.xi SIG_WRITE_READY = 34 668*53ee8cc1Swenshuai.xi } IXJ_SIGEVENT; 669*53ee8cc1Swenshuai.xi 670*53ee8cc1Swenshuai.xi typedef struct { 671*53ee8cc1Swenshuai.xi unsigned int event; 672*53ee8cc1Swenshuai.xi int signal; 673*53ee8cc1Swenshuai.xi } IXJ_SIGDEF; 674*53ee8cc1Swenshuai.xi 675*53ee8cc1Swenshuai.xi #define IXJCTL_SIGCTL _IOW ('q', 0xE9, IXJ_SIGDEF *) 676*53ee8cc1Swenshuai.xi 677*53ee8cc1Swenshuai.xi /****************************************************************************** 678*53ee8cc1Swenshuai.xi * 679*53ee8cc1Swenshuai.xi * These ioctls allow the user application to change the gain in the 680*53ee8cc1Swenshuai.xi * Smart Cable of the Internet Phone Card. Sending -1 as a value will cause 681*53ee8cc1Swenshuai.xi * return value to be the current setting. Valid values to set are 0x00 - 0x1F 682*53ee8cc1Swenshuai.xi * 683*53ee8cc1Swenshuai.xi * 11111 = +12 dB 684*53ee8cc1Swenshuai.xi * 10111 = 0 dB 685*53ee8cc1Swenshuai.xi * 00000 = -34.5 dB 686*53ee8cc1Swenshuai.xi * 687*53ee8cc1Swenshuai.xi * IXJCTL_SC_RXG sets the Receive gain 688*53ee8cc1Swenshuai.xi * IXJCTL_SC_TXG sets the Transmit gain 689*53ee8cc1Swenshuai.xi * 690*53ee8cc1Swenshuai.xi ******************************************************************************/ 691*53ee8cc1Swenshuai.xi #define IXJCTL_SC_RXG _IOW ('q', 0xEA, int) 692*53ee8cc1Swenshuai.xi #define IXJCTL_SC_TXG _IOW ('q', 0xEB, int) 693*53ee8cc1Swenshuai.xi 694*53ee8cc1Swenshuai.xi /****************************************************************************** 695*53ee8cc1Swenshuai.xi * 696*53ee8cc1Swenshuai.xi * The intercom IOCTL's short the output from one card to the input of the 697*53ee8cc1Swenshuai.xi * other and vice versa (actually done in the DSP read function). It is only 698*53ee8cc1Swenshuai.xi * necessary to execute the IOCTL on one card, but it is necessary to have 699*53ee8cc1Swenshuai.xi * both devices open to be able to detect hook switch changes. The record 700*53ee8cc1Swenshuai.xi * codec and rate of each card must match the playback codec and rate of 701*53ee8cc1Swenshuai.xi * the other card for this to work properly. 702*53ee8cc1Swenshuai.xi * 703*53ee8cc1Swenshuai.xi ******************************************************************************/ 704*53ee8cc1Swenshuai.xi 705*53ee8cc1Swenshuai.xi #define IXJCTL_INTERCOM_START _IOW ('q', 0xFD, int) 706*53ee8cc1Swenshuai.xi #define IXJCTL_INTERCOM_STOP _IOW ('q', 0xFE, int) 707*53ee8cc1Swenshuai.xi 708*53ee8cc1Swenshuai.xi /****************************************************************************** 709*53ee8cc1Swenshuai.xi * 710*53ee8cc1Swenshuai.xi * new structure for accessing raw filter information 711*53ee8cc1Swenshuai.xi * 712*53ee8cc1Swenshuai.xi ******************************************************************************/ 713*53ee8cc1Swenshuai.xi 714*53ee8cc1Swenshuai.xi typedef struct { 715*53ee8cc1Swenshuai.xi unsigned int filter; 716*53ee8cc1Swenshuai.xi char enable; 717*53ee8cc1Swenshuai.xi unsigned int coeff[19]; 718*53ee8cc1Swenshuai.xi } IXJ_FILTER_RAW; 719*53ee8cc1Swenshuai.xi 720*53ee8cc1Swenshuai.xi #endif 721