OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [telephony/] [ixj.h] - Blame information for rev 67

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.