diff --git a/drivers/telephony/ixj.h b/drivers/telephony/ixj.h
new file mode 100644
index 0000000..143818a
--- /dev/null
+++ b/drivers/telephony/ixj.h
@@ -0,0 +1,1329 @@
+/******************************************************************************
+ *    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);
+
