/******************************************************************************
 *    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.
 *
 *****************************************************************************/
static char ixj_h_rcsid[] = "$Id: ixj.h,v 4.1 2001/08/04 14:49:27 craigs Exp $";

#define IXJ_VERSION 3031

#include <linux/version.h>
#include <linux/types.h>

#include <linux/ixjuser.h>
#include <linux/phonedev.h>

typedef __u16 WORD;
typedef __u32 DWORD;
typedef __u8 BYTE;
typedef __u8 BOOL;

#ifndef IXJMAX
#define IXJMAX 16
#endif

#define TRUE 1
#define FALSE 0

/******************************************************************************
*
*  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[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;
	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);

