Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ixj.h
Go to the documentation of this file.
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, <[email protected]>
18  *
19  * Contributors: Greg Herlein, <[email protected]>
20  * David W. Erhart, <[email protected]>
21  * John Sellers, <[email protected]>
22  * Mike Preston, <[email protected]>
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 {
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{
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
307  char byte;
308 } PLD_SLICW;
309 
310 typedef union {
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 {
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 {
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 {
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 {
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;
414 
415 typedef union {
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 {
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 {
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 {
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 {
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 {
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 
524 
525 typedef union {
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 {
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  /* */
555 
556  union _SOP_REGS {
557  struct _SOP {
558  union /* SOP - CR0 Register */
559  {
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  /* */
712 
713  union _XOP_REGS {
714  struct _XOP {
715  union XOPXR0/* XOP - XR0 Register - Read values */
716  {
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  {
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  /* */
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  /* */
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  {
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 
1032 };
1033 
1035  SCI_End = 0,
1039 };
1040 
1041 enum Mode {
1043 };
1044 enum Dir {
1046 };
1047 
1048 typedef struct Proc_Info_Tag {
1053 } Proc_Info_Type;
1054 
1055 enum PREVAL {
1056  NORMAL = 0,
1060 };
1061 
1071 };
1072 
1073 typedef struct {
1074  char enable;
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; /* unused 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 {
1166 } ixj_cadence;
1167 
1168 typedef struct {
1169  struct phone_device p;
1171  unsigned int board;
1172  unsigned int DSPbase;
1173  unsigned int XILINXbase;
1174  unsigned int serial;
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;
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;
1199  int readers, writers;
1205  unsigned int read_buffer_ready;
1207  char *write_buffer, *write_buffer_end;
1210  unsigned int write_buffers_empty;
1211  unsigned long drybuffer;
1212  char *write_buffer_rp, *write_buffer_wp;
1213  char dtmfbuffer[80];
1215  int dtmf_wp, dtmf_rp, dtmf_state, dtmf_proc;
1216  int tone_off_time, tone_on_time;
1218  unsigned long tone_start_jif;
1221  char maxrings;
1225  IXJ_CADENCE_F cadence_f[6];
1244  char pscdd;
1253  unsigned short ring_cadence;
1255  unsigned long ring_cadence_jif;
1256  unsigned long checkwait;
1258  int m_hook;
1259  int r_hook;
1260  int p_hook;
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;
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;
1283  union telephony_exception ex_sig;
1284  int ixj_signals[35];
1286  char daa_mode;
1288  unsigned long pstn_sleeptil;
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