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

流媒体/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/01/07 22:50:00 ctam Exp $";
  39. #ifndef _I386_TYPES_H
  40. #include <asm/types.h>
  41. #endif
  42. #include "ixjuser.h"
  43. #include "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 DAA on the Internet LineJACK
  309. *
  310. ******************************************************************************/
  311. typedef struct _DAA_REGS {
  312. //-----------------------------------------------
  313. // SOP Registers
  314. //
  315. BYTE bySOP;
  316. union _SOP_REGS {
  317. struct _SOP {
  318. union // SOP - CR0 Register
  319.  {
  320. BYTE reg;
  321. struct _CR0_BITREGS {
  322. BYTE CLK_EXT:1; // cr0[0:0]
  323. BYTE RIP:1; // cr0[1:1]
  324. BYTE AR:1; // cr0[2:2]
  325. BYTE AX:1; // cr0[3:3]
  326. BYTE FRR:1; // cr0[4:4]
  327. BYTE FRX:1; // cr0[5:5]
  328. BYTE IM:1; // cr0[6:6]
  329. BYTE TH:1; // cr0[7:7]
  330. } bitreg;
  331. } cr0;
  332. union // SOP - CR1 Register
  333.  {
  334. BYTE reg;
  335. struct _CR1_REGS {
  336. BYTE RM:1; // cr1[0:0]
  337. BYTE RMR:1; // cr1[1:1]
  338. BYTE No_auto:1; // cr1[2:2]
  339. BYTE Pulse:1; // cr1[3:3]
  340. BYTE P_Tone1:1; // cr1[4:4]
  341. BYTE P_Tone2:1; // cr1[5:5]
  342. BYTE E_Tone1:1; // cr1[6:6]
  343. BYTE E_Tone2:1; // cr1[7:7]
  344. } bitreg;
  345. } cr1;
  346. union // SOP - CR2 Register
  347.  {
  348. BYTE reg;
  349. struct _CR2_REGS {
  350. BYTE Call_II:1; // CR2[0:0]
  351. BYTE Call_I:1; // CR2[1:1]
  352. BYTE Call_en:1; // CR2[2:2]
  353. BYTE Call_pon:1; // CR2[3:3]
  354. BYTE IDR:1; // CR2[4:4]
  355. BYTE COT_R:3; // CR2[5:7]
  356. } bitreg;
  357. } cr2;
  358. union // SOP - CR3 Register
  359.  {
  360. BYTE reg;
  361. struct _CR3_REGS {
  362. BYTE DHP_X:1; // CR3[0:0]
  363. BYTE DHP_R:1; // CR3[1:1]
  364. BYTE Cal_pctl:1; // CR3[2:2]
  365. BYTE SEL:1; // CR3[3:3]
  366. BYTE TestLoops:4; // CR3[4:7]
  367. } bitreg;
  368. } cr3;
  369. union // SOP - CR4 Register
  370.  {
  371. BYTE reg;
  372. struct _CR4_REGS {
  373. BYTE Fsc_en:1; // CR4[0:0]
  374. BYTE Int_en:1; // CR4[1:1]
  375. BYTE AGX:2; // CR4[2:3]
  376. BYTE AGR_R:2; // CR4[4:5]
  377. BYTE AGR_Z:2; // CR4[6:7]
  378. } bitreg;
  379. } cr4;
  380. union // SOP - CR5 Register
  381.  {
  382. BYTE reg;
  383. struct _CR5_REGS {
  384. BYTE V_0:1; // CR5[0:0]
  385. BYTE V_1:1; // CR5[1:1]
  386. BYTE V_2:1; // CR5[2:2]
  387. BYTE V_3:1; // CR5[3:3]
  388. BYTE V_4:1; // CR5[4:4]
  389. BYTE V_5:1; // CR5[5:5]
  390. BYTE V_6:1; // CR5[6:6]
  391. BYTE V_7:1; // CR5[7:7]
  392. } bitreg;
  393. } cr5;
  394. union // SOP - CR6 Register
  395.  {
  396. BYTE reg;
  397. struct _CR6_REGS {
  398. BYTE reserved:8; // CR6[0:7]
  399. } bitreg;
  400. } cr6;
  401. union // SOP - CR7 Register
  402.  {
  403. BYTE reg;
  404. struct _CR7_REGS {
  405. BYTE reserved:8; // CR7[0:7]
  406. } bitreg;
  407. } cr7;
  408. } SOP;
  409. BYTE ByteRegs[sizeof(struct _SOP)];
  410. } SOP_REGS;
  411. // DAA_REGS.SOP_REGS.SOP.CR5.reg
  412. // DAA_REGS.SOP_REGS.SOP.CR5.bitreg
  413. // DAA_REGS.SOP_REGS.SOP.CR5.bitreg.V_2
  414. // DAA_REGS.SOP_REGS.ByteRegs[5]
  415. //-----------------------------------------------
  416. // XOP Registers
  417. //
  418. BYTE byXOP;
  419. union _XOP_REGS {
  420. struct _XOP {
  421. union // XOP - XR0 Register - Read values
  422.  {
  423. BYTE reg;
  424. struct _XR0_BITREGS {
  425. BYTE SI_0:1; // XR0[0:0] - Read
  426. BYTE SI_1:1; // XR0[1:1] - Read
  427. BYTE VDD_OK:1; // XR0[2:2] - Read
  428. BYTE Caller_ID:1; // XR0[3:3] - Read
  429. BYTE RING:1; // XR0[4:4] - Read
  430. BYTE Cadence:1; // XR0[5:5] - Read
  431. BYTE Wake_up:1; // XR0[6:6] - Read
  432. BYTE unused:1; // XR0[7:7] - Read
  433. } bitreg;
  434. } xr0;
  435. union // XOP - XR1 Register
  436.  {
  437. BYTE reg;
  438. struct _XR1_BITREGS {
  439. BYTE M_SI_0:1; // XR1[0:0]
  440. BYTE M_SI_1:1; // XR1[1:1]
  441. BYTE M_VDD_OK:1; // XR1[2:2]
  442. BYTE M_Caller_ID:1; // XR1[3:3]
  443. BYTE M_RING:1; // XR1[4:4]
  444. BYTE M_Cadence:1; // XR1[5:5]
  445. BYTE M_Wake_up:1; // XR1[6:6]
  446. BYTE unused:1; // XR1[7:7]
  447. } bitreg;
  448. } xr1;
  449. union // XOP - XR2 Register
  450.  {
  451. BYTE reg;
  452. struct _XR2_BITREGS {
  453. BYTE CTO0:1; // XR2[0:0]
  454. BYTE CTO1:1; // XR2[1:1]
  455. BYTE CTO2:1; // XR2[2:2]
  456. BYTE CTO3:1; // XR2[3:3]
  457. BYTE CTO4:1; // XR2[4:4]
  458. BYTE CTO5:1; // XR2[5:5]
  459. BYTE CTO6:1; // XR2[6:6]
  460. BYTE CTO7:1; // XR2[7:7]
  461. } bitreg;
  462. } xr2;
  463. union // XOP - XR3 Register
  464.  {
  465. BYTE reg;
  466. struct _XR3_BITREGS {
  467. BYTE DCR0:1; // XR3[0:0]
  468. BYTE DCR1:1; // XR3[1:1]
  469. BYTE DCI:1; // XR3[2:2]
  470. BYTE DCU0:1; // XR3[3:3]
  471. BYTE DCU1:1; // XR3[4:4]
  472. BYTE B_off:1; // XR3[5:5]
  473. BYTE AGB0:1; // XR3[6:6]
  474. BYTE AGB1:1; // XR3[7:7]
  475. } bitreg;
  476. } xr3;
  477. union // XOP - XR4 Register
  478.  {
  479. BYTE reg;
  480. struct _XR4_BITREGS {
  481. BYTE C_0:1; // XR4[0:0]
  482. BYTE C_1:1; // XR4[1:1]
  483. BYTE C_2:1; // XR4[2:2]
  484. BYTE C_3:1; // XR4[3:3]
  485. BYTE C_4:1; // XR4[4:4]
  486. BYTE C_5:1; // XR4[5:5]
  487. BYTE C_6:1; // XR4[6:6]
  488. BYTE C_7:1; // XR4[7:7]
  489. } bitreg;
  490. } xr4;
  491. union // XOP - XR5 Register
  492.  {
  493. BYTE reg;
  494. struct _XR5_BITREGS {
  495. BYTE T_0:1; // XR5[0:0]
  496. BYTE T_1:1; // XR5[1:1]
  497. BYTE T_2:1; // XR5[2:2]
  498. BYTE T_3:1; // XR5[3:3]
  499. BYTE T_4:1; // XR5[4:4]
  500. BYTE T_5:1; // XR5[5:5]
  501. BYTE T_6:1; // XR5[6:6]
  502. BYTE T_7:1; // XR5[7:7]
  503. } bitreg;
  504. } xr5;
  505. union // XOP - XR6 Register - Read Values
  506.  {
  507. BYTE reg;
  508. struct _XR6_BITREGS {
  509. BYTE CPS0:1; // XR6[0:0]
  510. BYTE CPS1:1; // XR6[1:1]
  511. BYTE unused1:2; // XR6[2:3]
  512. BYTE CLK_OFF:1; // XR6[4:4]
  513. BYTE unused2:3; // XR6[5:7]
  514. } bitreg;
  515. } xr6;
  516. union // XOP - XR7 Register
  517.  {
  518. BYTE reg;
  519. struct _XR7_BITREGS {
  520. BYTE unused1:1; // XR7[0:0]
  521. BYTE Vdd0:1; // XR7[1:1]
  522. BYTE Vdd1:1; // XR7[2:2]
  523. BYTE unused2:5; // XR7[3:7]
  524. } bitreg;
  525. } xr7;
  526. } XOP;
  527. BYTE ByteRegs[sizeof(struct _XOP)];
  528. } XOP_REGS;
  529. // DAA_REGS.XOP_REGS.XOP.XR7.reg
  530. // DAA_REGS.XOP_REGS.XOP.XR7.bitreg
  531. // DAA_REGS.XOP_REGS.XOP.XR7.bitreg.Vdd0
  532. // DAA_REGS.XOP_REGS.ByteRegs[7]
  533. //-----------------------------------------------
  534. // COP Registers
  535. //
  536. BYTE byCOP;
  537. union _COP_REGS {
  538. struct _COP {
  539. BYTE THFilterCoeff_1[8]; // COP - TH Filter Coefficients,      CODE=0, Part 1
  540. BYTE THFilterCoeff_2[8]; // COP - TH Filter Coefficients,      CODE=1, Part 2
  541. BYTE THFilterCoeff_3[8]; // COP - TH Filter Coefficients,      CODE=2, Part 3
  542. BYTE RingerImpendance_1[8]; // COP - Ringer Impendance Coefficients,  CODE=3, Part 1
  543. BYTE IMFilterCoeff_1[8]; // COP - IM Filter Coefficients,      CODE=4, Part 1
  544. BYTE IMFilterCoeff_2[8]; // COP - IM Filter Coefficients,      CODE=5, Part 2
  545. BYTE RingerImpendance_2[8]; // COP - Ringer Impendance Coefficients,  CODE=6, Part 2
  546. BYTE FRRFilterCoeff[8]; // COP - FRR Filter Coefficients,      CODE=7
  547. BYTE FRXFilterCoeff[8]; // COP - FRX Filter Coefficients,      CODE=8
  548. BYTE ARFilterCoeff[4]; // COP - AR Filter Coefficients,      CODE=9
  549. BYTE AXFilterCoeff[4]; // COP - AX Filter Coefficients,      CODE=10 
  550. BYTE Tone1Coeff[4]; // COP - Tone1 Coefficients,        CODE=11
  551. BYTE Tone2Coeff[4]; // COP - Tone2 Coefficients,        CODE=12
  552. BYTE LevelmeteringRinging[4]; // COP - Levelmetering Ringing,        CODE=13
  553. BYTE CallerID1stTone[8]; // COP - Caller ID 1st Tone,        CODE=14
  554. BYTE CallerID2ndTone[8]; // COP - Caller ID 2nd Tone,        CODE=15
  555. } COP;
  556. BYTE ByteRegs[sizeof(struct _COP)];
  557. } COP_REGS;
  558. // DAA_REGS.COP_REGS.COP.XR7.Tone1Coeff[3]
  559. // DAA_REGS.COP_REGS.COP.XR7.bitreg
  560. // DAA_REGS.COP_REGS.COP.XR7.bitreg.Vdd0
  561. // DAA_REGS.COP_REGS.ByteRegs[57]
  562. //-----------------------------------------------
  563. // CAO Registers
  564. //
  565. BYTE byCAO;
  566. union _CAO_REGS {
  567. struct _CAO {
  568. BYTE CallerID[512]; // CAO - Caller ID Bytes
  569. } CAO;
  570. BYTE ByteRegs[sizeof(struct _CAO)];
  571. } CAO_REGS;
  572. union // XOP - XR0 Register - Write values
  573.  {
  574. BYTE reg;
  575. struct _XR0_BITREGSW {
  576. BYTE SO_0:1; // XR1[0:0] - Write
  577. BYTE SO_1:1; // XR1[1:1] - Write
  578. BYTE SO_2:1; // XR1[2:2] - Write
  579. BYTE unused:5; // XR1[3:7] - Write
  580. } bitreg;
  581. } XOP_xr0_W;
  582. union // XOP - XR6 Register - Write values
  583.  {
  584. BYTE reg;
  585. struct _XR6_BITREGSW {
  586. BYTE unused1:4; // XR6[0:3]
  587. BYTE CLK_OFF:1; // XR6[4:4]
  588. BYTE unused2:3; // XR6[5:7]
  589. } bitreg;
  590. } XOP_xr6_W;
  591. } DAA_REGS;
  592. #define ALISDAA_ID_BYTE      0x81
  593. #define ALISDAA_CALLERID_SIZE  512
  594. //------------------------------
  595. //
  596. //  Misc definitions
  597. //
  598. // Power Up Operation
  599. #define SOP_PU_SLEEP    0
  600. #define SOP_PU_RINGING    1
  601. #define SOP_PU_CONVERSATION  2
  602. #define SOP_PU_PULSEDIALING  3
  603. #define ALISDAA_CALLERID_SIZE 512
  604. #define PLAYBACK_MODE_COMPRESSED 0 //        Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729
  605. #define PLAYBACK_MODE_TRUESPEECH_V40 0 //        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps
  606. #define PLAYBACK_MODE_TRUESPEECH 8 //        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps Version 5.1
  607. #define PLAYBACK_MODE_ULAW 2 //        Selects: 64 Kbit/sec MuA-law PCM
  608. #define PLAYBACK_MODE_ALAW 10 //        Selects: 64 Kbit/sec A-law PCM
  609. #define PLAYBACK_MODE_16LINEAR 6 //        Selects: 128 Kbit/sec 16-bit linear
  610. #define PLAYBACK_MODE_8LINEAR 4 //        Selects: 64 Kbit/sec 8-bit signed linear
  611. #define PLAYBACK_MODE_8LINEAR_WSS 5 //        Selects: 64 Kbit/sec WSS 8-bit unsigned linear
  612. #define RECORD_MODE_COMPRESSED 0 //        Selects: Compressed modes, TrueSpeech 8.5-4.1, G.723.1, G.722, G.728, G.729
  613. #define RECORD_MODE_TRUESPEECH 0 //        Selects: TrueSpeech 8.5, 6.3, 5.3, 4.8 or 4.1 Kbps
  614. #define RECORD_MODE_ULAW 4 //        Selects: 64 Kbit/sec Mu-law PCM
  615. #define RECORD_MODE_ALAW 12 //        Selects: 64 Kbit/sec A-law PCM
  616. #define RECORD_MODE_16LINEAR 5 //        Selects: 128 Kbit/sec 16-bit linear
  617. #define RECORD_MODE_8LINEAR 6 //        Selects: 64 Kbit/sec 8-bit signed linear
  618. #define RECORD_MODE_8LINEAR_WSS 7 //        Selects: 64 Kbit/sec WSS 8-bit unsigned linear
  619. enum SLIC_STATES {
  620. PLD_SLIC_STATE_OC = 0,
  621. PLD_SLIC_STATE_RINGING,
  622. PLD_SLIC_STATE_ACTIVE,
  623. PLD_SLIC_STATE_OHT,
  624. PLD_SLIC_STATE_TIPOPEN,
  625. PLD_SLIC_STATE_STANDBY,
  626. PLD_SLIC_STATE_APR,
  627. PLD_SLIC_STATE_OHTPR
  628. };
  629. enum SCI_CONTROL {
  630. SCI_End = 0,
  631. SCI_Enable_DAA,
  632. SCI_Enable_Mixer,
  633. SCI_Enable_EEPROM
  634. };
  635. enum Mode {
  636. T63, T53, T48, T40
  637. };
  638. enum Dir {
  639. V3_TO_V4, V4_TO_V3, V4_TO_V5, V5_TO_V4
  640. };
  641. typedef struct Proc_Info_Tag {
  642. enum Mode convert_mode;
  643. enum Dir convert_dir;
  644. int Prev_Frame_Type;
  645. int Current_Frame_Type;
  646. } Proc_Info_Type;
  647. enum PREVAL {
  648. NORMAL = 0,
  649. NOPOST,
  650. POSTONLY,
  651. PREERROR
  652. };
  653. enum IXJ_EXTENSIONS {
  654. G729LOADER = 0,
  655. TS85LOADER,
  656. PRE_READ,
  657. POST_READ,
  658. PRE_WRITE,
  659. POST_WRITE,
  660. PRE_IOCTL,
  661. POST_IOCTL
  662. };
  663. typedef struct {
  664. unsigned int busytone:1;
  665. unsigned int dialtone:1;
  666. unsigned int ringback:1;
  667. unsigned int ringing:1;
  668. unsigned int cringing:1;
  669. unsigned int play_first_frame:1;
  670. unsigned int pstn_present:1;
  671. unsigned int pstn_ringing:1;
  672. unsigned int pots_correct:1;
  673. unsigned int pots_pstn:1;
  674. unsigned int g729_loaded:1;
  675. unsigned int ts85_loaded:1;
  676. unsigned int dtmf_oob:1; // DTMF Out-Of-Band
  677. } IXJ_FLAGS;
  678. /******************************************************************************
  679. *
  680. *  This structure represents the Internet PhoneJACK and Internet LineJACK
  681. *
  682. ******************************************************************************/
  683. typedef struct {
  684. struct phone_device p;
  685. unsigned int board;
  686. unsigned int DSPbase;
  687. unsigned int XILINXbase;
  688. unsigned int serial;
  689. struct phone_capability caplist[30];
  690. unsigned int caps;
  691. struct pnp_dev *dev;
  692. unsigned int cardtype;
  693. unsigned int rec_codec;
  694. char rec_mode;
  695. unsigned int play_codec;
  696. char play_mode;
  697. IXJ_FLAGS flags;
  698. unsigned int rec_frame_size;
  699. unsigned int play_frame_size;
  700. int aec_level;
  701. int readers, writers;
  702. struct wait_queue *poll_q;
  703. struct wait_queue *read_q;
  704. char *read_buffer, *read_buffer_end;
  705. char *read_convert_buffer;
  706. unsigned int read_buffer_size;
  707. unsigned int read_buffer_ready;
  708. struct wait_queue *write_q;
  709. char *write_buffer, *write_buffer_end;
  710. char *write_convert_buffer;
  711. unsigned int write_buffer_size;
  712. unsigned int write_buffers_empty;
  713. unsigned long drybuffer;
  714. char *write_buffer_rp, *write_buffer_wp;
  715. char dtmfbuffer[80];
  716. char dtmf_current;
  717. int dtmf_wp, dtmf_rp, dtmf_state, dtmf_proc;
  718. int tone_off_time, tone_on_time;
  719. struct fasync_struct *async_queue;
  720. unsigned long tone_start_jif;
  721. char tone_index;
  722. char tone_state;
  723. char maxrings;
  724. IXJ_CADENCE *cadence_t;
  725. int tone_cadence_state;
  726. DTMF dtmf;
  727. CPTF cptf;
  728. BYTES dsp;
  729. BYTES ver;
  730. BYTES scr;
  731. BYTES ssr;
  732. BYTES baseframe;
  733. HSR hsr;
  734. GPIO gpio;
  735. PLD_SCRR pld_scrr;
  736. PLD_SCRW pld_scrw;
  737. PLD_SLICW pld_slicw;
  738. PLD_SLICR pld_slicr;
  739. PLD_CLOCK pld_clock;
  740. MIX mix;
  741. unsigned short ring_cadence;
  742. int ring_cadence_t;
  743. unsigned long ring_cadence_jif;
  744. int intercom;
  745. int m_hook;
  746. int r_hook;
  747. char pstn_envelope;
  748. char pstn_cid_intr;
  749. unsigned pstn_cid_recieved;
  750. IXJ_CID cid;
  751. unsigned long pstn_ring_start;
  752. unsigned long pstn_winkstart;
  753. unsigned int winktime;
  754. char port;
  755. union telephony_exception ex;
  756. char daa_mode;
  757. unsigned long pstn_sleeptil;
  758. DAA_REGS m_DAAShadowRegs;
  759. Proc_Info_Type Info_read;
  760. Proc_Info_Type Info_write;
  761. unsigned short frame_count;
  762. unsigned int filter_cadence;
  763. unsigned int filter_hist[4];
  764. unsigned short proc_load;
  765. unsigned long framesread;
  766. unsigned long frameswritten;
  767. unsigned long read_wait;
  768. unsigned long write_wait;
  769. unsigned long timerchecks;
  770. unsigned long txreadycheck;
  771. unsigned long rxreadycheck;
  772. } IXJ;
  773. typedef int (*IXJ_REGFUNC) (IXJ * j, unsigned long arg);
  774. int ixj_register(int index, IXJ_REGFUNC regfunc);
  775. int ixj_unregister(int index);