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