|  | /****************************************************************************** | 
|  | *    ixj.h | 
|  | * | 
|  | * | 
|  | * Device Driver for Quicknet Technologies, Inc.'s Telephony cards | 
|  | * including the Internet PhoneJACK, Internet PhoneJACK Lite, | 
|  | * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and | 
|  | * SmartCABLE | 
|  | * | 
|  | *    (c) Copyright 1999-2001  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, <eokerson@quicknet.net> | 
|  | * | 
|  | * Contributors:    Greg Herlein, <gherlein@quicknet.net> | 
|  | *                  David W. Erhart, <derhart@quicknet.net> | 
|  | *                  John Sellers, <jsellers@quicknet.net> | 
|  | *                  Mike Preston, <mpreston@quicknet.net> | 
|  | * | 
|  | * 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. | 
|  | * | 
|  | *****************************************************************************/ | 
|  | #define IXJ_VERSION 3031 | 
|  |  | 
|  | #include <linux/types.h> | 
|  |  | 
|  | #include <linux/ixjuser.h> | 
|  | #include <linux/phonedev.h> | 
|  |  | 
|  | typedef __u16 WORD; | 
|  | typedef __u32 DWORD; | 
|  | typedef __u8 BYTE; | 
|  |  | 
|  | #ifndef IXJMAX | 
|  | #define IXJMAX 16 | 
|  | #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;	/* SmartCABLE 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;	/* SmartCABLE Reset */ | 
|  |  | 
|  | unsigned int pwr:1;	/* SmartCABLE 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 SmartCABLE Register Address */ | 
|  |  | 
|  | unsigned int rw:1;	/* Read / Write flag */ | 
|  |  | 
|  | unsigned int dev:2;	/* 2 bit SmartCABLE 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	XOPXR0/* 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 RMR: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 SOP_PU_RESET    4 | 
|  |  | 
|  | #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 off1dot;	/* State 2 + jiffies */ | 
|  | 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 off2dot;	/* State 4 + jiffies */ | 
|  | 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 off3dot;	/* State 6 + jiffies */ | 
|  | 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;	/* SmartCABLE Present */ | 
|  |  | 
|  | unsigned int pcmciasct:2;	/* SmartCABLE Type */ | 
|  |  | 
|  | unsigned int pcmciastate:3;	/* SmartCABLE Init State */ | 
|  |  | 
|  | unsigned int inwrite:1;	/* Currently writing */ | 
|  |  | 
|  | unsigned int inread:1;	/* Currently reading */ | 
|  |  | 
|  | unsigned int incheck:1;	/* Currently checking the SmartCABLE */ | 
|  |  | 
|  | 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 firstring:1; /* First ring cadence is complete */ | 
|  | unsigned int pstncheck:1;	/* Currently checking the PSTN Line */ | 
|  | unsigned int pstn_rmr:1; | 
|  | unsigned int x:3;	/* unsed bits */ | 
|  |  | 
|  | } IXJ_FLAGS; | 
|  |  | 
|  | /****************************************************************************** | 
|  | * | 
|  | *  This structure holds the state of all of the Quicknet cards | 
|  | * | 
|  | ******************************************************************************/ | 
|  |  | 
|  | typedef struct { | 
|  | int elements_used; | 
|  | IXJ_CADENCE_TERM termination; | 
|  | IXJ_CADENCE_ELEMENT *ce; | 
|  | } ixj_cadence; | 
|  |  | 
|  | typedef struct { | 
|  | struct phone_device p; | 
|  | struct timer_list timer; | 
|  | unsigned int board; | 
|  | unsigned int DSPbase; | 
|  | unsigned int XILINXbase; | 
|  | unsigned int serial; | 
|  | atomic_t DSPWrite; | 
|  | struct phone_capability caplist[30]; | 
|  | unsigned int caps; | 
|  | struct pnp_dev *dev; | 
|  | unsigned int cardtype; | 
|  | unsigned int rec_codec; | 
|  | unsigned int cid_rec_codec; | 
|  | unsigned int cid_rec_volume; | 
|  | unsigned char cid_rec_flag; | 
|  | signed char rec_mode; | 
|  | unsigned int play_codec; | 
|  | unsigned int cid_play_codec; | 
|  | unsigned int cid_play_volume; | 
|  | unsigned char cid_play_flag; | 
|  | signed char play_mode; | 
|  | IXJ_FLAGS flags; | 
|  | unsigned long busyflags; | 
|  | unsigned int rec_frame_size; | 
|  | unsigned int play_frame_size; | 
|  | unsigned int cid_play_frame_size; | 
|  | unsigned int cid_base_frame_size; | 
|  | unsigned long cidcw_wait; | 
|  | int aec_level; | 
|  | int cid_play_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; | 
|  | size_t read_buffer_size; | 
|  | unsigned int read_buffer_ready; | 
|  | wait_queue_head_t write_q; | 
|  | char *write_buffer, *write_buffer_end; | 
|  | char *write_convert_buffer; | 
|  | size_t 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; | 
|  | ixj_cadence *cadence_r; | 
|  | int tone_cadence_state; | 
|  | IXJ_CADENCE_F cadence_f[6]; | 
|  | 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; | 
|  | int p_hook; | 
|  | char pstn_envelope; | 
|  | char pstn_cid_intr; | 
|  | unsigned char fskz; | 
|  | unsigned char fskphase; | 
|  | unsigned char fskcnt; | 
|  | unsigned int cidsize; | 
|  | unsigned int cidcnt; | 
|  | unsigned long pstn_cid_received; | 
|  | PHONE_CID cid; | 
|  | PHONE_CID cid_send; | 
|  | unsigned long pstn_ring_int; | 
|  | unsigned long pstn_ring_start; | 
|  | unsigned long pstn_ring_stop; | 
|  | unsigned long pstn_winkstart; | 
|  | unsigned long pstn_last_rmr; | 
|  | unsigned long pstn_prev_rmr; | 
|  | unsigned long pots_winkstart; | 
|  | unsigned int winktime; | 
|  | unsigned long flash_end; | 
|  | char port; | 
|  | char hookstate; | 
|  | union telephony_exception ex; | 
|  | union telephony_exception ex_sig; | 
|  | int ixj_signals[35]; | 
|  | IXJ_SIGDEF sigdef; | 
|  | 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[6]; | 
|  | 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; | 
|  | unsigned long statuswait; | 
|  | unsigned long statuswaitfail; | 
|  | unsigned long pcontrolwait; | 
|  | unsigned long pcontrolwaitfail; | 
|  | unsigned long iscontrolready; | 
|  | unsigned long iscontrolreadyfail; | 
|  | unsigned long pstnstatecheck; | 
|  | #ifdef IXJ_DYN_ALLOC | 
|  | short *fskdata; | 
|  | #else | 
|  | short fskdata[8000]; | 
|  | #endif | 
|  | int fsksize; | 
|  | int fskdcnt; | 
|  | } IXJ; | 
|  |  | 
|  | typedef int (*IXJ_REGFUNC) (IXJ * j, unsigned long arg); | 
|  |  | 
|  | extern IXJ *ixj_pcmcia_probe(unsigned long, unsigned long); | 
|  |  |