blob: 4c32a43b791473eb7a7cda625f5ff3bcffb95668 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/******************************************************************************
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 *****************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -070041#define IXJ_VERSION 3031
42
Linus Torvalds1da177e2005-04-16 15:20:36 -070043#include <linux/types.h>
44
45#include <linux/ixjuser.h>
46#include <linux/phonedev.h>
47
48typedef __u16 WORD;
49typedef __u32 DWORD;
50typedef __u8 BYTE;
Linus Torvalds1da177e2005-04-16 15:20:36 -070051
52#ifndef IXJMAX
53#define IXJMAX 16
54#endif
55
Linus Torvalds1da177e2005-04-16 15:20:36 -070056/******************************************************************************
57*
58* This structure when unioned with the structures below makes simple byte
59* access to the registers easier.
60*
61******************************************************************************/
62typedef struct {
63 unsigned char low;
64 unsigned char high;
65} BYTES;
66
67typedef union {
68 BYTES bytes;
69 short word;
70} IXJ_WORD;
71
72typedef 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
83typedef 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******************************************************************************/
95typedef 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
110typedef 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******************************************************************************/
122typedef 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
137typedef 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******************************************************************************/
149typedef 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
168typedef 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******************************************************************************/
179typedef 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
192typedef union {
193 LMON bits;
194 BYTES bytes;
195} DTMF;
196
197typedef 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
207typedef 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******************************************************************************/
218typedef 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
229typedef struct {
230 unsigned int eidp:1;
231 unsigned int eisd:1;
232 unsigned int x:6;
233} PSCRWP; /* Internet PhoneJACK PCI */
234
235typedef union {
236 PSCRWI bits;
237 PSCRWP pcib;
238 char byte;
239} PLD_SCRW;
240
241typedef 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
252typedef 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
260typedef 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******************************************************************************/
272typedef 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
283typedef 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
292typedef 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
303typedef union {
304 PSLICPCI pcib;
305 PSLICWRITE bits;
306 PSLICREAD slic;
307 char byte;
308} PLD_SLICW;
309
310typedef 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******************************************************************************/
322typedef 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
333typedef 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
344typedef 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******************************************************************************/
356typedef 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
369typedef union {
370 COMMAND_REG1 bits;
371 unsigned char byte;
372} PCMCIA_CR1;
373
374typedef 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
385typedef union {
386 COMMAND_REG2 bits;
387 unsigned char byte;
388} PCMCIA_CR2;
389
390typedef 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
399typedef union {
400 CONTROL_REG bits;
401 unsigned char byte;
402} PCMCIA_SCCR;
403
404typedef 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
415typedef union {
416 PCMCIA_SLIC_REG bits;
417 unsigned char byte;
418} PCMCIA_SLIC;
419
420typedef 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
437typedef union {
438 Si3CONTROL1 bits;
439 unsigned char byte;
440} Si3C1;
441
442typedef 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
457typedef union {
458 Si3CONTROL2 bits;
459 unsigned char byte;
460} Si3C2;
461
462typedef 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
477typedef union {
478 Si3RXGAIN bits;
479 unsigned char byte;
480} Si3RXG;
481
482typedef 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
493typedef union {
494 Si3ADCVOLUME bits;
495 unsigned char byte;
496} Si3ADC;
497
498typedef 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
509typedef union {
510 Si3DACVOLUME bits;
511 unsigned char byte;
512} Si3DAC;
513
514typedef 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
525typedef union {
526 Si3STATUSREPORT bits;
527 unsigned char byte;
528} Si3STAT;
529
530typedef 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
539typedef 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
550typedef 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
1023enum 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
1034enum SCI_CONTROL {
1035 SCI_End = 0,
1036 SCI_Enable_DAA,
1037 SCI_Enable_Mixer,
1038 SCI_Enable_EEPROM
1039};
1040
1041enum Mode {
1042 T63, T53, T48, T40
1043};
1044enum Dir {
1045 V3_TO_V4, V4_TO_V3, V4_TO_V5, V5_TO_V4
1046};
1047
1048typedef 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
1055enum PREVAL {
1056 NORMAL = 0,
1057 NOPOST,
1058 POSTONLY,
1059 PREERROR
1060};
1061
1062enum 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
1073typedef 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
1113typedef 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
1162typedef struct {
1163 int elements_used;
1164 IXJ_CADENCE_TERM termination;
1165 IXJ_CADENCE_ELEMENT *ce;
1166} ixj_cadence;
1167
1168typedef 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];
Adrian Bunkb1968722006-11-08 17:44:45 -08001294 unsigned char filter_en[6];
Linus Torvalds1da177e2005-04-16 15:20:36 -07001295 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
1319typedef int (*IXJ_REGFUNC) (IXJ * j, unsigned long arg);
1320
1321extern IXJ *ixj_pcmcia_probe(unsigned long, unsigned long);
1322