ixj.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:26k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

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