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