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