File: /usr/src/linux/drivers/telephony/ixj.h

1     /******************************************************************************
2      *    ixj.h
3      *
4      *
5      * Device Driver for Quicknet Technologies, Inc.'s Telephony cards
6      * including the Internet PhoneJACK, Internet PhoneJACK Lite,
7      * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and
8      * SmartCABLE
9      *
10      *    (c) Copyright 1999-2001  Quicknet Technologies, Inc.
11      *
12      *    This program is free software; you can redistribute it and/or
13      *    modify it under the terms of the GNU General Public License
14      *    as published by the Free Software Foundation; either version
15      *    2 of the License, or (at your option) any later version.
16      *
17      * Author:          Ed Okerson, <eokerson@quicknet.net>
18      *    
19      * Contributors:    Greg Herlein, <gherlein@quicknet.net>
20      *                  David W. Erhart, <derhart@quicknet.net>
21      *                  John Sellers, <jsellers@quicknet.net>
22      *                  Mike Preston, <mpreston@quicknet.net>
23      *
24      * More information about the hardware related to this driver can be found
25      * at our website:    http://www.quicknet.net
26      *
27      * Fixes:
28      *
29      * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
30      * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
31      * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
32      * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33      *
34      * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
35      * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
36      * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
37      * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION 
38      * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
39      *
40      *****************************************************************************/
41     static char ixj_h_rcsid[] = "$Id: ixj.h,v 4.1 2001/08/04 14:49:27 craigs Exp $";
42     
43     #define IXJ_VERSION 3031
44     
45     #include <linux/types.h>
46     
47     #include <linux/ixjuser.h>
48     #include <linux/phonedev.h>
49     
50     typedef __u16 WORD;
51     typedef __u32 DWORD;
52     typedef __u8 BYTE;
53     typedef __u8 BOOL;
54     
55     #ifndef IXJMAX
56     #define IXJMAX 16
57     #endif
58     
59     #define TRUE 1
60     #define FALSE 0
61     
62     #ifndef min
63     #define min(a,b) (((a)<(b))?(a):(b))
64     #endif
65     #ifndef max
66     #define max(a,b) (((a)>(b))?(a):(b))
67     #endif
68     
69     /******************************************************************************
70     *
71     *  This structure when unioned with the structures below makes simple byte
72     *  access to the registers easier.
73     *
74     ******************************************************************************/
75     typedef struct {
76     	unsigned char low;
77     	unsigned char high;
78     } BYTES;
79     
80     typedef union {
81             BYTES bytes;
82             short word;
83     } IXJ_WORD;
84     
85     typedef struct{
86     	unsigned int b0:1;
87     	unsigned int b1:1;
88     	unsigned int b2:1;
89     	unsigned int b3:1;
90     	unsigned int b4:1;
91     	unsigned int b5:1;
92     	unsigned int b6:1;
93     	unsigned int b7:1;
94     } IXJ_CBITS;
95     
96     typedef union{
97     	IXJ_CBITS cbits;
98     	  char  cbyte;
99     } IXJ_CBYTE;
100     
101     /******************************************************************************
102     *
103     *  This structure represents the Hardware Control Register of the CT8020/8021
104     *  The CT8020 is used in the Internet PhoneJACK, and the 8021 in the
105     *  Internet LineJACK
106     *
107     ******************************************************************************/
108     typedef struct {
109     	unsigned int rxrdy:1;
110     	unsigned int txrdy:1;
111     	unsigned int status:1;
112     	unsigned int auxstatus:1;
113     	unsigned int rxdma:1;
114     	unsigned int txdma:1;
115     	unsigned int rxburst:1;
116     	unsigned int txburst:1;
117     	unsigned int dmadir:1;
118     	unsigned int cont:1;
119     	unsigned int irqn:1;
120     	unsigned int t:5;
121     } HCRBIT;
122     
123     typedef union {
124     	HCRBIT bits;
125     	BYTES bytes;
126     } HCR;
127     
128     /******************************************************************************
129     *
130     *  This structure represents the Hardware Status Register of the CT8020/8021
131     *  The CT8020 is used in the Internet PhoneJACK, and the 8021 in the
132     *  Internet LineJACK
133     *
134     ******************************************************************************/
135     typedef struct {
136     	unsigned int controlrdy:1;
137     	unsigned int auxctlrdy:1;
138     	unsigned int statusrdy:1;
139     	unsigned int auxstatusrdy:1;
140     	unsigned int rxrdy:1;
141     	unsigned int txrdy:1;
142     	unsigned int restart:1;
143     	unsigned int irqn:1;
144     	unsigned int rxdma:1;
145     	unsigned int txdma:1;
146     	unsigned int cohostshutdown:1;
147     	unsigned int t:5;
148     } HSRBIT;
149     
150     typedef union {
151     	HSRBIT bits;
152     	BYTES bytes;
153     } HSR;
154     
155     /******************************************************************************
156     *
157     *  This structure represents the General Purpose IO Register of the CT8020/8021
158     *  The CT8020 is used in the Internet PhoneJACK, and the 8021 in the
159     *  Internet LineJACK
160     *
161     ******************************************************************************/
162     typedef struct {
163     	unsigned int x:1;
164     	unsigned int gpio1:1;
165     	unsigned int gpio2:1;
166     	unsigned int gpio3:1;
167     	unsigned int gpio4:1;
168     	unsigned int gpio5:1;
169     	unsigned int gpio6:1;
170     	unsigned int gpio7:1;
171     	unsigned int xread:1;
172     	unsigned int gpio1read:1;
173     	unsigned int gpio2read:1;
174     	unsigned int gpio3read:1;
175     	unsigned int gpio4read:1;
176     	unsigned int gpio5read:1;
177     	unsigned int gpio6read:1;
178     	unsigned int gpio7read:1;
179     } GPIOBIT;
180     
181     typedef union {
182     	GPIOBIT bits;
183     	BYTES bytes;
184     	unsigned short word;
185     } GPIO;
186     
187     /******************************************************************************
188     *
189     *  This structure represents the Line Monitor status response
190     *
191     ******************************************************************************/
192     typedef struct {
193     	unsigned int digit:4;
194     	unsigned int cpf_valid:1;
195     	unsigned int dtmf_valid:1;
196     	unsigned int peak:1;
197     	unsigned int z:1;
198     	unsigned int f0:1;
199     	unsigned int f1:1;
200     	unsigned int f2:1;
201     	unsigned int f3:1;
202     	unsigned int frame:4;
203     } LMON;
204     
205     typedef union {
206     	LMON bits;
207     	BYTES bytes;
208     } DTMF;
209     
210     typedef struct {
211     	unsigned int z:7;
212     	unsigned int dtmf_en:1;
213     	unsigned int y:4;
214     	unsigned int F3:1;
215     	unsigned int F2:1;
216     	unsigned int F1:1;
217     	unsigned int F0:1;
218     } CP;
219     
220     typedef union {
221     	CP bits;
222     	BYTES bytes;
223     } CPTF;
224     
225     /******************************************************************************
226     *
227     *  This structure represents the Status Control Register on the Internet
228     *  LineJACK
229     *
230     ******************************************************************************/
231     typedef struct {
232     	unsigned int c0:1;
233     	unsigned int c1:1;
234     	unsigned int stereo:1;
235     	unsigned int daafsyncen:1;
236     	unsigned int led1:1;
237     	unsigned int led2:1;
238     	unsigned int led3:1;
239     	unsigned int led4:1;
240     } PSCRWI;			/* Internet LineJACK and Internet PhoneJACK Lite */
241     
242     typedef struct {
243     	unsigned int eidp:1;
244     	unsigned int eisd:1;
245     	unsigned int x:6;
246     } PSCRWP;			/* Internet PhoneJACK PCI */
247     
248     typedef union {
249     	PSCRWI bits;
250     	PSCRWP pcib;
251     	char byte;
252     } PLD_SCRW;
253     
254     typedef struct {
255     	unsigned int c0:1;
256     	unsigned int c1:1;
257     	unsigned int x:1;
258     	unsigned int d0ee:1;
259     	unsigned int mixerbusy:1;
260     	unsigned int sci:1;
261     	unsigned int dspflag:1;
262     	unsigned int daaflag:1;
263     } PSCRRI;
264     
265     typedef struct {
266     	unsigned int eidp:1;
267     	unsigned int eisd:1;
268     	unsigned int x:4;
269     	unsigned int dspflag:1;
270     	unsigned int det:1;
271     } PSCRRP;
272     
273     typedef union {
274     	PSCRRI bits;
275     	PSCRRP pcib;
276     	char byte;
277     } PLD_SCRR;
278     
279     /******************************************************************************
280     *
281     *  These structures represents the SLIC Control Register on the
282     *  Internet LineJACK
283     *
284     ******************************************************************************/
285     typedef struct {
286     	unsigned int c1:1;
287     	unsigned int c2:1;
288     	unsigned int c3:1;
289     	unsigned int b2en:1;
290     	unsigned int spken:1;
291     	unsigned int rly1:1;
292     	unsigned int rly2:1;
293     	unsigned int rly3:1;
294     } PSLICWRITE;
295     
296     typedef struct {
297     	unsigned int state:3;
298     	unsigned int b2en:1;
299     	unsigned int spken:1;
300     	unsigned int c3:1;
301     	unsigned int potspstn:1;
302     	unsigned int det:1;
303     } PSLICREAD;
304     
305     typedef struct {
306     	unsigned int c1:1;
307     	unsigned int c2:1;
308     	unsigned int c3:1;
309     	unsigned int b2en:1;
310     	unsigned int e1:1;
311     	unsigned int mic:1;
312     	unsigned int spk:1;
313     	unsigned int x:1;
314     } PSLICPCI;
315     
316     typedef union {
317     	PSLICPCI pcib;
318     	PSLICWRITE bits;
319     	PSLICREAD slic;
320     	char byte;
321     } PLD_SLICW;
322     
323     typedef union {
324     	PSLICPCI pcib;
325     	PSLICREAD bits;
326     	char byte;
327     } PLD_SLICR;
328     
329     /******************************************************************************
330     *
331     *  These structures represents the Clock Control Register on the
332     *  Internet LineJACK
333     *
334     ******************************************************************************/
335     typedef struct {
336     	unsigned int clk0:1;
337     	unsigned int clk1:1;
338     	unsigned int clk2:1;
339     	unsigned int x0:1;
340     	unsigned int slic_e1:1;
341     	unsigned int x1:1;
342     	unsigned int x2:1;
343     	unsigned int x3:1;
344     } PCLOCK;
345     
346     typedef union {
347     	PCLOCK bits;
348     	char byte;
349     } PLD_CLOCK;
350     
351     /******************************************************************************
352     *
353     *  These structures deal with the mixer on the Internet LineJACK
354     *
355     ******************************************************************************/
356     
357     typedef struct {
358     	unsigned short vol[10];
359     	unsigned int recsrc;
360     	unsigned int modcnt;
361     	unsigned short micpreamp;
362     } MIX;
363     
364     /******************************************************************************
365     *
366     *  These structures deal with the control logic on the Internet PhoneCARD
367     *
368     ******************************************************************************/
369     typedef struct {
370     	unsigned int x0:4;	/* unused bits */
371     
372     	unsigned int ed:1;	/* Event Detect */
373     
374     	unsigned int drf:1;	/* SmartCABLE Removal Flag 1=no cable */
375     
376     	unsigned int dspf:1;	/* DSP Flag 1=DSP Ready */
377     
378     	unsigned int crr:1;	/* Control Register Ready */
379     
380     } COMMAND_REG1;
381     
382     typedef union {
383     	COMMAND_REG1 bits;
384     	unsigned char byte;
385     } PCMCIA_CR1;
386     
387     typedef struct {
388     	unsigned int x0:4;	/* unused bits */
389     
390     	unsigned int rstc:1;	/* SmartCABLE Reset */
391     
392     	unsigned int pwr:1;	/* SmartCABLE Power */
393     
394     	unsigned int x1:2;	/* unused bits */
395     
396     } COMMAND_REG2;
397     
398     typedef union {
399     	COMMAND_REG2 bits;
400     	unsigned char byte;
401     } PCMCIA_CR2;
402     
403     typedef struct {
404     	unsigned int addr:5;	/* R/W SmartCABLE Register Address */
405     
406     	unsigned int rw:1;	/* Read / Write flag */
407     
408     	unsigned int dev:2;	/* 2 bit SmartCABLE Device Address */
409     
410     } CONTROL_REG;
411     
412     typedef union {
413     	CONTROL_REG bits;
414     	unsigned char byte;
415     } PCMCIA_SCCR;
416     
417     typedef struct {
418     	unsigned int hsw:1;
419     	unsigned int det:1;
420     	unsigned int led2:1;
421     	unsigned int led1:1;
422     	unsigned int ring1:1;
423     	unsigned int ring0:1;
424     	unsigned int x:1;
425     	unsigned int powerdown:1;
426     } PCMCIA_SLIC_REG;
427     
428     typedef union {
429     	PCMCIA_SLIC_REG bits;
430     	unsigned char byte;
431     } PCMCIA_SLIC;
432     
433     typedef struct {
434     	unsigned int cpd:1;	/* Chip Power Down */
435     
436     	unsigned int mpd:1;	/* MIC Bias Power Down */
437     
438     	unsigned int hpd:1;	/* Handset Drive Power Down */
439     
440     	unsigned int lpd:1;	/* Line Drive Power Down */
441     
442     	unsigned int spd:1;	/* Speaker Drive Power Down */
443     
444     	unsigned int x:2;	/* unused bits */
445     
446     	unsigned int sr:1;	/* Software Reset */
447     
448     } Si3CONTROL1;
449     
450     typedef union {
451     	Si3CONTROL1 bits;
452     	unsigned char byte;
453     } Si3C1;
454     
455     typedef struct {
456     	unsigned int al:1;	/* Analog Loopback DAC analog -> ADC analog */
457     
458     	unsigned int dl2:1;	/* Digital Loopback DAC -> ADC one bit */
459     
460     	unsigned int dl1:1;	/* Digital Loopback ADC -> DAC one bit */
461     
462     	unsigned int pll:1;	/* 1 = div 10, 0 = div 5 */
463     
464     	unsigned int hpd:1;	/* HPF disable */
465     
466     	unsigned int x:3;	/* unused bits */
467     
468     } Si3CONTROL2;
469     
470     typedef union {
471     	Si3CONTROL2 bits;
472     	unsigned char byte;
473     } Si3C2;
474     
475     typedef struct {
476     	unsigned int iir:1;	/* 1 enables IIR, 0 enables FIR */
477     
478     	unsigned int him:1;	/* Handset Input Mute */
479     
480     	unsigned int mcm:1;	/* MIC In Mute */
481     
482     	unsigned int mcg:2;	/* MIC In Gain */
483     
484     	unsigned int lim:1;	/* Line In Mute */
485     
486     	unsigned int lig:2;	/* Line In Gain */
487     
488     } Si3RXGAIN;
489     
490     typedef union {
491     	Si3RXGAIN bits;
492     	unsigned char byte;
493     } Si3RXG;
494     
495     typedef struct {
496     	unsigned int hom:1;	/* Handset Out Mute */
497     
498     	unsigned int lom:1;	/* Line Out Mute */
499     
500     	unsigned int rxg:5;	/* RX PGA Gain */
501     
502     	unsigned int x:1;	/* unused bit */
503     
504     } Si3ADCVOLUME;
505     
506     typedef union {
507     	Si3ADCVOLUME bits;
508     	unsigned char byte;
509     } Si3ADC;
510     
511     typedef struct {
512     	unsigned int srm:1;	/* Speaker Right Mute */
513     
514     	unsigned int slm:1;	/* Speaker Left Mute */
515     
516     	unsigned int txg:5;	/* TX PGA Gain */
517     
518     	unsigned int x:1;	/* unused bit */
519     
520     } Si3DACVOLUME;
521     
522     typedef union {
523     	Si3DACVOLUME bits;
524     	unsigned char byte;
525     } Si3DAC;
526     
527     typedef struct {
528     	unsigned int x:5;	/* unused bit */
529     
530     	unsigned int losc:1;	/* Line Out Short Circuit */
531     
532     	unsigned int srsc:1;	/* Speaker Right Short Circuit */
533     
534     	unsigned int slsc:1;	/* Speaker Left Short Circuit */
535     
536     } Si3STATUSREPORT;
537     
538     typedef union {
539     	Si3STATUSREPORT bits;
540     	unsigned char byte;
541     } Si3STAT;
542     
543     typedef struct {
544     	unsigned int sot:2;	/* Speaker Out Attenuation */
545     
546     	unsigned int lot:2;	/* Line Out Attenuation */
547     
548     	unsigned int x:4;	/* unused bits */
549     
550     } Si3ANALOGATTN;
551     
552     typedef union {
553     	Si3ANALOGATTN bits;
554     	unsigned char byte;
555     } Si3AATT;
556     
557     /******************************************************************************
558     *
559     *  These structures deal with the DAA on the Internet LineJACK
560     *
561     ******************************************************************************/
562     
563     typedef struct _DAA_REGS {
564     	/*----------------------------------------------- */
565     	/* SOP Registers */
566     	/* */
567     	BYTE bySOP;
568     
569     	union _SOP_REGS {
570     		struct _SOP {
571     			union	/* SOP - CR0 Register */
572     			 {
573     				BYTE reg;
574     				struct _CR0_BITREGS {
575     					BYTE CLK_EXT:1;		/* cr0[0:0] */
576     
577     					BYTE RIP:1;	/* cr0[1:1] */
578     
579     					BYTE AR:1;	/* cr0[2:2] */
580     
581     					BYTE AX:1;	/* cr0[3:3] */
582     
583     					BYTE FRR:1;	/* cr0[4:4] */
584     
585     					BYTE FRX:1;	/* cr0[5:5] */
586     
587     					BYTE IM:1;	/* cr0[6:6] */
588     
589     					BYTE TH:1;	/* cr0[7:7] */
590     
591     				} bitreg;
592     			} cr0;
593     
594     			union	/* SOP - CR1 Register */
595     			 {
596     				BYTE reg;
597     				struct _CR1_REGS {
598     					BYTE RM:1;	/* cr1[0:0] */
599     
600     					BYTE RMR:1;	/* cr1[1:1] */
601     
602     					BYTE No_auto:1;		/* cr1[2:2] */
603     
604     					BYTE Pulse:1;	/* cr1[3:3] */
605     
606     					BYTE P_Tone1:1;		/* cr1[4:4] */
607     
608     					BYTE P_Tone2:1;		/* cr1[5:5] */
609     
610     					BYTE E_Tone1:1;		/* cr1[6:6] */
611     
612     					BYTE E_Tone2:1;		/* cr1[7:7] */
613     
614     				} bitreg;
615     			} cr1;
616     
617     			union	/* SOP - CR2 Register */
618     			 {
619     				BYTE reg;
620     				struct _CR2_REGS {
621     					BYTE Call_II:1;		/* CR2[0:0] */
622     
623     					BYTE Call_I:1;	/* CR2[1:1] */
624     
625     					BYTE Call_en:1;		/* CR2[2:2] */
626     
627     					BYTE Call_pon:1;	/* CR2[3:3] */
628     
629     					BYTE IDR:1;	/* CR2[4:4] */
630     
631     					BYTE COT_R:3;	/* CR2[5:7] */
632     
633     				} bitreg;
634     			} cr2;
635     
636     			union	/* SOP - CR3 Register */
637     			 {
638     				BYTE reg;
639     				struct _CR3_REGS {
640     					BYTE DHP_X:1;	/* CR3[0:0] */
641     
642     					BYTE DHP_R:1;	/* CR3[1:1] */
643     
644     					BYTE Cal_pctl:1;	/* CR3[2:2] */
645     
646     					BYTE SEL:1;	/* CR3[3:3] */
647     
648     					BYTE TestLoops:4;	/* CR3[4:7] */
649     
650     				} bitreg;
651     			} cr3;
652     
653     			union	/* SOP - CR4 Register */
654     			 {
655     				BYTE reg;
656     				struct _CR4_REGS {
657     					BYTE Fsc_en:1;	/* CR4[0:0] */
658     
659     					BYTE Int_en:1;	/* CR4[1:1] */
660     
661     					BYTE AGX:2;	/* CR4[2:3] */
662     
663     					BYTE AGR_R:2;	/* CR4[4:5] */
664     
665     					BYTE AGR_Z:2;	/* CR4[6:7] */
666     
667     				} bitreg;
668     			} cr4;
669     
670     			union	/* SOP - CR5 Register */
671     			 {
672     				BYTE reg;
673     				struct _CR5_REGS {
674     					BYTE V_0:1;	/* CR5[0:0] */
675     
676     					BYTE V_1:1;	/* CR5[1:1] */
677     
678     					BYTE V_2:1;	/* CR5[2:2] */
679     
680     					BYTE V_3:1;	/* CR5[3:3] */
681     
682     					BYTE V_4:1;	/* CR5[4:4] */
683     
684     					BYTE V_5:1;	/* CR5[5:5] */
685     
686     					BYTE V_6:1;	/* CR5[6:6] */
687     
688     					BYTE V_7:1;	/* CR5[7:7] */
689     
690     				} bitreg;
691     			} cr5;
692     
693     			union	/* SOP - CR6 Register */
694     			 {
695     				BYTE reg;
696     				struct _CR6_REGS {
697     					BYTE reserved:8;	/* CR6[0:7] */
698     
699     				} bitreg;
700     			} cr6;
701     
702     			union	/* SOP - CR7 Register */
703     			 {
704     				BYTE reg;
705     				struct _CR7_REGS {
706     					BYTE reserved:8;	/* CR7[0:7] */
707     
708     				} bitreg;
709     			} cr7;
710     		} SOP;
711     
712     		BYTE ByteRegs[sizeof(struct _SOP)];
713     
714     	} SOP_REGS;
715     
716     	/* DAA_REGS.SOP_REGS.SOP.CR5.reg */
717     	/* DAA_REGS.SOP_REGS.SOP.CR5.bitreg */
718     	/* DAA_REGS.SOP_REGS.SOP.CR5.bitreg.V_2 */
719     	/* DAA_REGS.SOP_REGS.ByteRegs[5] */
720     
721     	/*----------------------------------------------- */
722     	/* XOP Registers */
723     	/* */
724     	BYTE byXOP;
725     
726     	union _XOP_REGS {
727     		struct _XOP {
728     			union	XOPXR0/* XOP - XR0 Register - Read values */
729     			 {
730     				BYTE reg;
731     				struct _XR0_BITREGS {
732     					BYTE SI_0:1;	/* XR0[0:0] - Read */
733     
734     					BYTE SI_1:1;	/* XR0[1:1] - Read */
735     
736     					BYTE VDD_OK:1;	/* XR0[2:2] - Read */
737     
738     					BYTE Caller_ID:1;	/* XR0[3:3] - Read */
739     
740     					BYTE RING:1;	/* XR0[4:4] - Read */
741     
742     					BYTE Cadence:1;		/* XR0[5:5] - Read */
743     
744     					BYTE Wake_up:1;		/* XR0[6:6] - Read */
745     
746     					BYTE RMR:1;	/* XR0[7:7] - Read */
747     
748     				} bitreg;
749     			} xr0;
750     
751     			union	/* XOP - XR1 Register */
752     			 {
753     				BYTE reg;
754     				struct _XR1_BITREGS {
755     					BYTE M_SI_0:1;	/* XR1[0:0] */
756     
757     					BYTE M_SI_1:1;	/* XR1[1:1] */
758     
759     					BYTE M_VDD_OK:1;	/* XR1[2:2] */
760     
761     					BYTE M_Caller_ID:1;	/* XR1[3:3] */
762     
763     					BYTE M_RING:1;	/* XR1[4:4] */
764     
765     					BYTE M_Cadence:1;	/* XR1[5:5] */
766     
767     					BYTE M_Wake_up:1;	/* XR1[6:6] */
768     
769     					BYTE unused:1;	/* XR1[7:7] */
770     
771     				} bitreg;
772     			} xr1;
773     
774     			union	/* XOP - XR2 Register */
775     			 {
776     				BYTE reg;
777     				struct _XR2_BITREGS {
778     					BYTE CTO0:1;	/* XR2[0:0] */
779     
780     					BYTE CTO1:1;	/* XR2[1:1] */
781     
782     					BYTE CTO2:1;	/* XR2[2:2] */
783     
784     					BYTE CTO3:1;	/* XR2[3:3] */
785     
786     					BYTE CTO4:1;	/* XR2[4:4] */
787     
788     					BYTE CTO5:1;	/* XR2[5:5] */
789     
790     					BYTE CTO6:1;	/* XR2[6:6] */
791     
792     					BYTE CTO7:1;	/* XR2[7:7] */
793     
794     				} bitreg;
795     			} xr2;
796     
797     			union	/* XOP - XR3 Register */
798     			 {
799     				BYTE reg;
800     				struct _XR3_BITREGS {
801     					BYTE DCR0:1;	/* XR3[0:0] */
802     
803     					BYTE DCR1:1;	/* XR3[1:1] */
804     
805     					BYTE DCI:1;	/* XR3[2:2] */
806     
807     					BYTE DCU0:1;	/* XR3[3:3] */
808     
809     					BYTE DCU1:1;	/* XR3[4:4] */
810     
811     					BYTE B_off:1;	/* XR3[5:5] */
812     
813     					BYTE AGB0:1;	/* XR3[6:6] */
814     
815     					BYTE AGB1:1;	/* XR3[7:7] */
816     
817     				} bitreg;
818     			} xr3;
819     
820     			union	/* XOP - XR4 Register */
821     			 {
822     				BYTE reg;
823     				struct _XR4_BITREGS {
824     					BYTE C_0:1;	/* XR4[0:0] */
825     
826     					BYTE C_1:1;	/* XR4[1:1] */
827     
828     					BYTE C_2:1;	/* XR4[2:2] */
829     
830     					BYTE C_3:1;	/* XR4[3:3] */
831     
832     					BYTE C_4:1;	/* XR4[4:4] */
833     
834     					BYTE C_5:1;	/* XR4[5:5] */
835     
836     					BYTE C_6:1;	/* XR4[6:6] */
837     
838     					BYTE C_7:1;	/* XR4[7:7] */
839     
840     				} bitreg;
841     			} xr4;
842     
843     			union	/* XOP - XR5 Register */
844     			 {
845     				BYTE reg;
846     				struct _XR5_BITREGS {
847     					BYTE T_0:1;	/* XR5[0:0] */
848     
849     					BYTE T_1:1;	/* XR5[1:1] */
850     
851     					BYTE T_2:1;	/* XR5[2:2] */
852     
853     					BYTE T_3:1;	/* XR5[3:3] */
854     
855     					BYTE T_4:1;	/* XR5[4:4] */
856     
857     					BYTE T_5:1;	/* XR5[5:5] */
858     
859     					BYTE T_6:1;	/* XR5[6:6] */
860     
861     					BYTE T_7:1;	/* XR5[7:7] */
862     
863     				} bitreg;
864     			} xr5;
865     
866     			union	/* XOP - XR6 Register - Read Values */
867     			 {
868     				BYTE reg;
869     				struct _XR6_BITREGS {
870     					BYTE CPS0:1;	/* XR6[0:0] */
871     
872     					BYTE CPS1:1;	/* XR6[1:1] */
873     
874     					BYTE unused1:2;		/* XR6[2:3] */
875     
876     					BYTE CLK_OFF:1;		/* XR6[4:4] */
877     
878     					BYTE unused2:3;		/* XR6[5:7] */
879     
880     				} bitreg;
881     			} xr6;
882     
883     			union	/* XOP - XR7 Register */
884     			 {
885     				BYTE reg;
886     				struct _XR7_BITREGS {
887     					BYTE unused1:1;		/* XR7[0:0] */
888     
889     					BYTE Vdd0:1;	/* XR7[1:1] */
890     
891     					BYTE Vdd1:1;	/* XR7[2:2] */
892     
893     					BYTE unused2:5;		/* XR7[3:7] */
894     
895     				} bitreg;
896     			} xr7;
897     		} XOP;
898     
899     		BYTE ByteRegs[sizeof(struct _XOP)];
900     
901     	} XOP_REGS;
902     
903     	/* DAA_REGS.XOP_REGS.XOP.XR7.reg */
904     	/* DAA_REGS.XOP_REGS.XOP.XR7.bitreg */
905     	/* DAA_REGS.XOP_REGS.XOP.XR7.bitreg.Vdd0 */
906     	/* DAA_REGS.XOP_REGS.ByteRegs[7] */
907     
908     	/*----------------------------------------------- */
909     	/* COP Registers */
910     	/* */
911     	BYTE byCOP;
912     
913     	union _COP_REGS {
914     		struct _COP {
915     			BYTE THFilterCoeff_1[8];	/* COP - TH Filter Coefficients,      CODE=0, Part 1 */
916     
917     			BYTE THFilterCoeff_2[8];	/* COP - TH Filter Coefficients,      CODE=1, Part 2 */
918     
919     			BYTE THFilterCoeff_3[8];	/* COP - TH Filter Coefficients,      CODE=2, Part 3 */
920     
921     			BYTE RingerImpendance_1[8];	/* COP - Ringer Impendance Coefficients,  CODE=3, Part 1 */
922     
923     			BYTE IMFilterCoeff_1[8];	/* COP - IM Filter Coefficients,      CODE=4, Part 1 */
924     
925     			BYTE IMFilterCoeff_2[8];	/* COP - IM Filter Coefficients,      CODE=5, Part 2 */
926     
927     			BYTE RingerImpendance_2[8];	/* COP - Ringer Impendance Coefficients,  CODE=6, Part 2 */
928     
929     			BYTE FRRFilterCoeff[8];		/* COP - FRR Filter Coefficients,      CODE=7 */
930     
931     			BYTE FRXFilterCoeff[8];		/* COP - FRX Filter Coefficients,      CODE=8 */
932     
933     			BYTE ARFilterCoeff[4];	/* COP - AR Filter Coefficients,      CODE=9 */
934     
935     			BYTE AXFilterCoeff[4];	/* COP - AX Filter Coefficients,      CODE=10  */
936     
937     			BYTE Tone1Coeff[4];	/* COP - Tone1 Coefficients,        CODE=11 */
938     
939     			BYTE Tone2Coeff[4];	/* COP - Tone2 Coefficients,        CODE=12 */
940     
941     			BYTE LevelmeteringRinging[4];	/* COP - Levelmetering Ringing,        CODE=13 */
942     
943     			BYTE CallerID1stTone[8];	/* COP - Caller ID 1st Tone,        CODE=14 */
944     
945     			BYTE CallerID2ndTone[8];	/* COP - Caller ID 2nd Tone,        CODE=15 */
946     
947     		} COP;
948     
949     		BYTE ByteRegs[sizeof(struct _COP)];
950     
951     	} COP_REGS;
952     
953     	/* DAA_REGS.COP_REGS.COP.XR7.Tone1Coeff[3] */
954     	/* DAA_REGS.COP_REGS.COP.XR7.bitreg */
955     	/* DAA_REGS.COP_REGS.COP.XR7.bitreg.Vdd0 */
956     	/* DAA_REGS.COP_REGS.ByteRegs[57] */
957     
958     	/*----------------------------------------------- */
959     	/* CAO Registers */
960     	/* */
961     	BYTE byCAO;
962     
963     	union _CAO_REGS {
964     		struct _CAO {
965     			BYTE CallerID[512];	/* CAO - Caller ID Bytes */
966     
967     		} CAO;
968     
969     		BYTE ByteRegs[sizeof(struct _CAO)];
970     	} CAO_REGS;
971     
972     	union			/* XOP - XR0 Register - Write values */
973     	 {
974     		BYTE reg;
975     		struct _XR0_BITREGSW {
976     			BYTE SO_0:1;	/* XR1[0:0] - Write */
977     
978     			BYTE SO_1:1;	/* XR1[1:1] - Write */
979     
980     			BYTE SO_2:1;	/* XR1[2:2] - Write */
981     
982     			BYTE unused:5;	/* XR1[3:7] - Write */
983     
984     		} bitreg;
985     	} XOP_xr0_W;
986     
987     	union			/* XOP - XR6 Register - Write values */
988     	 {
989     		BYTE reg;
990     		struct _XR6_BITREGSW {
991     			BYTE unused1:4;		/* XR6[0:3] */
992     
993     			BYTE CLK_OFF:1;		/* XR6[4:4] */
994     
995     			BYTE unused2:3;		/* XR6[5:7] */
996     
997     		} bitreg;
998     	} XOP_xr6_W;
999     
1000     } DAA_REGS;
1001     
1002     #define ALISDAA_ID_BYTE      0x81
1003     #define ALISDAA_CALLERID_SIZE  512
1004     
1005     /*------------------------------ */
1006     /* */
1007     /*  Misc definitions */
1008     /* */
1009     
1010     /* Power Up Operation */
1011     #define SOP_PU_SLEEP    0
1012     #define SOP_PU_RINGING    1
1013     #define SOP_PU_CONVERSATION  2
1014     #define SOP_PU_PULSEDIALING  3
1015     #define SOP_PU_RESET    4
1016     
1017     #define ALISDAA_CALLERID_SIZE 512
1018     
1019     #define PLAYBACK_MODE_COMPRESSED	0	/*        Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729 */
1020     #define PLAYBACK_MODE_TRUESPEECH_V40	0	/*        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps */
1021     #define PLAYBACK_MODE_TRUESPEECH	8	/*        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps Version 5.1 */
1022     #define PLAYBACK_MODE_ULAW		2	/*        Selects: 64 Kbit/sec MuA-law PCM */
1023     #define PLAYBACK_MODE_ALAW		10	/*        Selects: 64 Kbit/sec A-law PCM */
1024     #define PLAYBACK_MODE_16LINEAR		6	/*        Selects: 128 Kbit/sec 16-bit linear */
1025     #define PLAYBACK_MODE_8LINEAR		4	/*        Selects: 64 Kbit/sec 8-bit signed linear */
1026     #define PLAYBACK_MODE_8LINEAR_WSS	5	/*        Selects: 64 Kbit/sec WSS 8-bit unsigned linear */
1027     
1028     #define RECORD_MODE_COMPRESSED		0	/*        Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729 */
1029     #define RECORD_MODE_TRUESPEECH		0	/*        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps */
1030     #define RECORD_MODE_ULAW		4	/*        Selects: 64 Kbit/sec Mu-law PCM */
1031     #define RECORD_MODE_ALAW		12	/*        Selects: 64 Kbit/sec A-law PCM */
1032     #define RECORD_MODE_16LINEAR		5	/*        Selects: 128 Kbit/sec 16-bit linear */
1033     #define RECORD_MODE_8LINEAR		6	/*        Selects: 64 Kbit/sec 8-bit signed linear */
1034     #define RECORD_MODE_8LINEAR_WSS		7	/*        Selects: 64 Kbit/sec WSS 8-bit unsigned linear */
1035     
1036     enum SLIC_STATES {
1037     	PLD_SLIC_STATE_OC = 0,
1038     	PLD_SLIC_STATE_RINGING,
1039     	PLD_SLIC_STATE_ACTIVE,
1040     	PLD_SLIC_STATE_OHT,
1041     	PLD_SLIC_STATE_TIPOPEN,
1042     	PLD_SLIC_STATE_STANDBY,
1043     	PLD_SLIC_STATE_APR,
1044     	PLD_SLIC_STATE_OHTPR
1045     };
1046     
1047     enum SCI_CONTROL {
1048     	SCI_End = 0,
1049     	SCI_Enable_DAA,
1050     	SCI_Enable_Mixer,
1051     	SCI_Enable_EEPROM
1052     };
1053     
1054     enum Mode {
1055     	T63, T53, T48, T40
1056     };
1057     enum Dir {
1058     	V3_TO_V4, V4_TO_V3, V4_TO_V5, V5_TO_V4
1059     };
1060     
1061     typedef struct Proc_Info_Tag {
1062     	enum Mode convert_mode;
1063     	enum Dir convert_dir;
1064     	int Prev_Frame_Type;
1065     	int Current_Frame_Type;
1066     } Proc_Info_Type;
1067     
1068     enum PREVAL {
1069     	NORMAL = 0,
1070     	NOPOST,
1071     	POSTONLY,
1072     	PREERROR
1073     };
1074     
1075     enum IXJ_EXTENSIONS {
1076     	G729LOADER = 0,
1077     	TS85LOADER,
1078     	PRE_READ,
1079     	POST_READ,
1080     	PRE_WRITE,
1081     	POST_WRITE,
1082     	PRE_IOCTL,
1083     	POST_IOCTL
1084     };
1085     
1086     typedef struct {
1087     	char enable;
1088     	char en_filter;
1089     	unsigned int filter;
1090     	unsigned int state;	/* State 0 when cadence has not started. */
1091     
1092     	unsigned int on1;	/* State 1 */
1093     
1094     	unsigned long on1min;	/* State 1 - 10% + jiffies */
1095      	unsigned long on1dot;	/* State 1 + jiffies */
1096     
1097     	unsigned long on1max;	/* State 1 + 10% + jiffies */
1098     
1099     	unsigned int off1;	/* State 2 */
1100     
1101     	unsigned long off1min;
1102      	unsigned long off1dot;	/* State 2 + jiffies */
1103     	unsigned long off1max;
1104     	unsigned int on2;	/* State 3 */
1105     
1106     	unsigned long on2min;
1107     	unsigned long on2dot;
1108     	unsigned long on2max;
1109     	unsigned int off2;	/* State 4 */
1110     
1111     	unsigned long off2min;
1112      	unsigned long off2dot;	/* State 4 + jiffies */
1113     	unsigned long off2max;
1114     	unsigned int on3;	/* State 5 */
1115     
1116     	unsigned long on3min;
1117     	unsigned long on3dot;
1118     	unsigned long on3max;
1119     	unsigned int off3;	/* State 6 */
1120     
1121     	unsigned long off3min;
1122      	unsigned long off3dot;	/* State 6 + jiffies */
1123     	unsigned long off3max;
1124     } IXJ_CADENCE_F;
1125     
1126     typedef struct {
1127     	unsigned int busytone:1;
1128     	unsigned int dialtone:1;
1129     	unsigned int ringback:1;
1130     	unsigned int ringing:1;
1131     	unsigned int playing:1;
1132     	unsigned int recording:1;
1133     	unsigned int cringing:1;
1134     	unsigned int play_first_frame:1;
1135     	unsigned int pstn_present:1;
1136     	unsigned int pstn_ringing:1;
1137     	unsigned int pots_correct:1;
1138     	unsigned int pots_pstn:1;
1139     	unsigned int g729_loaded:1;
1140     	unsigned int ts85_loaded:1;
1141     	unsigned int dtmf_oob:1;	/* DTMF Out-Of-Band */
1142     
1143     	unsigned int pcmciascp:1;	/* SmartCABLE Present */
1144     
1145     	unsigned int pcmciasct:2;	/* SmartCABLE Type */
1146     
1147     	unsigned int pcmciastate:3;	/* SmartCABLE Init State */
1148     
1149     	unsigned int inwrite:1;	/* Currently writing */
1150     
1151     	unsigned int inread:1;	/* Currently reading */
1152     
1153     	unsigned int incheck:1;	/* Currently checking the SmartCABLE */
1154     
1155     	unsigned int cidplay:1; /* Currently playing Caller ID */
1156     
1157     	unsigned int cidring:1; /* This is the ring for Caller ID */
1158     
1159     	unsigned int cidsent:1; /* Caller ID has been sent */
1160     
1161     	unsigned int cidcw_ack:1; /* Caller ID CW ACK (from CPE) */
1162     	unsigned int firstring:1; /* First ring cadence is complete */
1163     	unsigned int pstncheck:1;	/* Currently checking the PSTN Line */
1164     	unsigned int pstn_rmr:1;
1165     	unsigned int x:3;	/* unsed bits */
1166     
1167     } IXJ_FLAGS;
1168     
1169     /******************************************************************************
1170     *
1171     *  This structure holds the state of all of the Quicknet cards
1172     *
1173     ******************************************************************************/
1174     
1175     typedef struct {
1176     	struct phone_device p;
1177     	struct timer_list timer;
1178     	unsigned int board;
1179     	unsigned int DSPbase;
1180     	unsigned int XILINXbase;
1181     	unsigned int serial;
1182     	atomic_t DSPWrite;
1183     	struct phone_capability caplist[30];
1184     	unsigned int caps;
1185     #if LINUX_VERSION_CODE < 0x020400
1186     	struct pnp_dev *dev;
1187     #else
1188     	struct pci_dev *dev;
1189     #endif
1190     	unsigned int cardtype;
1191     	unsigned int rec_codec;
1192     	unsigned int cid_rec_codec;
1193     	unsigned int cid_rec_volume;
1194     	unsigned char cid_rec_flag;
1195     	char rec_mode;
1196     	unsigned int play_codec;
1197     	unsigned int cid_play_codec;
1198     	unsigned int cid_play_volume;
1199     	unsigned char cid_play_flag;
1200     	char play_mode;
1201     	IXJ_FLAGS flags;
1202     	unsigned int busyflags;
1203     	unsigned int rec_frame_size;
1204     	unsigned int play_frame_size;
1205     	unsigned int cid_play_frame_size;
1206     	unsigned int cid_base_frame_size;
1207     	unsigned long cidcw_wait;
1208     	int aec_level;
1209     	int cid_play_aec_level;
1210     	int readers, writers;
1211     #if LINUX_VERSION_CODE < 0x020400
1212     	struct wait_queue *poll_q;
1213     	struct wait_queue *read_q;
1214     #else
1215             wait_queue_head_t poll_q;
1216             wait_queue_head_t read_q;
1217     #endif
1218     	char *read_buffer, *read_buffer_end;
1219     	char *read_convert_buffer;
1220     	unsigned int read_buffer_size;
1221     	unsigned int read_buffer_ready;
1222     #if LINUX_VERSION_CODE < 0x020400
1223     	struct wait_queue *write_q;
1224     #else
1225             wait_queue_head_t write_q;
1226     #endif
1227     	char *write_buffer, *write_buffer_end;
1228     	char *write_convert_buffer;
1229     	unsigned int write_buffer_size;
1230     	unsigned int write_buffers_empty;
1231     	unsigned long drybuffer;
1232     	char *write_buffer_rp, *write_buffer_wp;
1233     	char dtmfbuffer[80];
1234     	char dtmf_current;
1235     	int dtmf_wp, dtmf_rp, dtmf_state, dtmf_proc;
1236     	int tone_off_time, tone_on_time;
1237     	struct fasync_struct *async_queue;
1238     	unsigned long tone_start_jif;
1239     	char tone_index;
1240     	char tone_state;
1241     	char maxrings;
1242     	IXJ_CADENCE *cadence_t;
1243     	IXJ_CADENCE *cadence_r;
1244     	int tone_cadence_state;
1245     	IXJ_CADENCE_F cadence_f[6];
1246     	DTMF dtmf;
1247     	CPTF cptf;
1248     	BYTES dsp;
1249     	BYTES ver;
1250     	BYTES scr;
1251     	BYTES ssr;
1252     	BYTES baseframe;
1253     	HSR hsr;
1254     	GPIO gpio;
1255     	PLD_SCRR pld_scrr;
1256     	PLD_SCRW pld_scrw;
1257     	PLD_SLICW pld_slicw;
1258     	PLD_SLICR pld_slicr;
1259     	PLD_CLOCK pld_clock;
1260     	PCMCIA_CR1 pccr1;
1261     	PCMCIA_CR2 pccr2;
1262     	PCMCIA_SCCR psccr;
1263     	PCMCIA_SLIC pslic;
1264     	char pscdd;
1265     	Si3C1 sic1;
1266     	Si3C2 sic2;
1267     	Si3RXG sirxg;
1268     	Si3ADC siadc;
1269     	Si3DAC sidac;
1270     	Si3STAT sistat;
1271     	Si3AATT siaatt;
1272     	MIX mix;
1273     	unsigned short ring_cadence;
1274     	int ring_cadence_t;
1275     	unsigned long ring_cadence_jif;
1276     	unsigned long checkwait;
1277     	int intercom;
1278     	int m_hook;
1279     	int r_hook;
1280     	int p_hook;
1281     	char pstn_envelope;
1282     	char pstn_cid_intr;
1283     	unsigned char fskz;
1284     	unsigned char fskphase;
1285     	unsigned char fskcnt;
1286             unsigned int cidsize;
1287     	unsigned int cidcnt;
1288     	unsigned pstn_cid_received;
1289     	PHONE_CID cid;
1290     	PHONE_CID cid_send;
1291     	unsigned long pstn_ring_int;
1292     	unsigned long pstn_ring_start;
1293     	unsigned long pstn_ring_stop;
1294     	unsigned long pstn_winkstart;
1295     	unsigned long pstn_last_rmr;
1296     	unsigned long pstn_prev_rmr;
1297     	unsigned long pots_winkstart;
1298     	unsigned int winktime;
1299     	unsigned long flash_end;
1300     	char port;
1301     	char hookstate;
1302     	union telephony_exception ex;
1303     	union telephony_exception ex_sig;
1304     	int ixj_signals[35];
1305     	IXJ_SIGDEF sigdef;
1306     	char daa_mode;
1307     	char daa_country;
1308     	unsigned long pstn_sleeptil;
1309     	DAA_REGS m_DAAShadowRegs;
1310     	Proc_Info_Type Info_read;
1311     	Proc_Info_Type Info_write;
1312     	unsigned short frame_count;
1313     	unsigned int filter_hist[4];
1314     	unsigned char filter_en[4];
1315     	unsigned short proc_load;
1316     	unsigned long framesread;
1317     	unsigned long frameswritten;
1318     	unsigned long read_wait;
1319     	unsigned long write_wait;
1320     	unsigned long timerchecks;
1321     	unsigned long txreadycheck;
1322     	unsigned long rxreadycheck;
1323     	unsigned long statuswait;
1324     	unsigned long statuswaitfail;
1325     	unsigned long pcontrolwait;
1326     	unsigned long pcontrolwaitfail;
1327     	unsigned long iscontrolready;
1328     	unsigned long iscontrolreadyfail;
1329     	unsigned long pstnstatecheck;
1330     #ifdef IXJ_DYN_ALLOC
1331     	short *fskdata;
1332     #else
1333     	short fskdata[8000];
1334     #endif
1335     	int fsksize;
1336     	int fskdcnt;
1337     } IXJ;
1338     
1339     typedef int (*IXJ_REGFUNC) (IXJ * j, unsigned long arg);
1340     
1341     extern IXJ *ixj_pcmcia_probe(unsigned long, unsigned long);
1342     
1343