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