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