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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: hisax.h,v 1.1.4.2 2001/12/09 19:15:28 kai Exp $
  2.  *
  3.  * Basic declarations, defines and prototypes
  4.  *
  5.  * This software may be used and distributed according to the terms
  6.  * of the GNU General Public License, incorporated herein by reference.
  7.  *
  8.  */
  9. #include <linux/config.h>
  10. #include <linux/errno.h>
  11. #include <linux/fs.h>
  12. #include <linux/major.h>
  13. #include <asm/segment.h>
  14. #include <asm/io.h>
  15. #include <linux/delay.h>
  16. #include <linux/kernel.h>
  17. #include <linux/signal.h>
  18. #include <linux/slab.h>
  19. #include <linux/mm.h>
  20. #include <linux/mman.h>
  21. #include <linux/ioport.h>
  22. #include <linux/timer.h>
  23. #include <linux/wait.h>
  24. #include <linux/isdnif.h>
  25. #include <linux/tty.h>
  26. #include <linux/serial_reg.h>
  27. #include <linux/netdevice.h>
  28. #define ERROR_STATISTIC
  29. #define REQUEST 0
  30. #define CONFIRM 1
  31. #define INDICATION 2
  32. #define RESPONSE 3
  33. #define HW_ENABLE 0x0000
  34. #define HW_RESET 0x0004
  35. #define HW_POWERUP 0x0008
  36. #define HW_ACTIVATE 0x0010
  37. #define HW_DEACTIVATE 0x0018
  38. #define HW_INFO1 0x0010
  39. #define HW_INFO2 0x0020
  40. #define HW_INFO3 0x0030
  41. #define HW_INFO4 0x0040
  42. #define HW_INFO4_P8 0x0040
  43. #define HW_INFO4_P10 0x0048
  44. #define HW_RSYNC 0x0060
  45. #define HW_TESTLOOP 0x0070
  46. #define CARD_RESET 0x00F0
  47. #define CARD_INIT 0x00F2
  48. #define CARD_RELEASE 0x00F3
  49. #define CARD_TEST 0x00F4
  50. #define CARD_AUX_IND 0x00F5
  51. #define PH_ACTIVATE 0x0100
  52. #define PH_DEACTIVATE 0x0110
  53. #define PH_DATA 0x0120
  54. #define PH_PULL 0x0130
  55. #define PH_TESTLOOP 0x0140
  56. #define PH_PAUSE 0x0150
  57. #define MPH_ACTIVATE 0x0180
  58. #define MPH_DEACTIVATE 0x0190
  59. #define MPH_INFORMATION 0x01A0
  60. #define DL_ESTABLISH 0x0200
  61. #define DL_RELEASE 0x0210
  62. #define DL_DATA 0x0220
  63. #define DL_FLUSH 0x0224
  64. #define DL_UNIT_DATA 0x0230
  65. #define MDL_ASSIGN 0x0280
  66. #define MDL_REMOVE 0x0284
  67. #define MDL_ERROR 0x0288
  68. #define MDL_INFO_SETUP 0x02E0
  69. #define MDL_INFO_CONN 0x02E4
  70. #define MDL_INFO_REL 0x02E8
  71. #define CC_SETUP 0x0300
  72. #define CC_RESUME 0x0304
  73. #define CC_MORE_INFO 0x0310
  74. #define CC_IGNORE 0x0320
  75. #define CC_REJECT 0x0324
  76. #define CC_SETUP_COMPL 0x0330
  77. #define CC_PROCEEDING 0x0340
  78. #define CC_ALERTING 0x0344
  79. #define CC_PROGRESS 0x0348
  80. #define CC_CONNECT 0x0350
  81. #define CC_CHARGE 0x0354
  82. #define CC_NOTIFY 0x0358
  83. #define CC_DISCONNECT 0x0360
  84. #define CC_RELEASE 0x0368
  85. #define CC_SUSPEND 0x0370
  86. #define CC_PROCEED_SEND 0x0374
  87. #define CC_REDIR        0x0378
  88. #define CC_T302 0x0382
  89. #define CC_T303 0x0383
  90. #define CC_T304 0x0384
  91. #define CC_T305 0x0385
  92. #define CC_T308_1 0x0388
  93. #define CC_T308_2 0x038A
  94. #define CC_T309         0x0309
  95. #define CC_T310 0x0390
  96. #define CC_T313 0x0393
  97. #define CC_T318 0x0398
  98. #define CC_T319 0x0399
  99. #define CC_TSPID 0x03A0
  100. #define CC_NOSETUP_RSP 0x03E0
  101. #define CC_SETUP_ERR 0x03E1
  102. #define CC_SUSPEND_ERR 0x03E2
  103. #define CC_RESUME_ERR 0x03E3
  104. #define CC_CONNECT_ERR 0x03E4
  105. #define CC_RELEASE_ERR 0x03E5
  106. #define CC_RESTART 0x03F4
  107. #define CC_TDSS1_IO     0x13F4    /* DSS1 IO user timer */
  108. #define CC_TNI1_IO      0x13F5    /* NI1 IO user timer */
  109. /* define maximum number of possible waiting incoming calls */
  110. #define MAX_WAITING_CALLS 2
  111. #ifdef __KERNEL__
  112. /* include l3dss1 & ni1 specific process structures, but no other defines */
  113. #ifdef CONFIG_HISAX_EURO
  114.   #define l3dss1_process
  115.   #include "l3dss1.h" 
  116.   #undef  l3dss1_process
  117. #endif /* CONFIG_HISAX_EURO */
  118. #ifdef CONFIG_HISAX_NI1
  119.   #define l3ni1_process
  120.   #include "l3ni1.h" 
  121.   #undef  l3ni1_process
  122. #endif /* CONFIG_HISAX_NI1 */
  123. #define MAX_DFRAME_LEN 260
  124. #define MAX_DFRAME_LEN_L1 300
  125. #define HSCX_BUFMAX 4096
  126. #define MAX_DATA_SIZE (HSCX_BUFMAX - 4)
  127. #define MAX_DATA_MEM (HSCX_BUFMAX + 64)
  128. #define RAW_BUFMAX (((HSCX_BUFMAX*6)/5) + 5)
  129. #define MAX_HEADER_LEN 4
  130. #define MAX_WINDOW 8
  131. #define MAX_MON_FRAME 32
  132. #define MAX_DLOG_SPACE 2048
  133. #define MAX_BLOG_SPACE 256
  134. /* #define I4L_IRQ_FLAG SA_INTERRUPT */
  135. #define I4L_IRQ_FLAG    0
  136. /*
  137.  * Statemachine
  138.  */
  139. struct FsmInst;
  140. typedef void (* FSMFNPTR)(struct FsmInst *, int, void *);
  141. struct Fsm {
  142. FSMFNPTR *jumpmatrix;
  143. int state_count, event_count;
  144. char **strEvent, **strState;
  145. };
  146. struct FsmInst {
  147. struct Fsm *fsm;
  148. int state;
  149. int debug;
  150. void *userdata;
  151. int userint;
  152. void (*printdebug) (struct FsmInst *, char *, ...);
  153. };
  154. struct FsmNode {
  155. int state, event;
  156. void (*routine) (struct FsmInst *, int, void *);
  157. };
  158. struct FsmTimer {
  159. struct FsmInst *fi;
  160. struct timer_list tl;
  161. int event;
  162. void *arg;
  163. };
  164. struct L3Timer {
  165. struct l3_process *pc;
  166. struct timer_list tl;
  167. int event;
  168. };
  169. #define FLG_L1_ACTIVATING 1
  170. #define FLG_L1_ACTIVATED 2
  171. #define FLG_L1_DEACTTIMER 3
  172. #define FLG_L1_ACTTIMER 4
  173. #define FLG_L1_T3RUN 5
  174. #define FLG_L1_PULL_REQ 6
  175. #define FLG_L1_UINT 7
  176. struct Layer1 {
  177. void *hardware;
  178. struct BCState *bcs;
  179. struct PStack **stlistp;
  180. long Flags;
  181. struct FsmInst l1m;
  182. struct FsmTimer timer;
  183. void (*l1l2) (struct PStack *, int, void *);
  184. void (*l1hw) (struct PStack *, int, void *);
  185. void (*l1tei) (struct PStack *, int, void *);
  186. int mode, bc;
  187. int delay;
  188. };
  189. #define GROUP_TEI 127
  190. #define TEI_SAPI 63
  191. #define CTRL_SAPI 0
  192. #define PACKET_NOACK 250
  193. /* Layer2 Flags */
  194. #define FLG_LAPB 0
  195. #define FLG_LAPD 1
  196. #define FLG_ORIG 2
  197. #define FLG_MOD128 3
  198. #define FLG_PEND_REL 4
  199. #define FLG_L3_INIT 5
  200. #define FLG_T200_RUN 6
  201. #define FLG_ACK_PEND 7
  202. #define FLG_REJEXC 8
  203. #define FLG_OWN_BUSY 9
  204. #define FLG_PEER_BUSY 10
  205. #define FLG_DCHAN_BUSY 11
  206. #define FLG_L1_ACTIV 12
  207. #define FLG_ESTAB_PEND 13
  208. #define FLG_PTP 14
  209. #define FLG_FIXED_TEI 15
  210. #define FLG_L2BLOCK 16
  211. struct Layer2 {
  212. int tei;
  213. int sap;
  214. int maxlen;
  215. unsigned long flag;
  216. unsigned int vs, va, vr;
  217. int rc;
  218. unsigned int window;
  219. unsigned int sow;
  220. struct sk_buff *windowar[MAX_WINDOW];
  221. struct sk_buff_head i_queue;
  222. struct sk_buff_head ui_queue;
  223. void (*l2l1) (struct PStack *, int, void *);
  224. void (*l2l3) (struct PStack *, int, void *);
  225. void (*l2tei) (struct PStack *, int, void *);
  226. struct FsmInst l2m;
  227. struct FsmTimer t200, t203;
  228. int T200, N200, T203;
  229. int debug;
  230. char debug_id[16];
  231. };
  232. struct Layer3 {
  233. void (*l3l4) (struct PStack *, int, void *);
  234.         void (*l3ml3) (struct PStack *, int, void *);
  235. void (*l3l2) (struct PStack *, int, void *);
  236. struct FsmInst l3m;
  237.         struct FsmTimer l3m_timer;
  238. struct sk_buff_head squeue;
  239. struct l3_process *proc;
  240. struct l3_process *global;
  241. int N303;
  242. int debug;
  243. char debug_id[8];
  244. };
  245. struct LLInterface {
  246. void (*l4l3) (struct PStack *, int, void *);
  247.         int  (*l4l3_proto) (struct PStack *, isdn_ctrl *);
  248. void *userdata;
  249. void (*l1writewakeup) (struct PStack *, int);
  250. void (*l2writewakeup) (struct PStack *, int);
  251. };
  252. struct Management {
  253. int ri;
  254. struct FsmInst tei_m;
  255. struct FsmTimer t202;
  256. int T202, N202, debug;
  257. void (*layer) (struct PStack *, int, void *);
  258. };
  259. #define NO_CAUSE 254
  260. struct Param {
  261. u_char cause;
  262. u_char loc;
  263. u_char diag[6];
  264. int bchannel;
  265. int chargeinfo;
  266. int spv; /* SPV Flag */
  267. setup_parm setup; /* from isdnif.h numbers and Serviceindicator */
  268. u_char moderate; /* transfer mode and rate (bearer octet 4) */
  269. };
  270. struct PStack {
  271. struct PStack *next;
  272. struct Layer1 l1;
  273. struct Layer2 l2;
  274. struct Layer3 l3;
  275. struct LLInterface lli;
  276. struct Management ma;
  277. int protocol; /* EDSS1, 1TR6 or NI1 */
  278.         /* protocol specific data fields */
  279.         union
  280.  { u_char uuuu; /* only as dummy */
  281. #ifdef CONFIG_HISAX_EURO
  282.            dss1_stk_priv dss1; /* private dss1 data */
  283. #endif /* CONFIG_HISAX_EURO */              
  284. #ifdef CONFIG_HISAX_NI1
  285.            ni1_stk_priv ni1; /* private ni1 data */
  286. #endif /* CONFIG_HISAX_NI1 */             
  287.  } prot;
  288. };
  289. struct l3_process {
  290. int callref;
  291. int state;
  292. struct L3Timer timer;
  293. int N303;
  294. int debug;
  295. struct Param para;
  296. struct Channel *chan;
  297. struct PStack *st;
  298. struct l3_process *next;
  299.         ulong redir_result;
  300.         /* protocol specific data fields */
  301.         union 
  302.  { u_char uuuu; /* only when euro not defined, avoiding empty union */
  303. #ifdef CONFIG_HISAX_EURO 
  304.            dss1_proc_priv dss1; /* private dss1 data */
  305. #endif /* CONFIG_HISAX_EURO */            
  306. #ifdef CONFIG_HISAX_NI1
  307.            ni1_proc_priv ni1; /* private ni1 data */
  308. #endif /* CONFIG_HISAX_NI1 */             
  309.  } prot;
  310. };
  311. struct hscx_hw {
  312. int hscx;
  313. int rcvidx;
  314. int count;              /* Current skb sent count */
  315. u_char *rcvbuf;         /* B-Channel receive Buffer */
  316. u_char tsaxr0;
  317. u_char tsaxr1;
  318. };
  319. struct w6692B_hw {
  320. int bchan;
  321. int rcvidx;
  322. int count;              /* Current skb sent count */
  323. u_char *rcvbuf;         /* B-Channel receive Buffer */
  324. };
  325. struct isar_reg {
  326. unsigned long Flags;
  327. volatile u_char bstat;
  328. volatile u_char iis;
  329. volatile u_char cmsb;
  330. volatile u_char clsb;
  331. volatile u_char par[8];
  332. };
  333. struct isar_hw {
  334. int dpath;
  335. int rcvidx;
  336. int txcnt;
  337. int mml;
  338. u_char state;
  339. u_char cmd;
  340. u_char mod;
  341. u_char newcmd;
  342. u_char newmod;
  343. char try_mod;
  344. struct timer_list ftimer;
  345. u_char *rcvbuf;         /* B-Channel receive Buffer */
  346. u_char conmsg[16];
  347. struct isar_reg *reg;
  348. };
  349. struct hdlc_stat_reg {
  350. #ifdef __BIG_ENDIAN
  351. u_char fill __attribute__((packed));
  352. u_char mode __attribute__((packed));
  353. u_char xml  __attribute__((packed));
  354. u_char cmd  __attribute__((packed));
  355. #else
  356. u_char cmd  __attribute__((packed));
  357. u_char xml  __attribute__((packed));
  358. u_char mode __attribute__((packed));
  359. u_char fill __attribute__((packed));
  360. #endif
  361. };
  362. struct hdlc_hw {
  363. union {
  364. u_int ctrl;
  365. struct hdlc_stat_reg sr;
  366. } ctrl;
  367. u_int stat;
  368. int rcvidx;
  369. int count;              /* Current skb sent count */
  370. u_char *rcvbuf;         /* B-Channel receive Buffer */
  371. };
  372. struct hfcB_hw {
  373. unsigned int *send;
  374. int f1;
  375. int f2;
  376. };
  377. struct tiger_hw {
  378. u_int *send;
  379. u_int *s_irq;
  380. u_int *s_end;
  381. u_int *sendp;
  382. u_int *rec;
  383. int free;
  384. u_char *rcvbuf;
  385. u_char *sendbuf;
  386. u_char *sp;
  387. int sendcnt;
  388. u_int s_tot;
  389. u_int r_bitcnt;
  390. u_int r_tot;
  391. u_int r_err;
  392. u_int r_fcs;
  393. u_char r_state;
  394. u_char r_one;
  395. u_char r_val;
  396. u_char s_state;
  397. };
  398. struct amd7930_hw {
  399. u_char *tx_buff;
  400. u_char *rv_buff;
  401. int rv_buff_in;
  402. int rv_buff_out;
  403. struct sk_buff *rv_skb;
  404. struct hdlc_state *hdlc_state;
  405. struct tq_struct tq_rcv;
  406. struct tq_struct tq_xmt;
  407. };
  408. #define BC_FLG_INIT 1
  409. #define BC_FLG_ACTIV 2
  410. #define BC_FLG_BUSY 3
  411. #define BC_FLG_NOFRAME 4
  412. #define BC_FLG_HALF 5
  413. #define BC_FLG_EMPTY 6
  414. #define BC_FLG_ORIG 7
  415. #define BC_FLG_DLEETX 8
  416. #define BC_FLG_LASTDLE 9
  417. #define BC_FLG_FIRST 10
  418. #define BC_FLG_LASTDATA 11
  419. #define BC_FLG_NMD_DATA 12
  420. #define BC_FLG_FTI_RUN 13
  421. #define BC_FLG_LL_OK 14
  422. #define BC_FLG_LL_CONN 15
  423. #define L1_MODE_NULL 0
  424. #define L1_MODE_TRANS 1
  425. #define L1_MODE_HDLC 2
  426. #define L1_MODE_EXTRN 3
  427. #define L1_MODE_HDLC_56K 4
  428. #define L1_MODE_MODEM 7
  429. #define L1_MODE_V32 8
  430. #define L1_MODE_FAX 9
  431. struct BCState {
  432. int channel;
  433. int mode;
  434. long Flag; /* long req'd for set_bit --RR */
  435. struct IsdnCardState *cs;
  436. int tx_cnt; /* B-Channel transmit counter */
  437. struct sk_buff *tx_skb; /* B-Channel transmit Buffer */
  438. struct sk_buff_head rqueue; /* B-Channel receive Queue */
  439. struct sk_buff_head squeue; /* B-Channel send Queue */
  440. struct PStack *st;
  441. u_char *blog;
  442. u_char *conmsg;
  443. struct timer_list transbusy;
  444. struct tq_struct tqueue;
  445. int event;
  446. int  (*BC_SetStack) (struct PStack *, struct BCState *);
  447. void (*BC_Close) (struct BCState *);
  448. #ifdef ERROR_STATISTIC
  449. int err_crc;
  450. int err_tx;
  451. int err_rdo;
  452. int err_inv;
  453. #endif
  454. union {
  455. struct hscx_hw hscx;
  456. struct hdlc_hw hdlc;
  457. struct isar_hw isar;
  458. struct hfcB_hw hfc;
  459. struct tiger_hw tiger;
  460. struct amd7930_hw  amd7930;
  461. struct w6692B_hw w6692;
  462. struct hisax_b_if *b_if;
  463. } hw;
  464. };
  465. struct Channel {
  466. struct PStack *b_st, *d_st;
  467. struct IsdnCardState *cs;
  468. struct BCState *bcs;
  469. int chan;
  470. int incoming;
  471. struct FsmInst fi;
  472. struct FsmTimer drel_timer, dial_timer;
  473. int debug;
  474. int l2_protocol, l2_active_protocol;
  475. int l3_protocol;
  476. int data_open;
  477. struct l3_process *proc;
  478. setup_parm setup; /* from isdnif.h numbers and Serviceindicator */
  479. long Flags; /* for remembering action done in l4 */
  480. /* long req'd for set_bit --RR */
  481. int leased;
  482. };
  483. struct elsa_hw {
  484. unsigned long base;
  485. unsigned int cfg;
  486. unsigned int ctrl;
  487. unsigned int ale;
  488. unsigned int isac;
  489. unsigned int itac;
  490. unsigned int hscx;
  491. unsigned int trig;
  492. unsigned int timer;
  493. unsigned int counter;
  494. unsigned int status;
  495. struct timer_list tl;
  496. unsigned int MFlag;
  497. struct BCState *bcs;
  498. u_char *transbuf;
  499. u_char *rcvbuf;
  500. unsigned int transp;
  501. unsigned int rcvp;
  502. unsigned int transcnt;
  503. unsigned int rcvcnt;
  504. u_char IER;
  505. u_char FCR;
  506. u_char LCR;
  507. u_char MCR;
  508. u_char ctrl_reg;
  509. };
  510. struct teles3_hw {
  511. unsigned int cfg_reg;
  512. signed   int isac;
  513. signed   int hscx[2];
  514. signed   int isacfifo;
  515. signed   int hscxfifo[2];
  516. };
  517. struct teles0_hw {
  518. unsigned int cfg_reg;
  519. unsigned long membase;
  520. unsigned long phymem;
  521. };
  522. struct avm_hw {
  523. unsigned int cfg_reg;
  524. unsigned int isac;
  525. unsigned int hscx[2];
  526. unsigned int isacfifo;
  527. unsigned int hscxfifo[2];
  528. unsigned int counter;
  529. };
  530. struct ix1_hw {
  531. unsigned int cfg_reg;
  532. unsigned int isac_ale;
  533. unsigned int isac;
  534. unsigned int hscx_ale;
  535. unsigned int hscx;
  536. };
  537. struct diva_hw {
  538. unsigned long cfg_reg;
  539. unsigned long pci_cfg;
  540. unsigned int ctrl;
  541. unsigned long isac_adr;
  542. unsigned int isac;
  543. unsigned long hscx_adr;
  544. unsigned int hscx;
  545. unsigned int status;
  546. struct timer_list tl;
  547. u_char ctrl_reg;
  548. };
  549. struct asus_hw {
  550. unsigned int cfg_reg;
  551. unsigned int adr;
  552. unsigned int isac;
  553. unsigned int hscx;
  554. unsigned int u7;
  555. unsigned int pots;
  556. };
  557. struct hfc_hw {
  558. unsigned int addr;
  559. unsigned int fifosize;
  560. unsigned char cirm;
  561. unsigned char ctmt;
  562. unsigned char cip;
  563. u_char isac_spcr;
  564. struct timer_list timer;
  565. };
  566. struct sedl_hw {
  567. unsigned int cfg_reg;
  568. unsigned int adr;
  569. unsigned int isac;
  570. unsigned int hscx;
  571. unsigned int reset_on;
  572. unsigned int reset_off;
  573. struct isar_reg isar;
  574. unsigned int chip;
  575. unsigned int bus;
  576. };
  577. struct spt_hw {
  578. unsigned int cfg_reg;
  579. unsigned int isac;
  580. unsigned int hscx[2];
  581. unsigned char res_irq;
  582. };
  583. struct mic_hw {
  584. unsigned int cfg_reg;
  585. unsigned int adr;
  586. unsigned int isac;
  587. unsigned int hscx;
  588. };
  589. struct njet_hw {
  590. unsigned long base;
  591. unsigned int isac;
  592. unsigned int auxa;
  593. unsigned char auxd;
  594. unsigned char dmactrl;
  595. unsigned char ctrl_reg;
  596. unsigned char irqmask0;
  597. unsigned char irqstat0;
  598. unsigned char last_is0;
  599. };
  600. struct hfcPCI_hw {
  601. unsigned char cirm;
  602. unsigned char ctmt;
  603. unsigned char conn;
  604. unsigned char mst_m;
  605. unsigned char int_m1;
  606. unsigned char int_m2;
  607. unsigned char int_s1;
  608. unsigned char sctrl;
  609.         unsigned char sctrl_r;
  610.         unsigned char sctrl_e;
  611.         unsigned char trm;
  612. unsigned char stat;
  613. unsigned char fifo;
  614.         unsigned char fifo_en;
  615.         unsigned char bswapped;
  616.         unsigned char nt_mode;
  617.         int nt_timer;
  618. unsigned char pci_bus;
  619.         unsigned char pci_device_fn;
  620.         unsigned char *pci_io; /* start of PCI IO memory */
  621.         void *share_start; /* shared memory for Fifos start */
  622.         void *fifos; /* FIFO memory */ 
  623.         int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
  624. struct timer_list timer;
  625. };
  626. struct hfcSX_hw {
  627.         unsigned long base;
  628. unsigned char cirm;
  629. unsigned char ctmt;
  630. unsigned char conn;
  631. unsigned char mst_m;
  632. unsigned char int_m1;
  633. unsigned char int_m2;
  634. unsigned char int_s1;
  635. unsigned char sctrl;
  636.         unsigned char sctrl_r;
  637.         unsigned char sctrl_e;
  638.         unsigned char trm;
  639. unsigned char stat;
  640. unsigned char fifo;
  641.         unsigned char bswapped;
  642.         unsigned char nt_mode;
  643.         unsigned char chip;
  644.         int b_fifo_size;
  645.         unsigned char last_fifo;
  646.         void *extra;
  647.         int nt_timer;
  648. struct timer_list timer;
  649. };
  650. struct hfcD_hw {
  651. unsigned int addr;
  652. unsigned int bfifosize;
  653. unsigned int dfifosize;
  654. unsigned char cirm;
  655. unsigned char ctmt;
  656. unsigned char cip;
  657. unsigned char conn;
  658. unsigned char mst_m;
  659. unsigned char int_m1;
  660. unsigned char int_m2;
  661. unsigned char int_s1;
  662. unsigned char sctrl;
  663. unsigned char stat;
  664. unsigned char fifo;
  665. unsigned char f1;
  666. unsigned char f2;
  667. unsigned int *send;
  668. struct timer_list timer;
  669. };
  670. struct isurf_hw {
  671. unsigned int reset;
  672. unsigned long phymem;
  673. unsigned long isac;
  674. unsigned long isar;
  675. struct isar_reg isar_r;
  676. };
  677. struct saphir_hw {
  678. unsigned int cfg_reg;
  679. unsigned int ale;
  680. unsigned int isac;
  681. unsigned int hscx;
  682. struct timer_list timer;
  683. };
  684. struct bkm_hw {
  685. unsigned long base;
  686. /* A4T stuff */
  687. unsigned long isac_adr;
  688. unsigned int isac_ale;
  689. unsigned long jade_adr;
  690. unsigned int jade_ale;
  691. /* Scitel Quadro stuff */
  692. unsigned long plx_adr;
  693. unsigned long data_adr;
  694. };
  695. struct gazel_hw {
  696. unsigned int cfg_reg;
  697. unsigned int pciaddr[2];
  698.         signed   int ipac;
  699. signed   int isac;
  700. signed   int hscx[2];
  701. signed   int isacfifo;
  702. signed   int hscxfifo[2];
  703. unsigned char timeslot;
  704. unsigned char iom2;
  705. };
  706. struct w6692_hw {
  707. unsigned int iobase;
  708. struct timer_list timer;
  709. };
  710. #ifdef  CONFIG_HISAX_TESTEMU
  711. struct te_hw {
  712. unsigned char *sfifo;
  713. unsigned char *sfifo_w;
  714. unsigned char *sfifo_r;
  715. unsigned char *sfifo_e;
  716. int sfifo_cnt;
  717. unsigned int stat;
  718. wait_queue_head_t rwaitq;
  719. wait_queue_head_t swaitq;
  720. };
  721. #endif
  722. struct arcofi_msg {
  723. struct arcofi_msg *next;
  724. u_char receive;
  725. u_char len;
  726. u_char msg[10];
  727. };
  728. struct isac_chip {
  729. int ph_state;
  730. u_char *mon_tx;
  731. u_char *mon_rx;
  732. int mon_txp;
  733. int mon_txc;
  734. int mon_rxp;
  735. struct arcofi_msg *arcofi_list;
  736. struct timer_list arcofitimer;
  737. wait_queue_head_t arcofi_wait;
  738. u_char arcofi_bc;
  739. u_char arcofi_state;
  740. u_char mocr;
  741. u_char adf2;
  742. };
  743. struct hfcd_chip {
  744. int ph_state;
  745. };
  746. struct hfcpci_chip {
  747. int ph_state;
  748. };
  749. struct hfcsx_chip {
  750. int ph_state;
  751. };
  752. struct w6692_chip {
  753. int ph_state;
  754. };
  755. struct icc_chip {
  756. int ph_state;
  757. u_char *mon_tx;
  758. u_char *mon_rx;
  759. int mon_txp;
  760. int mon_txc;
  761. int mon_rxp;
  762. struct arcofi_msg *arcofi_list;
  763. struct timer_list arcofitimer;
  764. wait_queue_head_t arcofi_wait;
  765. u_char arcofi_bc;
  766. u_char arcofi_state;
  767. u_char mocr;
  768. u_char adf2;
  769. };
  770. #define HW_IOM1 0
  771. #define HW_IPAC 1
  772. #define HW_ISAR 2
  773. #define HW_ARCOFI 3
  774. #define FLG_TWO_DCHAN 4
  775. #define FLG_L1_DBUSY 5
  776. #define FLG_DBUSY_TIMER  6
  777. #define FLG_LOCK_ATOMIC  7
  778. #define FLG_ARCOFI_TIMER 8
  779. #define FLG_ARCOFI_ERROR 9
  780. #define FLG_HW_L1_UINT 10
  781. struct IsdnCardState {
  782. unsigned char typ;
  783. unsigned char subtyp;
  784. int protocol;
  785. unsigned int irq;
  786. unsigned long irq_flags;
  787. long HW_Flags;
  788. int *busy_flag;
  789.         int chanlimit; /* limited number of B-chans to use */
  790.         int logecho; /* log echo if supported by card */
  791. union {
  792. struct elsa_hw elsa;
  793. struct teles0_hw teles0;
  794. struct teles3_hw teles3;
  795. struct avm_hw avm;
  796. struct ix1_hw ix1;
  797. struct diva_hw diva;
  798. struct asus_hw asus;
  799. struct hfc_hw hfc;
  800. struct sedl_hw sedl;
  801. struct spt_hw spt;
  802. struct mic_hw mic;
  803. struct njet_hw njet;
  804. struct hfcD_hw hfcD;
  805. struct hfcPCI_hw hfcpci;
  806. struct hfcSX_hw hfcsx;
  807. struct ix1_hw niccy;
  808. struct isurf_hw isurf;
  809. struct saphir_hw saphir;
  810. #ifdef CONFIG_HISAX_TESTEMU
  811. struct te_hw te;
  812. #endif
  813. struct bkm_hw ax;
  814. struct gazel_hw gazel;
  815. struct w6692_hw w6692;
  816. struct hisax_d_if *hisax_d_if;
  817. } hw;
  818. int myid;
  819. isdn_if iif;
  820. u_char *status_buf;
  821. u_char *status_read;
  822. u_char *status_write;
  823. u_char *status_end;
  824. u_char (*readisac) (struct IsdnCardState *, u_char);
  825. void   (*writeisac) (struct IsdnCardState *, u_char, u_char);
  826. void   (*readisacfifo) (struct IsdnCardState *, u_char *, int);
  827. void   (*writeisacfifo) (struct IsdnCardState *, u_char *, int);
  828. u_char (*BC_Read_Reg) (struct IsdnCardState *, int, u_char);
  829. void   (*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char);
  830. void   (*BC_Send_Data) (struct BCState *);
  831. int    (*cardmsg) (struct IsdnCardState *, int, void *);
  832. void   (*setstack_d) (struct PStack *, struct IsdnCardState *);
  833. void   (*DC_Close) (struct IsdnCardState *);
  834. void   (*irq_func) (int, void *, struct pt_regs *);
  835. int    (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
  836. struct Channel channel[2+MAX_WAITING_CALLS];
  837. struct BCState bcs[2+MAX_WAITING_CALLS];
  838. struct PStack *stlist;
  839. struct sk_buff_head rq, sq; /* D-channel queues */
  840. int cardnr;
  841. char *dlog;
  842. int debug;
  843. union {
  844. struct isac_chip isac;
  845. struct hfcd_chip hfcd;
  846. struct hfcpci_chip hfcpci;
  847. struct hfcsx_chip hfcsx;
  848. struct w6692_chip w6692;
  849. struct icc_chip icc;
  850. } dc;
  851. u_char *rcvbuf;
  852. int rcvidx;
  853. struct sk_buff *tx_skb;
  854. int tx_cnt;
  855. long event;
  856. struct tq_struct tqueue;
  857. struct timer_list dbusytimer;
  858. #ifdef ERROR_STATISTIC
  859. int err_crc;
  860. int err_tx;
  861. int err_rx;
  862. #endif
  863. };
  864. #define  MON0_RX 1
  865. #define  MON1_RX 2
  866. #define  MON0_TX 4
  867. #define  MON1_TX 8
  868. #define  ISDN_CTYPE_16_0 1
  869. #define  ISDN_CTYPE_8_0 2
  870. #define  ISDN_CTYPE_16_3 3
  871. #define  ISDN_CTYPE_PNP 4
  872. #define  ISDN_CTYPE_A1 5
  873. #define  ISDN_CTYPE_ELSA 6
  874. #define  ISDN_CTYPE_ELSA_PNP 7
  875. #define  ISDN_CTYPE_TELESPCMCIA 8
  876. #define  ISDN_CTYPE_IX1MICROR2 9
  877. #define  ISDN_CTYPE_ELSA_PCMCIA 10
  878. #define  ISDN_CTYPE_DIEHLDIVA 11
  879. #define  ISDN_CTYPE_ASUSCOM 12
  880. #define  ISDN_CTYPE_TELEINT 13
  881. #define  ISDN_CTYPE_TELES3C 14
  882. #define  ISDN_CTYPE_SEDLBAUER 15
  883. #define  ISDN_CTYPE_SPORTSTER 16
  884. #define  ISDN_CTYPE_MIC 17
  885. #define  ISDN_CTYPE_ELSA_PCI 18
  886. #define  ISDN_CTYPE_COMPAQ_ISA 19
  887. #define  ISDN_CTYPE_NETJET_S 20
  888. #define  ISDN_CTYPE_TELESPCI 21
  889. #define  ISDN_CTYPE_SEDLBAUER_PCMCIA 22
  890. #define  ISDN_CTYPE_AMD7930 23
  891. #define  ISDN_CTYPE_NICCY 24
  892. #define  ISDN_CTYPE_S0BOX 25
  893. #define  ISDN_CTYPE_A1_PCMCIA 26
  894. #define  ISDN_CTYPE_FRITZPCI 27
  895. #define  ISDN_CTYPE_SEDLBAUER_FAX     28
  896. #define  ISDN_CTYPE_ISURF 29
  897. #define  ISDN_CTYPE_ACERP10 30
  898. #define  ISDN_CTYPE_HSTSAPHIR 31
  899. #define  ISDN_CTYPE_BKM_A4T 32
  900. #define  ISDN_CTYPE_SCT_QUADRO 33
  901. #define  ISDN_CTYPE_GAZEL 34
  902. #define  ISDN_CTYPE_HFC_PCI 35
  903. #define  ISDN_CTYPE_W6692 36
  904. #define  ISDN_CTYPE_HFC_SX      37
  905. #define  ISDN_CTYPE_NETJET_U 38
  906. #define  ISDN_CTYPE_HFC_SP_PCMCIA      39
  907. #define  ISDN_CTYPE_DYNAMIC     40
  908. #define  ISDN_CTYPE_COUNT 40
  909. #ifdef ISDN_CHIP_ISAC
  910. #undef ISDN_CHIP_ISAC
  911. #endif
  912. #ifdef CONFIG_HISAX_16_0
  913. #define  CARD_TELES0 1
  914. #ifndef ISDN_CHIP_ISAC
  915. #define ISDN_CHIP_ISAC 1
  916. #endif
  917. #else
  918. #define  CARD_TELES0  0
  919. #endif
  920. #ifdef CONFIG_HISAX_16_3
  921. #define  CARD_TELES3 1
  922. #ifndef ISDN_CHIP_ISAC
  923. #define ISDN_CHIP_ISAC 1
  924. #endif
  925. #else
  926. #define  CARD_TELES3  0
  927. #endif
  928. #ifdef CONFIG_HISAX_TELESPCI
  929. #define  CARD_TELESPCI 1
  930. #ifndef ISDN_CHIP_ISAC
  931. #define ISDN_CHIP_ISAC 1
  932. #endif
  933. #else
  934. #define  CARD_TELESPCI  0
  935. #endif
  936. #ifdef CONFIG_HISAX_AVM_A1
  937. #define  CARD_AVM_A1 1
  938. #ifndef ISDN_CHIP_ISAC
  939. #define ISDN_CHIP_ISAC 1
  940. #endif
  941. #else
  942. #define  CARD_AVM_A1  0
  943. #endif
  944. #ifdef CONFIG_HISAX_AVM_A1_PCMCIA
  945. #define  CARD_AVM_A1_PCMCIA 1
  946. #ifndef ISDN_CHIP_ISAC
  947. #define ISDN_CHIP_ISAC 1
  948. #endif
  949. #else
  950. #define  CARD_AVM_A1_PCMCIA  0
  951. #endif
  952. #ifdef CONFIG_HISAX_FRITZPCI
  953. #define  CARD_FRITZPCI 1
  954. #ifndef ISDN_CHIP_ISAC
  955. #define ISDN_CHIP_ISAC 1
  956. #endif
  957. #else
  958. #define  CARD_FRITZPCI  0
  959. #endif
  960. #ifdef CONFIG_HISAX_ELSA
  961. #define  CARD_ELSA 1
  962. #ifndef ISDN_CHIP_ISAC
  963. #define ISDN_CHIP_ISAC 1
  964. #endif
  965. #else
  966. #define  CARD_ELSA  0
  967. #endif
  968. #ifdef CONFIG_HISAX_IX1MICROR2
  969. #define CARD_IX1MICROR2 1
  970. #ifndef ISDN_CHIP_ISAC
  971. #define ISDN_CHIP_ISAC 1
  972. #endif
  973. #else
  974. #define CARD_IX1MICROR2 0
  975. #endif
  976. #ifdef  CONFIG_HISAX_DIEHLDIVA
  977. #define CARD_DIEHLDIVA 1
  978. #ifndef ISDN_CHIP_ISAC
  979. #define ISDN_CHIP_ISAC 1
  980. #endif
  981. #else
  982. #define CARD_DIEHLDIVA 0
  983. #endif
  984. #ifdef  CONFIG_HISAX_ASUSCOM
  985. #define CARD_ASUSCOM 1
  986. #ifndef ISDN_CHIP_ISAC
  987. #define ISDN_CHIP_ISAC 1
  988. #endif
  989. #else
  990. #define CARD_ASUSCOM 0
  991. #endif
  992. #ifdef  CONFIG_HISAX_TELEINT
  993. #define CARD_TELEINT 1
  994. #ifndef ISDN_CHIP_ISAC
  995. #define ISDN_CHIP_ISAC 1
  996. #endif
  997. #else
  998. #define CARD_TELEINT 0
  999. #endif
  1000. #ifdef  CONFIG_HISAX_SEDLBAUER
  1001. #define CARD_SEDLBAUER 1
  1002. #ifndef ISDN_CHIP_ISAC
  1003. #define ISDN_CHIP_ISAC 1
  1004. #endif
  1005. #else
  1006. #define CARD_SEDLBAUER 0
  1007. #endif
  1008. #ifdef  CONFIG_HISAX_SPORTSTER
  1009. #define CARD_SPORTSTER 1
  1010. #ifndef ISDN_CHIP_ISAC
  1011. #define ISDN_CHIP_ISAC 1
  1012. #endif
  1013. #else
  1014. #define CARD_SPORTSTER 0
  1015. #endif
  1016. #ifdef  CONFIG_HISAX_MIC
  1017. #define CARD_MIC 1
  1018. #ifndef ISDN_CHIP_ISAC
  1019. #define ISDN_CHIP_ISAC 1
  1020. #endif
  1021. #else
  1022. #define CARD_MIC 0
  1023. #endif
  1024. #ifdef  CONFIG_HISAX_NETJET
  1025. #define CARD_NETJET_S 1
  1026. #ifndef ISDN_CHIP_ISAC
  1027. #define ISDN_CHIP_ISAC 1
  1028. #endif
  1029. #else
  1030. #define CARD_NETJET_S 0
  1031. #endif
  1032. #ifdef CONFIG_HISAX_HFCS
  1033. #define  CARD_HFCS 1
  1034. #else
  1035. #define  CARD_HFCS 0
  1036. #endif
  1037. #ifdef CONFIG_HISAX_HFC_PCI
  1038. #define  CARD_HFC_PCI 1
  1039. #else
  1040. #define  CARD_HFC_PCI 0
  1041. #endif
  1042. #ifdef CONFIG_HISAX_HFC_SX
  1043. #define  CARD_HFC_SX 1
  1044. #else
  1045. #define  CARD_HFC_SX 0
  1046. #endif
  1047. #ifdef  CONFIG_HISAX_AMD7930
  1048. #define CARD_AMD7930 1
  1049. #else
  1050. #define CARD_AMD7930 0
  1051. #endif
  1052. #ifdef CONFIG_HISAX_NICCY
  1053. #define CARD_NICCY 1
  1054. #ifndef ISDN_CHIP_ISAC
  1055. #define ISDN_CHIP_ISAC 1
  1056. #endif
  1057. #else
  1058. #define CARD_NICCY 0
  1059. #endif
  1060. #ifdef CONFIG_HISAX_ISURF
  1061. #define CARD_ISURF 1
  1062. #ifndef ISDN_CHIP_ISAC
  1063. #define ISDN_CHIP_ISAC 1
  1064. #endif
  1065. #else
  1066. #define CARD_ISURF 0
  1067. #endif
  1068. #ifdef CONFIG_HISAX_S0BOX
  1069. #define CARD_S0BOX 1
  1070. #ifndef ISDN_CHIP_ISAC
  1071. #define ISDN_CHIP_ISAC 1
  1072. #endif
  1073. #else
  1074. #define CARD_S0BOX 0
  1075. #endif
  1076. #ifdef CONFIG_HISAX_HSTSAPHIR
  1077. #define CARD_HSTSAPHIR 1
  1078. #ifndef ISDN_CHIP_ISAC
  1079. #define ISDN_CHIP_ISAC 1
  1080. #endif
  1081. #else
  1082. #define CARD_HSTSAPHIR 0
  1083. #endif
  1084. #ifdef CONFIG_HISAX_TESTEMU
  1085. #define CARD_TESTEMU 1
  1086. #define ISDN_CTYPE_TESTEMU 99
  1087. #undef ISDN_CTYPE_COUNT
  1088. #define  ISDN_CTYPE_COUNT ISDN_CTYPE_TESTEMU
  1089. #else
  1090. #define CARD_TESTEMU 0
  1091. #endif
  1092. #ifdef CONFIG_HISAX_BKM_A4T
  1093. #define CARD_BKM_A4T 1
  1094. #ifndef ISDN_CHIP_ISAC
  1095. #define ISDN_CHIP_ISAC 1
  1096. #endif
  1097. #else
  1098. #define CARD_BKM_A4T 0
  1099. #endif
  1100. #ifdef CONFIG_HISAX_SCT_QUADRO
  1101. #define CARD_SCT_QUADRO 1
  1102. #ifndef ISDN_CHIP_ISAC
  1103. #define ISDN_CHIP_ISAC 1
  1104. #endif
  1105. #else
  1106. #define CARD_SCT_QUADRO 0
  1107. #endif
  1108. #ifdef CONFIG_HISAX_GAZEL
  1109. #define  CARD_GAZEL 1
  1110. #ifndef ISDN_CHIP_ISAC
  1111. #define ISDN_CHIP_ISAC 1
  1112. #endif
  1113. #else
  1114. #define  CARD_GAZEL  0
  1115. #endif
  1116. #ifdef CONFIG_HISAX_W6692
  1117. #define CARD_W6692 1
  1118. #ifndef ISDN_CHIP_W6692
  1119. #define ISDN_CHIP_W6692 1
  1120. #endif
  1121. #else
  1122. #define CARD_W6692 0
  1123. #endif
  1124. #ifdef  CONFIG_HISAX_NETJET_U
  1125. #define CARD_NETJET_U 1
  1126. #ifndef ISDN_CHIP_ICC
  1127. #define ISDN_CHIP_ICC 1
  1128. #endif
  1129. #ifndef HISAX_UINTERFACE
  1130. #define HISAX_UINTERFACE 1
  1131. #endif
  1132. #else
  1133. #define CARD_NETJET_U 0
  1134. #endif
  1135. #define TEI_PER_CARD 1
  1136. /* L1 Debug */
  1137. #define L1_DEB_WARN 0x01
  1138. #define L1_DEB_INTSTAT 0x02
  1139. #define L1_DEB_ISAC 0x04
  1140. #define L1_DEB_ISAC_FIFO 0x08
  1141. #define L1_DEB_HSCX 0x10
  1142. #define L1_DEB_HSCX_FIFO 0x20
  1143. #define L1_DEB_LAPD         0x40
  1144. #define L1_DEB_IPAC         0x80
  1145. #define L1_DEB_RECEIVE_FRAME    0x100
  1146. #define L1_DEB_MONITOR 0x200
  1147. #define DEB_DLOG_HEX 0x400
  1148. #define DEB_DLOG_VERBOSE 0x800
  1149. #define L2FRAME_DEBUG
  1150. #ifdef L2FRAME_DEBUG
  1151. extern void Logl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir);
  1152. #endif
  1153. struct IsdnCard {
  1154. int typ;
  1155. int protocol; /* EDSS1, 1TR6 or NI1 */
  1156. unsigned long para[4];
  1157. struct IsdnCardState *cs;
  1158. };
  1159. void init_bcstate(struct IsdnCardState *cs, int bc);
  1160. void setstack_HiSax(struct PStack *st, struct IsdnCardState *cs);
  1161. unsigned int random_ri(void);
  1162. void HiSax_addlist(struct IsdnCardState *sp, struct PStack *st);
  1163. void HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st);
  1164. void setstack_l1_B(struct PStack *st);
  1165. void setstack_tei(struct PStack *st);
  1166. void setstack_manager(struct PStack *st);
  1167. void setstack_isdnl2(struct PStack *st, char *debug_id);
  1168. void releasestack_isdnl2(struct PStack *st);
  1169. void setstack_transl2(struct PStack *st);
  1170. void releasestack_transl2(struct PStack *st);
  1171. void setstack_l3dc(struct PStack *st, struct Channel *chanp);
  1172. void setstack_l3bc(struct PStack *st, struct Channel *chanp);
  1173. void releasestack_isdnl3(struct PStack *st);
  1174. u_char *findie(u_char * p, int size, u_char ie, int wanted_set);
  1175. int getcallref(u_char * p);
  1176. int newcallref(void);
  1177. int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
  1178. void FsmFree(struct Fsm *fsm);
  1179. int FsmEvent(struct FsmInst *fi, int event, void *arg);
  1180. void FsmChangeState(struct FsmInst *fi, int newstate);
  1181. void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
  1182. int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
  1183. void *arg, int where);
  1184. void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
  1185. void *arg, int where);
  1186. void FsmDelTimer(struct FsmTimer *ft, int where);
  1187. int jiftime(char *s, long mark);
  1188. int HiSax_command(isdn_ctrl * ic);
  1189. int HiSax_writebuf_skb(int id, int chan, int ack, struct sk_buff *skb);
  1190. void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
  1191. void VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args);
  1192. void HiSax_reportcard(int cardnr, int sel);
  1193. int QuickHex(char *txt, u_char * p, int cnt);
  1194. void LogFrame(struct IsdnCardState *cs, u_char * p, int size);
  1195. void dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir);
  1196. void iecpy(u_char * dest, u_char * iestart, int ieoffset);
  1197. #ifdef ISDN_CHIP_ISAC
  1198. void setstack_isac(struct PStack *st, struct IsdnCardState *cs);
  1199. #endif /* ISDN_CHIP_ISAC */
  1200. #endif /* __KERNEL__ */
  1201. #define HZDELAY(jiffs) {int tout = jiffs; while (tout--) udelay(1000000/HZ);}
  1202. int ll_run(struct IsdnCardState *cs, int addfeatures);
  1203. void ll_stop(struct IsdnCardState *cs);
  1204. int CallcNew(void);
  1205. void CallcFree(void);
  1206. int CallcNewChan(struct IsdnCardState *cs);
  1207. void CallcFreeChan(struct IsdnCardState *cs);
  1208. int Isdnl1New(void);
  1209. void Isdnl1Free(void);
  1210. int Isdnl2New(void);
  1211. void Isdnl2Free(void);
  1212. int Isdnl3New(void);
  1213. void Isdnl3Free(void);
  1214. void init_tei(struct IsdnCardState *cs, int protocol);
  1215. void release_tei(struct IsdnCardState *cs);
  1216. char *HiSax_getrev(const char *revision);
  1217. int TeiNew(void);
  1218. void TeiFree(void);
  1219. int certification_check(int output);