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