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