ixj.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:29k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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