import of ftp.dlink.com/GPL/DSMG-600_reB/ppclinux.tar.gz
[linux-2.4.21-pre4.git] / 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 1.1.1.1 2005/04/11 02:50:40 jack 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