/****************************************************************************** * ixj.h * * Device Driver for the Internet PhoneJACK and * Internet LineJACK Telephony Cards. * * (c) Copyright 1999 Quicknet Technologies, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Author: Ed Okerson, * * Contributors: Greg Herlein, * David W. Erhart, * John Sellers, * Mike Preston, * * More information about the hardware related to this driver can be found * at our website: http://www.quicknet.net * * Fixes: * * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * *****************************************************************************/ static char ixj_h_rcsid[] = "$Id: ixj.h,v 3.14 2000/03/30 22:06:48 eokerson Exp $"; #ifndef _I386_TYPES_H #include #endif #include #include typedef __u16 WORD; typedef __u32 DWORD; typedef __u8 BYTE; typedef __u8 BOOL; #define IXJMAX 16 #define TRUE 1 #define FALSE 0 #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #endif #ifndef max #define max(a,b) (((a)>(b))?(a):(b)) #endif /****************************************************************************** * * This structure when unioned with the structures below makes simple byte * access to the registers easier. * ******************************************************************************/ typedef struct { unsigned char low; unsigned char high; } BYTES; typedef union { BYTES bytes; short word; } IXJ_WORD; typedef struct{ unsigned int b0:1; unsigned int b1:1; unsigned int b2:1; unsigned int b3:1; unsigned int b4:1; unsigned int b5:1; unsigned int b6:1; unsigned int b7:1; } IXJ_CBITS; typedef union{ IXJ_CBITS cbits; char cbyte; } IXJ_CBYTE; /****************************************************************************** * * This structure represents the Hardware Control Register of the CT8020/8021 * The CT8020 is used in the Internet PhoneJACK, and the 8021 in the * Internet LineJACK * ******************************************************************************/ typedef struct { unsigned int rxrdy:1; unsigned int txrdy:1; unsigned int status:1; unsigned int auxstatus:1; unsigned int rxdma:1; unsigned int txdma:1; unsigned int rxburst:1; unsigned int txburst:1; unsigned int dmadir:1; unsigned int cont:1; unsigned int irqn:1; unsigned int t:5; } HCRBIT; typedef union { HCRBIT bits; BYTES bytes; } HCR; /****************************************************************************** * * This structure represents the Hardware Status Register of the CT8020/8021 * The CT8020 is used in the Internet PhoneJACK, and the 8021 in the * Internet LineJACK * ******************************************************************************/ typedef struct { unsigned int controlrdy:1; unsigned int auxctlrdy:1; unsigned int statusrdy:1; unsigned int auxstatusrdy:1; unsigned int rxrdy:1; unsigned int txrdy:1; unsigned int restart:1; unsigned int irqn:1; unsigned int rxdma:1; unsigned int txdma:1; unsigned int cohostshutdown:1; unsigned int t:5; } HSRBIT; typedef union { HSRBIT bits; BYTES bytes; } HSR; /****************************************************************************** * * This structure represents the General Purpose IO Register of the CT8020/8021 * The CT8020 is used in the Internet PhoneJACK, and the 8021 in the * Internet LineJACK * ******************************************************************************/ typedef struct { unsigned int x:1; unsigned int gpio1:1; unsigned int gpio2:1; unsigned int gpio3:1; unsigned int gpio4:1; unsigned int gpio5:1; unsigned int gpio6:1; unsigned int gpio7:1; unsigned int xread:1; unsigned int gpio1read:1; unsigned int gpio2read:1; unsigned int gpio3read:1; unsigned int gpio4read:1; unsigned int gpio5read:1; unsigned int gpio6read:1; unsigned int gpio7read:1; } GPIOBIT; typedef union { GPIOBIT bits; BYTES bytes; unsigned short word; } GPIO; /****************************************************************************** * * This structure represents the Line Monitor status response * ******************************************************************************/ typedef struct { unsigned int digit:4; unsigned int cpf_valid:1; unsigned int dtmf_valid:1; unsigned int peak:1; unsigned int z:1; unsigned int f0:1; unsigned int f1:1; unsigned int f2:1; unsigned int f3:1; unsigned int frame:4; } LMON; typedef union { LMON bits; BYTES bytes; } DTMF; typedef struct { unsigned int z:7; unsigned int dtmf_en:1; unsigned int y:4; unsigned int F3:1; unsigned int F2:1; unsigned int F1:1; unsigned int F0:1; } CP; typedef union { CP bits; BYTES bytes; } CPTF; /****************************************************************************** * * This structure represents the Status Control Register on the Internet * LineJACK * ******************************************************************************/ typedef struct { unsigned int c0:1; unsigned int c1:1; unsigned int stereo:1; unsigned int daafsyncen:1; unsigned int led1:1; unsigned int led2:1; unsigned int led3:1; unsigned int led4:1; } PSCRWI; // Internet LineJACK and Internet PhoneJACK Lite typedef struct { unsigned int eidp:1; unsigned int eisd:1; unsigned int x:6; } PSCRWP; // Internet PhoneJACK PCI typedef union { PSCRWI bits; PSCRWP pcib; char byte; } PLD_SCRW; typedef struct { unsigned int c0:1; unsigned int c1:1; unsigned int x:1; unsigned int d0ee:1; unsigned int mixerbusy:1; unsigned int sci:1; unsigned int dspflag:1; unsigned int daaflag:1; } PSCRRI; typedef struct { unsigned int eidp:1; unsigned int eisd:1; unsigned int x:4; unsigned int dspflag:1; unsigned int det:1; } PSCRRP; typedef union { PSCRRI bits; PSCRRP pcib; char byte; } PLD_SCRR; /****************************************************************************** * * These structures represents the SLIC Control Register on the * Internet LineJACK * ******************************************************************************/ typedef struct { unsigned int c1:1; unsigned int c2:1; unsigned int c3:1; unsigned int b2en:1; unsigned int spken:1; unsigned int rly1:1; unsigned int rly2:1; unsigned int rly3:1; } PSLICWRITE; typedef struct { unsigned int state:3; unsigned int b2en:1; unsigned int spken:1; unsigned int c3:1; unsigned int potspstn:1; unsigned int det:1; } PSLICREAD; typedef struct { unsigned int c1:1; unsigned int c2:1; unsigned int c3:1; unsigned int b2en:1; unsigned int e1:1; unsigned int mic:1; unsigned int spk:1; unsigned int x:1; } PSLICPCI; typedef union { PSLICPCI pcib; PSLICWRITE bits; PSLICREAD slic; char byte; } PLD_SLICW; typedef union { PSLICPCI pcib; PSLICREAD bits; char byte; } PLD_SLICR; /****************************************************************************** * * These structures represents the Clock Control Register on the * Internet LineJACK * ******************************************************************************/ typedef struct { unsigned int clk0:1; unsigned int clk1:1; unsigned int clk2:1; unsigned int x0:1; unsigned int slic_e1:1; unsigned int x1:1; unsigned int x2:1; unsigned int x3:1; } PCLOCK; typedef union { PCLOCK bits; char byte; } PLD_CLOCK; /****************************************************************************** * * These structures deal with the mixer on the Internet LineJACK * ******************************************************************************/ typedef struct { unsigned short vol[10]; unsigned int recsrc; unsigned int modcnt; unsigned short micpreamp; } MIX; /****************************************************************************** * * These structures deal with the control logic on the Internet PhoneCARD * ******************************************************************************/ typedef struct { unsigned int x0:4; // unused bits unsigned int ed:1; // Event Detect unsigned int drf:1; // Smart Cable Removal Flag 1=no cable unsigned int dspf:1; // DSP Flag 1=DSP Ready unsigned int crr:1; // Control Register Ready } COMMAND_REG1; typedef union { COMMAND_REG1 bits; unsigned char byte; } PCMCIA_CR1; typedef struct { unsigned int x0:4; // unused bits unsigned int rstc:1; // Smart Cable Reset unsigned int pwr:1; // Smart Cable Power unsigned int x1:2; // unused bits } COMMAND_REG2; typedef union { COMMAND_REG2 bits; unsigned char byte; } PCMCIA_CR2; typedef struct { unsigned int addr:5; // R/W Smart Cable Register Address unsigned int rw:1; // Read / Write flag unsigned int dev:2; // 2 bit Smart Cable Device Address } CONTROL_REG; typedef union { CONTROL_REG bits; unsigned char byte; } PCMCIA_SCCR; typedef struct { unsigned int hsw:1; unsigned int det:1; unsigned int led2:1; unsigned int led1:1; unsigned int ring1:1; unsigned int ring0:1; unsigned int x:1; unsigned int powerdown:1; } PCMCIA_SLIC_REG; typedef union { PCMCIA_SLIC_REG bits; unsigned char byte; } PCMCIA_SLIC; typedef struct { unsigned int cpd:1; // Chip Power Down unsigned int mpd:1; // MIC Bias Power Down unsigned int hpd:1; // Handset Drive Power Down unsigned int lpd:1; // Line Drive Power Down unsigned int spd:1; // Speaker Drive Power Down unsigned int x:2; // unused bits unsigned int sr:1; // Software Reset } Si3CONTROL1; typedef union { Si3CONTROL1 bits; unsigned char byte; } Si3C1; typedef struct { unsigned int al:1; // Analog Loopback DAC analog -> ADC analog unsigned int dl2:1; // Digital Loopback DAC -> ADC one bit unsigned int dl1:1; // Digital Loopback ADC -> DAC one bit unsigned int pll:1; // 1 = div 10, 0 = div 5 unsigned int hpd:1; // HPF disable unsigned int x:3; // unused bits } Si3CONTROL2; typedef union { Si3CONTROL2 bits; unsigned char byte; } Si3C2; typedef struct { unsigned int iir:1; // 1 enables IIR, 0 enables FIR unsigned int him:1; // Handset Input Mute unsigned int mcm:1; // MIC In Mute unsigned int mcg:2; // MIC In Gain unsigned int lim:1; // Line In Mute unsigned int lig:2; // Line In Gain } Si3RXGAIN; typedef union { Si3RXGAIN bits; unsigned char byte; } Si3RXG; typedef struct { unsigned int hom:1; // Handset Out Mute unsigned int lom:1; // Line Out Mute unsigned int rxg:5; // RX PGA Gain unsigned int x:1; // unused bit } Si3ADCVOLUME; typedef union { Si3ADCVOLUME bits; unsigned char byte; } Si3ADC; typedef struct { unsigned int srm:1; // Speaker Right Mute unsigned int slm:1; // Speaker Left Mute unsigned int txg:5; // TX PGA Gain unsigned int x:1; // unused bit } Si3DACVOLUME; typedef union { Si3DACVOLUME bits; unsigned char byte; } Si3DAC; typedef struct { unsigned int x:5; // unused bit unsigned int losc:1; // Line Out Short Circuit unsigned int srsc:1; // Speaker Right Short Circuit unsigned int slsc:1; // Speaker Left Short Circuit } Si3STATUSREPORT; typedef union { Si3STATUSREPORT bits; unsigned char byte; } Si3STAT; typedef struct { unsigned int sot:2; // Speaker Out Attenuation unsigned int lot:2; // Line Out Attenuation unsigned int x:4; // unused bits } Si3ANALOGATTN; typedef union { Si3ANALOGATTN bits; unsigned char byte; } Si3AATT; /****************************************************************************** * * These structures deal with the DAA on the Internet LineJACK * ******************************************************************************/ typedef struct _DAA_REGS { //----------------------------------------------- // SOP Registers // BYTE bySOP; union _SOP_REGS { struct _SOP { union // SOP - CR0 Register { BYTE reg; struct _CR0_BITREGS { BYTE CLK_EXT:1; // cr0[0:0] BYTE RIP:1; // cr0[1:1] BYTE AR:1; // cr0[2:2] BYTE AX:1; // cr0[3:3] BYTE FRR:1; // cr0[4:4] BYTE FRX:1; // cr0[5:5] BYTE IM:1; // cr0[6:6] BYTE TH:1; // cr0[7:7] } bitreg; } cr0; union // SOP - CR1 Register { BYTE reg; struct _CR1_REGS { BYTE RM:1; // cr1[0:0] BYTE RMR:1; // cr1[1:1] BYTE No_auto:1; // cr1[2:2] BYTE Pulse:1; // cr1[3:3] BYTE P_Tone1:1; // cr1[4:4] BYTE P_Tone2:1; // cr1[5:5] BYTE E_Tone1:1; // cr1[6:6] BYTE E_Tone2:1; // cr1[7:7] } bitreg; } cr1; union // SOP - CR2 Register { BYTE reg; struct _CR2_REGS { BYTE Call_II:1; // CR2[0:0] BYTE Call_I:1; // CR2[1:1] BYTE Call_en:1; // CR2[2:2] BYTE Call_pon:1; // CR2[3:3] BYTE IDR:1; // CR2[4:4] BYTE COT_R:3; // CR2[5:7] } bitreg; } cr2; union // SOP - CR3 Register { BYTE reg; struct _CR3_REGS { BYTE DHP_X:1; // CR3[0:0] BYTE DHP_R:1; // CR3[1:1] BYTE Cal_pctl:1; // CR3[2:2] BYTE SEL:1; // CR3[3:3] BYTE TestLoops:4; // CR3[4:7] } bitreg; } cr3; union // SOP - CR4 Register { BYTE reg; struct _CR4_REGS { BYTE Fsc_en:1; // CR4[0:0] BYTE Int_en:1; // CR4[1:1] BYTE AGX:2; // CR4[2:3] BYTE AGR_R:2; // CR4[4:5] BYTE AGR_Z:2; // CR4[6:7] } bitreg; } cr4; union // SOP - CR5 Register { BYTE reg; struct _CR5_REGS { BYTE V_0:1; // CR5[0:0] BYTE V_1:1; // CR5[1:1] BYTE V_2:1; // CR5[2:2] BYTE V_3:1; // CR5[3:3] BYTE V_4:1; // CR5[4:4] BYTE V_5:1; // CR5[5:5] BYTE V_6:1; // CR5[6:6] BYTE V_7:1; // CR5[7:7] } bitreg; } cr5; union // SOP - CR6 Register { BYTE reg; struct _CR6_REGS { BYTE reserved:8; // CR6[0:7] } bitreg; } cr6; union // SOP - CR7 Register { BYTE reg; struct _CR7_REGS { BYTE reserved:8; // CR7[0:7] } bitreg; } cr7; } SOP; BYTE ByteRegs[sizeof(struct _SOP)]; } SOP_REGS; // DAA_REGS.SOP_REGS.SOP.CR5.reg // DAA_REGS.SOP_REGS.SOP.CR5.bitreg // DAA_REGS.SOP_REGS.SOP.CR5.bitreg.V_2 // DAA_REGS.SOP_REGS.ByteRegs[5] //----------------------------------------------- // XOP Registers // BYTE byXOP; union _XOP_REGS { struct _XOP { union // XOP - XR0 Register - Read values { BYTE reg; struct _XR0_BITREGS { BYTE SI_0:1; // XR0[0:0] - Read BYTE SI_1:1; // XR0[1:1] - Read BYTE VDD_OK:1; // XR0[2:2] - Read BYTE Caller_ID:1; // XR0[3:3] - Read BYTE RING:1; // XR0[4:4] - Read BYTE Cadence:1; // XR0[5:5] - Read BYTE Wake_up:1; // XR0[6:6] - Read BYTE unused:1; // XR0[7:7] - Read } bitreg; } xr0; union // XOP - XR1 Register { BYTE reg; struct _XR1_BITREGS { BYTE M_SI_0:1; // XR1[0:0] BYTE M_SI_1:1; // XR1[1:1] BYTE M_VDD_OK:1; // XR1[2:2] BYTE M_Caller_ID:1; // XR1[3:3] BYTE M_RING:1; // XR1[4:4] BYTE M_Cadence:1; // XR1[5:5] BYTE M_Wake_up:1; // XR1[6:6] BYTE unused:1; // XR1[7:7] } bitreg; } xr1; union // XOP - XR2 Register { BYTE reg; struct _XR2_BITREGS { BYTE CTO0:1; // XR2[0:0] BYTE CTO1:1; // XR2[1:1] BYTE CTO2:1; // XR2[2:2] BYTE CTO3:1; // XR2[3:3] BYTE CTO4:1; // XR2[4:4] BYTE CTO5:1; // XR2[5:5] BYTE CTO6:1; // XR2[6:6] BYTE CTO7:1; // XR2[7:7] } bitreg; } xr2; union // XOP - XR3 Register { BYTE reg; struct _XR3_BITREGS { BYTE DCR0:1; // XR3[0:0] BYTE DCR1:1; // XR3[1:1] BYTE DCI:1; // XR3[2:2] BYTE DCU0:1; // XR3[3:3] BYTE DCU1:1; // XR3[4:4] BYTE B_off:1; // XR3[5:5] BYTE AGB0:1; // XR3[6:6] BYTE AGB1:1; // XR3[7:7] } bitreg; } xr3; union // XOP - XR4 Register { BYTE reg; struct _XR4_BITREGS { BYTE C_0:1; // XR4[0:0] BYTE C_1:1; // XR4[1:1] BYTE C_2:1; // XR4[2:2] BYTE C_3:1; // XR4[3:3] BYTE C_4:1; // XR4[4:4] BYTE C_5:1; // XR4[5:5] BYTE C_6:1; // XR4[6:6] BYTE C_7:1; // XR4[7:7] } bitreg; } xr4; union // XOP - XR5 Register { BYTE reg; struct _XR5_BITREGS { BYTE T_0:1; // XR5[0:0] BYTE T_1:1; // XR5[1:1] BYTE T_2:1; // XR5[2:2] BYTE T_3:1; // XR5[3:3] BYTE T_4:1; // XR5[4:4] BYTE T_5:1; // XR5[5:5] BYTE T_6:1; // XR5[6:6] BYTE T_7:1; // XR5[7:7] } bitreg; } xr5; union // XOP - XR6 Register - Read Values { BYTE reg; struct _XR6_BITREGS { BYTE CPS0:1; // XR6[0:0] BYTE CPS1:1; // XR6[1:1] BYTE unused1:2; // XR6[2:3] BYTE CLK_OFF:1; // XR6[4:4] BYTE unused2:3; // XR6[5:7] } bitreg; } xr6; union // XOP - XR7 Register { BYTE reg; struct _XR7_BITREGS { BYTE unused1:1; // XR7[0:0] BYTE Vdd0:1; // XR7[1:1] BYTE Vdd1:1; // XR7[2:2] BYTE unused2:5; // XR7[3:7] } bitreg; } xr7; } XOP; BYTE ByteRegs[sizeof(struct _XOP)]; } XOP_REGS; // DAA_REGS.XOP_REGS.XOP.XR7.reg // DAA_REGS.XOP_REGS.XOP.XR7.bitreg // DAA_REGS.XOP_REGS.XOP.XR7.bitreg.Vdd0 // DAA_REGS.XOP_REGS.ByteRegs[7] //----------------------------------------------- // COP Registers // BYTE byCOP; union _COP_REGS { struct _COP { BYTE THFilterCoeff_1[8]; // COP - TH Filter Coefficients, CODE=0, Part 1 BYTE THFilterCoeff_2[8]; // COP - TH Filter Coefficients, CODE=1, Part 2 BYTE THFilterCoeff_3[8]; // COP - TH Filter Coefficients, CODE=2, Part 3 BYTE RingerImpendance_1[8]; // COP - Ringer Impendance Coefficients, CODE=3, Part 1 BYTE IMFilterCoeff_1[8]; // COP - IM Filter Coefficients, CODE=4, Part 1 BYTE IMFilterCoeff_2[8]; // COP - IM Filter Coefficients, CODE=5, Part 2 BYTE RingerImpendance_2[8]; // COP - Ringer Impendance Coefficients, CODE=6, Part 2 BYTE FRRFilterCoeff[8]; // COP - FRR Filter Coefficients, CODE=7 BYTE FRXFilterCoeff[8]; // COP - FRX Filter Coefficients, CODE=8 BYTE ARFilterCoeff[4]; // COP - AR Filter Coefficients, CODE=9 BYTE AXFilterCoeff[4]; // COP - AX Filter Coefficients, CODE=10 BYTE Tone1Coeff[4]; // COP - Tone1 Coefficients, CODE=11 BYTE Tone2Coeff[4]; // COP - Tone2 Coefficients, CODE=12 BYTE LevelmeteringRinging[4]; // COP - Levelmetering Ringing, CODE=13 BYTE CallerID1stTone[8]; // COP - Caller ID 1st Tone, CODE=14 BYTE CallerID2ndTone[8]; // COP - Caller ID 2nd Tone, CODE=15 } COP; BYTE ByteRegs[sizeof(struct _COP)]; } COP_REGS; // DAA_REGS.COP_REGS.COP.XR7.Tone1Coeff[3] // DAA_REGS.COP_REGS.COP.XR7.bitreg // DAA_REGS.COP_REGS.COP.XR7.bitreg.Vdd0 // DAA_REGS.COP_REGS.ByteRegs[57] //----------------------------------------------- // CAO Registers // BYTE byCAO; union _CAO_REGS { struct _CAO { BYTE CallerID[512]; // CAO - Caller ID Bytes } CAO; BYTE ByteRegs[sizeof(struct _CAO)]; } CAO_REGS; union // XOP - XR0 Register - Write values { BYTE reg; struct _XR0_BITREGSW { BYTE SO_0:1; // XR1[0:0] - Write BYTE SO_1:1; // XR1[1:1] - Write BYTE SO_2:1; // XR1[2:2] - Write BYTE unused:5; // XR1[3:7] - Write } bitreg; } XOP_xr0_W; union // XOP - XR6 Register - Write values { BYTE reg; struct _XR6_BITREGSW { BYTE unused1:4; // XR6[0:3] BYTE CLK_OFF:1; // XR6[4:4] BYTE unused2:3; // XR6[5:7] } bitreg; } XOP_xr6_W; } DAA_REGS; #define ALISDAA_ID_BYTE 0x81 #define ALISDAA_CALLERID_SIZE 512 //------------------------------ // // Misc definitions // // Power Up Operation #define SOP_PU_SLEEP 0 #define SOP_PU_RINGING 1 #define SOP_PU_CONVERSATION 2 #define SOP_PU_PULSEDIALING 3 #define ALISDAA_CALLERID_SIZE 512 #define PLAYBACK_MODE_COMPRESSED 0 // Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729 #define PLAYBACK_MODE_TRUESPEECH_V40 0 // Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps #define PLAYBACK_MODE_TRUESPEECH 8 // Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps Version 5.1 #define PLAYBACK_MODE_ULAW 2 // Selects: 64 Kbit/sec MuA-law PCM #define PLAYBACK_MODE_ALAW 10 // Selects: 64 Kbit/sec A-law PCM #define PLAYBACK_MODE_16LINEAR 6 // Selects: 128 Kbit/sec 16-bit linear #define PLAYBACK_MODE_8LINEAR 4 // Selects: 64 Kbit/sec 8-bit signed linear #define PLAYBACK_MODE_8LINEAR_WSS 5 // Selects: 64 Kbit/sec WSS 8-bit unsigned linear #define RECORD_MODE_COMPRESSED 0 // Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729 #define RECORD_MODE_TRUESPEECH 0 // Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps #define RECORD_MODE_ULAW 4 // Selects: 64 Kbit/sec Mu-law PCM #define RECORD_MODE_ALAW 12 // Selects: 64 Kbit/sec A-law PCM #define RECORD_MODE_16LINEAR 5 // Selects: 128 Kbit/sec 16-bit linear #define RECORD_MODE_8LINEAR 6 // Selects: 64 Kbit/sec 8-bit signed linear #define RECORD_MODE_8LINEAR_WSS 7 // Selects: 64 Kbit/sec WSS 8-bit unsigned linear enum SLIC_STATES { PLD_SLIC_STATE_OC = 0, PLD_SLIC_STATE_RINGING, PLD_SLIC_STATE_ACTIVE, PLD_SLIC_STATE_OHT, PLD_SLIC_STATE_TIPOPEN, PLD_SLIC_STATE_STANDBY, PLD_SLIC_STATE_APR, PLD_SLIC_STATE_OHTPR }; enum SCI_CONTROL { SCI_End = 0, SCI_Enable_DAA, SCI_Enable_Mixer, SCI_Enable_EEPROM }; enum Mode { T63, T53, T48, T40 }; enum Dir { V3_TO_V4, V4_TO_V3, V4_TO_V5, V5_TO_V4 }; typedef struct Proc_Info_Tag { enum Mode convert_mode; enum Dir convert_dir; int Prev_Frame_Type; int Current_Frame_Type; } Proc_Info_Type; enum PREVAL { NORMAL = 0, NOPOST, POSTONLY, PREERROR }; enum IXJ_EXTENSIONS { G729LOADER = 0, TS85LOADER, PRE_READ, POST_READ, PRE_WRITE, POST_WRITE, PRE_IOCTL, POST_IOCTL }; typedef struct { char enable; char en_filter; unsigned int filter; unsigned int state; // State 0 when cadence has not started. unsigned int on1; // State 1 unsigned long on1min; // State 1 - 10% + jiffies unsigned long on1dot; // State 1 + jiffies unsigned long on1max; // State 1 + 10% + jiffies unsigned int off1; // State 2 unsigned long off1min; unsigned long off1max; unsigned int on2; // State 3 unsigned long on2min; unsigned long on2dot; unsigned long on2max; unsigned int off2; // State 4 unsigned long off2min; unsigned long off2max; unsigned int on3; // State 5 unsigned long on3min; unsigned long on3dot; unsigned long on3max; unsigned int off3; // State 6 unsigned long off3min; unsigned long off3max; } IXJ_CADENCE_F; typedef struct { unsigned int busytone:1; unsigned int dialtone:1; unsigned int ringback:1; unsigned int ringing:1; unsigned int playing:1; unsigned int recording:1; unsigned int cringing:1; unsigned int play_first_frame:1; unsigned int pstn_present:1; unsigned int pstn_ringing:1; unsigned int pots_correct:1; unsigned int pots_pstn:1; unsigned int g729_loaded:1; unsigned int ts85_loaded:1; unsigned int dtmf_oob:1; // DTMF Out-Of-Band unsigned int pcmciascp:1; // Smart Cable Present unsigned int pcmciasct:2; // Smart Cable Type unsigned int pcmciastate:3; // Smart Cable Init State unsigned int inwrite:1; // Currently writing unsigned int inread:1; // Currently reading unsigned int incheck:1; // Currently checking the smart cable unsigned int cidplay:1; // Currently playing Caller ID unsigned int cidring:1; // This is the ring for Caller ID unsigned int cidsent:1; // Caller ID has been sent unsigned int cidcw_ack:1; // Caller ID CW ACK (from CPE) unsigned int x:6; // unsed bits } IXJ_FLAGS; /****************************************************************************** * * This structure represents the Internet PhoneJACK and Internet LineJACK * ******************************************************************************/ typedef struct { struct phone_device p; unsigned int board; unsigned int DSPbase; unsigned int XILINXbase; unsigned int serial; struct phone_capability caplist[30]; unsigned int caps; unsigned int country; struct pci_dev *dev; unsigned int cardtype; unsigned int rec_codec; char rec_mode; unsigned int play_codec; unsigned int cid_play_codec; char play_mode; IXJ_FLAGS flags; unsigned int rec_frame_size; unsigned int play_frame_size; unsigned int cid_base_frame_size; unsigned long cidcw_wait; int aec_level; int readers, writers; wait_queue_head_t poll_q; wait_queue_head_t read_q; char *read_buffer, *read_buffer_end; char *read_convert_buffer; unsigned int read_buffer_size; unsigned int read_buffer_ready; wait_queue_head_t write_q; char *write_buffer, *write_buffer_end; char *write_convert_buffer; unsigned int write_buffer_size; unsigned int write_buffers_empty; unsigned long drybuffer; char *write_buffer_rp, *write_buffer_wp; char dtmfbuffer[80]; char dtmf_current; int dtmf_wp, dtmf_rp, dtmf_state, dtmf_proc; int tone_off_time, tone_on_time; struct fasync_struct *async_queue; unsigned long tone_start_jif; char tone_index; char tone_state; char maxrings; IXJ_CADENCE *cadence_t; int tone_cadence_state; IXJ_CADENCE_F cadence_f[4]; DTMF dtmf; CPTF cptf; BYTES dsp; BYTES ver; BYTES scr; BYTES ssr; BYTES baseframe; HSR hsr; GPIO gpio; PLD_SCRR pld_scrr; PLD_SCRW pld_scrw; PLD_SLICW pld_slicw; PLD_SLICR pld_slicr; PLD_CLOCK pld_clock; PCMCIA_CR1 pccr1; PCMCIA_CR2 pccr2; PCMCIA_SCCR psccr; PCMCIA_SLIC pslic; char pscdd; Si3C1 sic1; Si3C2 sic2; Si3RXG sirxg; Si3ADC siadc; Si3DAC sidac; Si3STAT sistat; Si3AATT siaatt; MIX mix; unsigned short ring_cadence; int ring_cadence_t; unsigned long ring_cadence_jif; unsigned long checkwait; int intercom; int m_hook; int r_hook; char pstn_envelope; char pstn_cid_intr; unsigned char fskz; unsigned char fskphase; unsigned char fskcnt; unsigned pstn_cid_received; PHONE_CID cid; PHONE_CID cid_send; unsigned long pstn_ring_start; unsigned long pstn_ring_stop; unsigned long pstn_winkstart; unsigned int winktime; unsigned long flash_end; char port; union telephony_exception ex; char daa_mode; char daa_country; unsigned long pstn_sleeptil; DAA_REGS m_DAAShadowRegs; Proc_Info_Type Info_read; Proc_Info_Type Info_write; unsigned short frame_count; unsigned int filter_hist[4]; unsigned char filter_en[4]; unsigned short proc_load; unsigned long framesread; unsigned long frameswritten; unsigned long read_wait; unsigned long write_wait; unsigned long timerchecks; unsigned long txreadycheck; unsigned long rxreadycheck; short fskdata[8000]; int fskdcnt; } IXJ; int ixj_WriteDSPCommand(unsigned short, IXJ *); typedef int (*IXJ_REGFUNC) (IXJ * j, unsigned long arg); int ixj_register(int index, IXJ_REGFUNC regfunc); int ixj_unregister(int index);