2005-04-17 02:20:36 +04:00
/******************************************************************************
* 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 ] ;
2006-11-09 04:44:45 +03:00
unsigned char filter_en [ 6 ] ;
2005-04-17 02:20:36 +04:00
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 ) ;