• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* $Id: hisax.h,v 2.64.2.4 2004/02/11 13:21:33 keil 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/errno.h>
10 #include <linux/fs.h>
11 #include <linux/major.h>
12 #include <asm/io.h>
13 #include <linux/delay.h>
14 #include <linux/kernel.h>
15 #include <linux/signal.h>
16 #include <linux/slab.h>
17 #include <linux/mm.h>
18 #include <linux/mman.h>
19 #include <linux/ioport.h>
20 #include <linux/timer.h>
21 #include <linux/wait.h>
22 #include <linux/isdnif.h>
23 #include <linux/tty.h>
24 #include <linux/serial_reg.h>
25 #include <linux/netdevice.h>
26 
27 #define ERROR_STATISTIC
28 
29 #define REQUEST		0
30 #define CONFIRM		1
31 #define INDICATION	2
32 #define RESPONSE	3
33 
34 #define HW_ENABLE	0x0000
35 #define HW_RESET	0x0004
36 #define HW_POWERUP	0x0008
37 #define HW_ACTIVATE	0x0010
38 #define HW_DEACTIVATE	0x0018
39 
40 #define HW_INFO1	0x0010
41 #define HW_INFO2	0x0020
42 #define HW_INFO3	0x0030
43 #define HW_INFO4	0x0040
44 #define HW_INFO4_P8	0x0040
45 #define HW_INFO4_P10	0x0048
46 #define HW_RSYNC	0x0060
47 #define HW_TESTLOOP	0x0070
48 #define CARD_RESET	0x00F0
49 #define CARD_INIT	0x00F2
50 #define CARD_RELEASE	0x00F3
51 #define CARD_TEST	0x00F4
52 #define CARD_AUX_IND	0x00F5
53 
54 #define PH_ACTIVATE	0x0100
55 #define PH_DEACTIVATE	0x0110
56 #define PH_DATA		0x0120
57 #define PH_PULL		0x0130
58 #define PH_TESTLOOP	0x0140
59 #define PH_PAUSE	0x0150
60 #define MPH_ACTIVATE	0x0180
61 #define MPH_DEACTIVATE	0x0190
62 #define MPH_INFORMATION	0x01A0
63 
64 #define DL_ESTABLISH	0x0200
65 #define DL_RELEASE	0x0210
66 #define DL_DATA		0x0220
67 #define DL_FLUSH	0x0224
68 #define DL_UNIT_DATA	0x0230
69 
70 #define MDL_BC_RELEASE  0x0278  // Formula-n enter:now
71 #define MDL_BC_ASSIGN   0x027C  // Formula-n enter:now
72 #define MDL_ASSIGN	0x0280
73 #define MDL_REMOVE	0x0284
74 #define MDL_ERROR	0x0288
75 #define MDL_INFO_SETUP	0x02E0
76 #define MDL_INFO_CONN	0x02E4
77 #define MDL_INFO_REL	0x02E8
78 
79 #define CC_SETUP	0x0300
80 #define CC_RESUME	0x0304
81 #define CC_MORE_INFO	0x0310
82 #define CC_IGNORE	0x0320
83 #define CC_REJECT	0x0324
84 #define CC_SETUP_COMPL	0x0330
85 #define CC_PROCEEDING	0x0340
86 #define CC_ALERTING	0x0344
87 #define CC_PROGRESS	0x0348
88 #define CC_CONNECT	0x0350
89 #define CC_CHARGE	0x0354
90 #define CC_NOTIFY	0x0358
91 #define CC_DISCONNECT	0x0360
92 #define CC_RELEASE	0x0368
93 #define CC_SUSPEND	0x0370
94 #define CC_PROCEED_SEND 0x0374
95 #define CC_REDIR        0x0378
96 #define CC_T302		0x0382
97 #define CC_T303		0x0383
98 #define CC_T304		0x0384
99 #define CC_T305		0x0385
100 #define CC_T308_1	0x0388
101 #define CC_T308_2	0x038A
102 #define CC_T309         0x0309
103 #define CC_T310		0x0390
104 #define CC_T313		0x0393
105 #define CC_T318		0x0398
106 #define CC_T319		0x0399
107 #define CC_TSPID	0x03A0
108 #define CC_NOSETUP_RSP	0x03E0
109 #define CC_SETUP_ERR	0x03E1
110 #define CC_SUSPEND_ERR	0x03E2
111 #define CC_RESUME_ERR	0x03E3
112 #define CC_CONNECT_ERR	0x03E4
113 #define CC_RELEASE_ERR	0x03E5
114 #define CC_RESTART	0x03F4
115 #define CC_TDSS1_IO     0x13F4    /* DSS1 IO user timer */
116 #define CC_TNI1_IO      0x13F5    /* NI1 IO user timer */
117 
118 /* define maximum number of possible waiting incoming calls */
119 #define MAX_WAITING_CALLS 2
120 
121 
122 #ifdef __KERNEL__
123 
124 /* include l3dss1 & ni1 specific process structures, but no other defines */
125 #ifdef CONFIG_HISAX_EURO
126   #define l3dss1_process
127   #include "l3dss1.h"
128   #undef  l3dss1_process
129 #endif /* CONFIG_HISAX_EURO */
130 
131 #ifdef CONFIG_HISAX_NI1
132   #define l3ni1_process
133   #include "l3ni1.h"
134   #undef  l3ni1_process
135 #endif /* CONFIG_HISAX_NI1 */
136 
137 #define MAX_DFRAME_LEN	260
138 #define MAX_DFRAME_LEN_L1	300
139 #define HSCX_BUFMAX	4096
140 #define MAX_DATA_SIZE	(HSCX_BUFMAX - 4)
141 #define MAX_DATA_MEM	(HSCX_BUFMAX + 64)
142 #define RAW_BUFMAX	(((HSCX_BUFMAX*6)/5) + 5)
143 #define MAX_HEADER_LEN	4
144 #define MAX_WINDOW	8
145 #define MAX_MON_FRAME	32
146 #define MAX_DLOG_SPACE	2048
147 #define MAX_BLOG_SPACE	256
148 
149 /* #define I4L_IRQ_FLAG SA_INTERRUPT */
150 #define I4L_IRQ_FLAG    0
151 
152 /*
153  * Statemachine
154  */
155 
156 struct FsmInst;
157 
158 typedef void (* FSMFNPTR)(struct FsmInst *, int, void *);
159 
160 struct Fsm {
161 	FSMFNPTR *jumpmatrix;
162 	int state_count, event_count;
163 	char **strEvent, **strState;
164 };
165 
166 struct FsmInst {
167 	struct Fsm *fsm;
168 	int state;
169 	int debug;
170 	void *userdata;
171 	int userint;
172 	void (*printdebug) (struct FsmInst *, char *, ...);
173 };
174 
175 struct FsmNode {
176 	int state, event;
177 	void (*routine) (struct FsmInst *, int, void *);
178 };
179 
180 struct FsmTimer {
181 	struct FsmInst *fi;
182 	struct timer_list tl;
183 	int event;
184 	void *arg;
185 };
186 
187 struct L3Timer {
188 	struct l3_process *pc;
189 	struct timer_list tl;
190 	int event;
191 };
192 
193 #define FLG_L1_ACTIVATING	1
194 #define FLG_L1_ACTIVATED	2
195 #define FLG_L1_DEACTTIMER	3
196 #define FLG_L1_ACTTIMER		4
197 #define FLG_L1_T3RUN		5
198 #define FLG_L1_PULL_REQ		6
199 #define FLG_L1_UINT		7
200 
201 struct Layer1 {
202 	void *hardware;
203 	struct BCState *bcs;
204 	struct PStack **stlistp;
205 	unsigned long Flags;
206 	struct FsmInst l1m;
207 	struct FsmTimer	timer;
208 	void (*l1l2) (struct PStack *, int, void *);
209 	void (*l1hw) (struct PStack *, int, void *);
210 	void (*l1tei) (struct PStack *, int, void *);
211 	int mode, bc;
212 	int delay;
213 };
214 
215 #define GROUP_TEI	127
216 #define TEI_SAPI	63
217 #define CTRL_SAPI	0
218 #define PACKET_NOACK	7
219 
220 /* Layer2 Flags */
221 
222 #define FLG_LAPB	0
223 #define FLG_LAPD	1
224 #define FLG_ORIG	2
225 #define FLG_MOD128	3
226 #define FLG_PEND_REL	4
227 #define FLG_L3_INIT	5
228 #define FLG_T200_RUN	6
229 #define FLG_ACK_PEND	7
230 #define FLG_REJEXC	8
231 #define FLG_OWN_BUSY	9
232 #define FLG_PEER_BUSY	10
233 #define FLG_DCHAN_BUSY	11
234 #define FLG_L1_ACTIV	12
235 #define FLG_ESTAB_PEND	13
236 #define FLG_PTP		14
237 #define FLG_FIXED_TEI	15
238 #define FLG_L2BLOCK	16
239 
240 struct Layer2 {
241 	int tei;
242 	int sap;
243 	int maxlen;
244 	u_long flag;
245 	spinlock_t lock;
246 	u_int vs, va, vr;
247 	int rc;
248 	unsigned int window;
249 	unsigned int sow;
250 	struct sk_buff *windowar[MAX_WINDOW];
251 	struct sk_buff_head i_queue;
252 	struct sk_buff_head ui_queue;
253 	void (*l2l1) (struct PStack *, int, void *);
254 	void (*l2l3) (struct PStack *, int, void *);
255 	void (*l2tei) (struct PStack *, int, void *);
256 	struct FsmInst l2m;
257 	struct FsmTimer t200, t203;
258 	int T200, N200, T203;
259 	int debug;
260 	char debug_id[16];
261 };
262 
263 struct Layer3 {
264 	void (*l3l4) (struct PStack *, int, void *);
265         void (*l3ml3) (struct PStack *, int, void *);
266 	void (*l3l2) (struct PStack *, int, void *);
267 	struct FsmInst l3m;
268         struct FsmTimer l3m_timer;
269 	struct sk_buff_head squeue;
270 	struct l3_process *proc;
271 	struct l3_process *global;
272 	int N303;
273 	int debug;
274 	char debug_id[8];
275 };
276 
277 struct LLInterface {
278 	void (*l4l3) (struct PStack *, int, void *);
279         int  (*l4l3_proto) (struct PStack *, isdn_ctrl *);
280 	void *userdata;
281 	u_long flag;
282 };
283 
284 #define	FLG_LLI_L1WAKEUP	1
285 #define	FLG_LLI_L2WAKEUP	2
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 } __attribute__((packed));
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 work_struct tq_rcv;
457 	struct work_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 	u_long Flag;
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 	int ackcnt;
497 	spinlock_t aclock;
498 	struct PStack *st;
499 	u_char *blog;
500 	u_char *conmsg;
501 	struct timer_list transbusy;
502 	struct work_struct tqueue;
503 	u_long event;
504 	int  (*BC_SetStack) (struct PStack *, struct BCState *);
505 	void (*BC_Close) (struct BCState *);
506 #ifdef ERROR_STATISTIC
507 	int err_crc;
508 	int err_tx;
509 	int err_rdo;
510 	int err_inv;
511 #endif
512 	union {
513 		struct hscx_hw hscx;
514 		struct hdlc_hw hdlc;
515 		struct isar_hw isar;
516 		struct hfcB_hw hfc;
517 		struct tiger_hw tiger;
518 		struct amd7930_hw  amd7930;
519 		struct w6692B_hw w6692;
520 		struct hisax_b_if *b_if;
521 	} hw;
522 };
523 
524 struct Channel {
525 	struct PStack *b_st, *d_st;
526 	struct IsdnCardState *cs;
527 	struct BCState *bcs;
528 	int chan;
529 	int incoming;
530 	struct FsmInst fi;
531 	struct FsmTimer drel_timer, dial_timer;
532 	int debug;
533 	int l2_protocol, l2_active_protocol;
534 	int l3_protocol;
535 	int data_open;
536 	struct l3_process *proc;
537 	setup_parm setup;	/* from isdnif.h numbers and Serviceindicator */
538 	u_long Flags;		/* for remembering action done in l4 */
539 	int leased;
540 };
541 
542 struct elsa_hw {
543 	struct pci_dev *dev;
544 	unsigned long base;
545 	unsigned int cfg;
546 	unsigned int ctrl;
547 	unsigned int ale;
548 	unsigned int isac;
549 	unsigned int itac;
550 	unsigned int hscx;
551 	unsigned int trig;
552 	unsigned int timer;
553 	unsigned int counter;
554 	unsigned int status;
555 	struct timer_list tl;
556 	unsigned int MFlag;
557 	struct BCState *bcs;
558 	u_char *transbuf;
559 	u_char *rcvbuf;
560 	unsigned int transp;
561 	unsigned int rcvp;
562 	unsigned int transcnt;
563 	unsigned int rcvcnt;
564 	u_char IER;
565 	u_char FCR;
566 	u_char LCR;
567 	u_char MCR;
568 	u_char ctrl_reg;
569 };
570 
571 struct teles3_hw {
572 	unsigned int cfg_reg;
573 	signed   int isac;
574 	signed   int hscx[2];
575 	signed   int isacfifo;
576 	signed   int hscxfifo[2];
577 };
578 
579 struct teles0_hw {
580 	unsigned int cfg_reg;
581 	void __iomem *membase;
582 	unsigned long phymem;
583 };
584 
585 struct avm_hw {
586 	unsigned int cfg_reg;
587 	unsigned int isac;
588 	unsigned int hscx[2];
589 	unsigned int isacfifo;
590 	unsigned int hscxfifo[2];
591 	unsigned int counter;
592 	struct pci_dev *dev;
593 };
594 
595 struct ix1_hw {
596 	unsigned int cfg_reg;
597 	unsigned int isac_ale;
598 	unsigned int isac;
599 	unsigned int hscx_ale;
600 	unsigned int hscx;
601 };
602 
603 struct diva_hw {
604 	unsigned long cfg_reg;
605 	unsigned long pci_cfg;
606 	unsigned int ctrl;
607 	unsigned long isac_adr;
608 	unsigned int isac;
609 	unsigned long hscx_adr;
610 	unsigned int hscx;
611 	unsigned int status;
612 	struct timer_list tl;
613 	u_char ctrl_reg;
614 	struct pci_dev *dev;
615 };
616 
617 struct asus_hw {
618 	unsigned int cfg_reg;
619 	unsigned int adr;
620 	unsigned int isac;
621 	unsigned int hscx;
622 	unsigned int u7;
623 	unsigned int pots;
624 };
625 
626 
627 struct hfc_hw {
628 	unsigned int addr;
629 	unsigned int fifosize;
630 	unsigned char cirm;
631 	unsigned char ctmt;
632 	unsigned char cip;
633 	u_char isac_spcr;
634 	struct timer_list timer;
635 };
636 
637 struct sedl_hw {
638 	unsigned int cfg_reg;
639 	unsigned int adr;
640 	unsigned int isac;
641 	unsigned int hscx;
642 	unsigned int reset_on;
643 	unsigned int reset_off;
644 	struct isar_reg isar;
645 	unsigned int chip;
646 	unsigned int bus;
647 	struct pci_dev *dev;
648 };
649 
650 struct spt_hw {
651 	unsigned int cfg_reg;
652 	unsigned int isac;
653 	unsigned int hscx[2];
654 	unsigned char res_irq;
655 };
656 
657 struct mic_hw {
658 	unsigned int cfg_reg;
659 	unsigned int adr;
660 	unsigned int isac;
661 	unsigned int hscx;
662 };
663 
664 struct njet_hw {
665 	unsigned long base;
666 	unsigned int isac;
667 	unsigned int auxa;
668 	unsigned char auxd;
669 	unsigned char dmactrl;
670 	unsigned char ctrl_reg;
671 	unsigned char irqmask0;
672 	unsigned char irqstat0;
673 	unsigned char last_is0;
674 	struct pci_dev *dev;
675 };
676 
677 struct hfcPCI_hw {
678 	unsigned char cirm;
679 	unsigned char ctmt;
680 	unsigned char conn;
681 	unsigned char mst_m;
682 	unsigned char int_m1;
683 	unsigned char int_m2;
684 	unsigned char int_s1;
685 	unsigned char sctrl;
686         unsigned char sctrl_r;
687         unsigned char sctrl_e;
688         unsigned char trm;
689 	unsigned char stat;
690 	unsigned char fifo;
691         unsigned char fifo_en;
692         unsigned char bswapped;
693         unsigned char nt_mode;
694         int nt_timer;
695         struct pci_dev *dev;
696         unsigned char *pci_io; /* start of PCI IO memory */
697         void *share_start; /* shared memory for Fifos start */
698         void *fifos; /* FIFO memory */
699         int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
700 	struct timer_list timer;
701 };
702 
703 struct hfcSX_hw {
704         unsigned long base;
705 	unsigned char cirm;
706 	unsigned char ctmt;
707 	unsigned char conn;
708 	unsigned char mst_m;
709 	unsigned char int_m1;
710 	unsigned char int_m2;
711 	unsigned char int_s1;
712 	unsigned char sctrl;
713         unsigned char sctrl_r;
714         unsigned char sctrl_e;
715         unsigned char trm;
716 	unsigned char stat;
717 	unsigned char fifo;
718         unsigned char bswapped;
719         unsigned char nt_mode;
720         unsigned char chip;
721         int b_fifo_size;
722         unsigned char last_fifo;
723         void *extra;
724         int nt_timer;
725 	struct timer_list timer;
726 };
727 
728 struct hfcD_hw {
729 	unsigned int addr;
730 	unsigned int bfifosize;
731 	unsigned int dfifosize;
732 	unsigned char cirm;
733 	unsigned char ctmt;
734 	unsigned char cip;
735 	unsigned char conn;
736 	unsigned char mst_m;
737 	unsigned char int_m1;
738 	unsigned char int_m2;
739 	unsigned char int_s1;
740 	unsigned char sctrl;
741 	unsigned char stat;
742 	unsigned char fifo;
743 	unsigned char f1;
744 	unsigned char f2;
745 	unsigned int *send;
746 	struct timer_list timer;
747 };
748 
749 struct isurf_hw {
750 	unsigned int reset;
751 	unsigned long phymem;
752 	void __iomem *isac;
753 	void __iomem *isar;
754 	struct isar_reg isar_r;
755 };
756 
757 struct saphir_hw {
758 	struct pci_dev *dev;
759 	unsigned int cfg_reg;
760 	unsigned int ale;
761 	unsigned int isac;
762 	unsigned int hscx;
763 	struct timer_list timer;
764 };
765 
766 struct bkm_hw {
767 	struct pci_dev *dev;
768 	unsigned long base;
769 	/* A4T stuff */
770 	unsigned long isac_adr;
771 	unsigned int isac_ale;
772 	unsigned long jade_adr;
773 	unsigned int jade_ale;
774 	/* Scitel Quadro stuff */
775 	unsigned long plx_adr;
776 	unsigned long data_adr;
777 };
778 
779 struct gazel_hw {
780 	struct pci_dev *dev;
781 	unsigned int cfg_reg;
782 	unsigned int pciaddr[2];
783         signed   int ipac;
784 	signed   int isac;
785 	signed   int hscx[2];
786 	signed   int isacfifo;
787 	signed   int hscxfifo[2];
788 	unsigned char timeslot;
789 	unsigned char iom2;
790 };
791 
792 struct w6692_hw {
793 	struct pci_dev *dev;
794 	unsigned int iobase;
795 	struct timer_list timer;
796 };
797 
798 struct arcofi_msg {
799 	struct arcofi_msg *next;
800 	u_char receive;
801 	u_char len;
802 	u_char msg[10];
803 };
804 
805 struct isac_chip {
806 	int ph_state;
807 	u_char *mon_tx;
808 	u_char *mon_rx;
809 	int mon_txp;
810 	int mon_txc;
811 	int mon_rxp;
812 	struct arcofi_msg *arcofi_list;
813 	struct timer_list arcofitimer;
814 	wait_queue_head_t arcofi_wait;
815 	u_char arcofi_bc;
816 	u_char arcofi_state;
817 	u_char mocr;
818 	u_char adf2;
819 };
820 
821 struct hfcd_chip {
822 	int ph_state;
823 };
824 
825 struct hfcpci_chip {
826 	int ph_state;
827 };
828 
829 struct hfcsx_chip {
830 	int ph_state;
831 };
832 
833 struct w6692_chip {
834 	int ph_state;
835 };
836 
837 struct amd7930_chip {
838 	u_char lmr1;
839 	u_char ph_state;
840 	u_char old_state;
841 	u_char flg_t3;
842 	unsigned int tx_xmtlen;
843 	struct timer_list timer3;
844 	void (*ph_command) (struct IsdnCardState *, u_char, char *);
845 	void (*setIrqMask) (struct IsdnCardState *, u_char);
846 };
847 
848 struct icc_chip {
849 	int ph_state;
850 	u_char *mon_tx;
851 	u_char *mon_rx;
852 	int mon_txp;
853 	int mon_txc;
854 	int mon_rxp;
855 	struct arcofi_msg *arcofi_list;
856 	struct timer_list arcofitimer;
857 	wait_queue_head_t arcofi_wait;
858 	u_char arcofi_bc;
859 	u_char arcofi_state;
860 	u_char mocr;
861 	u_char adf2;
862 };
863 
864 #define HW_IOM1			0
865 #define HW_IPAC			1
866 #define HW_ISAR			2
867 #define HW_ARCOFI		3
868 #define FLG_TWO_DCHAN		4
869 #define FLG_L1_DBUSY		5
870 #define FLG_DBUSY_TIMER 	6
871 #define FLG_LOCK_ATOMIC 	7
872 #define FLG_ARCOFI_TIMER	8
873 #define FLG_ARCOFI_ERROR	9
874 #define FLG_HW_L1_UINT		10
875 
876 struct IsdnCardState {
877 	spinlock_t	lock;
878 	u_char		typ;
879 	u_char		subtyp;
880 	int		protocol;
881 	u_int		irq;
882 	u_long		irq_flags;
883 	u_long		HW_Flags;
884 	int		*busy_flag;
885         int		chanlimit; /* limited number of B-chans to use */
886         int		logecho; /* log echo if supported by card */
887 	union {
888 		struct elsa_hw elsa;
889 		struct teles0_hw teles0;
890 		struct teles3_hw teles3;
891 		struct avm_hw avm;
892 		struct ix1_hw ix1;
893 		struct diva_hw diva;
894 		struct asus_hw asus;
895 		struct hfc_hw hfc;
896 		struct sedl_hw sedl;
897 		struct spt_hw spt;
898 		struct mic_hw mic;
899 		struct njet_hw njet;
900 		struct hfcD_hw hfcD;
901 		struct hfcPCI_hw hfcpci;
902 		struct hfcSX_hw hfcsx;
903 		struct ix1_hw niccy;
904 		struct isurf_hw isurf;
905 		struct saphir_hw saphir;
906 		struct bkm_hw ax;
907 		struct gazel_hw gazel;
908 		struct w6692_hw w6692;
909 		struct hisax_d_if *hisax_d_if;
910 	} hw;
911 	int		myid;
912 	isdn_if		iif;
913 	spinlock_t	statlock;
914 	u_char		*status_buf;
915 	u_char		*status_read;
916 	u_char		*status_write;
917 	u_char		*status_end;
918 	u_char		(*readisac) (struct IsdnCardState *, u_char);
919 	void		(*writeisac) (struct IsdnCardState *, u_char, u_char);
920 	void		(*readisacfifo) (struct IsdnCardState *, u_char *, int);
921 	void		(*writeisacfifo) (struct IsdnCardState *, u_char *, int);
922 	u_char		(*BC_Read_Reg) (struct IsdnCardState *, int, u_char);
923 	void		(*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char);
924 	void		(*BC_Send_Data) (struct BCState *);
925 	int		(*cardmsg) (struct IsdnCardState *, int, void *);
926 	void		(*setstack_d) (struct PStack *, struct IsdnCardState *);
927 	void		(*DC_Close) (struct IsdnCardState *);
928 	irq_handler_t	irq_func;
929 	int		(*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
930 	struct Channel	channel[2+MAX_WAITING_CALLS];
931 	struct BCState	bcs[2+MAX_WAITING_CALLS];
932 	struct PStack	*stlist;
933 	struct sk_buff_head rq, sq; /* D-channel queues */
934 	int		cardnr;
935 	char		*dlog;
936 	int		debug;
937 	union {
938 		struct isac_chip isac;
939 		struct hfcd_chip hfcd;
940 		struct hfcpci_chip hfcpci;
941 		struct hfcsx_chip hfcsx;
942 		struct w6692_chip w6692;
943 		struct amd7930_chip amd7930;
944 		struct icc_chip icc;
945 	} dc;
946 	u_char		*rcvbuf;
947 	int		rcvidx;
948 	struct sk_buff	*tx_skb;
949 	int		tx_cnt;
950 	u_long		event;
951 	struct work_struct tqueue;
952 	struct timer_list dbusytimer;
953 #ifdef ERROR_STATISTIC
954 	int		err_crc;
955 	int		err_tx;
956 	int		err_rx;
957 #endif
958 };
959 
960 
961 #define  schedule_event(s, ev)	do {test_and_set_bit(ev, &s->event);schedule_work(&s->tqueue); } while(0)
962 
963 #define  MON0_RX	1
964 #define  MON1_RX	2
965 #define  MON0_TX	4
966 #define  MON1_TX	8
967 
968 
969 #ifdef ISDN_CHIP_ISAC
970 #undef ISDN_CHIP_ISAC
971 #endif
972 
973 #ifdef	CONFIG_HISAX_16_0
974 #define  CARD_TELES0 1
975 #ifndef ISDN_CHIP_ISAC
976 #define ISDN_CHIP_ISAC 1
977 #endif
978 #else
979 #define  CARD_TELES0  0
980 #endif
981 
982 #ifdef	CONFIG_HISAX_16_3
983 #define  CARD_TELES3 1
984 #ifndef ISDN_CHIP_ISAC
985 #define ISDN_CHIP_ISAC 1
986 #endif
987 #else
988 #define  CARD_TELES3  0
989 #endif
990 
991 #ifdef	CONFIG_HISAX_TELESPCI
992 #define  CARD_TELESPCI 1
993 #ifndef ISDN_CHIP_ISAC
994 #define ISDN_CHIP_ISAC 1
995 #endif
996 #else
997 #define  CARD_TELESPCI  0
998 #endif
999 
1000 #ifdef	CONFIG_HISAX_AVM_A1
1001 #define  CARD_AVM_A1 1
1002 #ifndef ISDN_CHIP_ISAC
1003 #define ISDN_CHIP_ISAC 1
1004 #endif
1005 #else
1006 #define  CARD_AVM_A1  0
1007 #endif
1008 
1009 #ifdef	CONFIG_HISAX_AVM_A1_PCMCIA
1010 #define  CARD_AVM_A1_PCMCIA 1
1011 #ifndef ISDN_CHIP_ISAC
1012 #define ISDN_CHIP_ISAC 1
1013 #endif
1014 #else
1015 #define  CARD_AVM_A1_PCMCIA  0
1016 #endif
1017 
1018 #ifdef	CONFIG_HISAX_FRITZPCI
1019 #define  CARD_FRITZPCI 1
1020 #ifndef ISDN_CHIP_ISAC
1021 #define ISDN_CHIP_ISAC 1
1022 #endif
1023 #else
1024 #define  CARD_FRITZPCI  0
1025 #endif
1026 
1027 #ifdef	CONFIG_HISAX_ELSA
1028 #define  CARD_ELSA 1
1029 #ifndef ISDN_CHIP_ISAC
1030 #define ISDN_CHIP_ISAC 1
1031 #endif
1032 #else
1033 #define  CARD_ELSA  0
1034 #endif
1035 
1036 #ifdef	CONFIG_HISAX_IX1MICROR2
1037 #define	CARD_IX1MICROR2 1
1038 #ifndef ISDN_CHIP_ISAC
1039 #define ISDN_CHIP_ISAC 1
1040 #endif
1041 #else
1042 #define CARD_IX1MICROR2 0
1043 #endif
1044 
1045 #ifdef  CONFIG_HISAX_DIEHLDIVA
1046 #define CARD_DIEHLDIVA 1
1047 #ifndef ISDN_CHIP_ISAC
1048 #define ISDN_CHIP_ISAC 1
1049 #endif
1050 #else
1051 #define CARD_DIEHLDIVA 0
1052 #endif
1053 
1054 #ifdef  CONFIG_HISAX_ASUSCOM
1055 #define CARD_ASUSCOM 1
1056 #ifndef ISDN_CHIP_ISAC
1057 #define ISDN_CHIP_ISAC 1
1058 #endif
1059 #else
1060 #define CARD_ASUSCOM 0
1061 #endif
1062 
1063 #ifdef  CONFIG_HISAX_TELEINT
1064 #define CARD_TELEINT 1
1065 #ifndef ISDN_CHIP_ISAC
1066 #define ISDN_CHIP_ISAC 1
1067 #endif
1068 #else
1069 #define CARD_TELEINT 0
1070 #endif
1071 
1072 #ifdef  CONFIG_HISAX_SEDLBAUER
1073 #define CARD_SEDLBAUER 1
1074 #ifndef ISDN_CHIP_ISAC
1075 #define ISDN_CHIP_ISAC 1
1076 #endif
1077 #else
1078 #define CARD_SEDLBAUER 0
1079 #endif
1080 
1081 #ifdef  CONFIG_HISAX_SPORTSTER
1082 #define CARD_SPORTSTER 1
1083 #ifndef ISDN_CHIP_ISAC
1084 #define ISDN_CHIP_ISAC 1
1085 #endif
1086 #else
1087 #define CARD_SPORTSTER 0
1088 #endif
1089 
1090 #ifdef  CONFIG_HISAX_MIC
1091 #define CARD_MIC 1
1092 #ifndef ISDN_CHIP_ISAC
1093 #define ISDN_CHIP_ISAC 1
1094 #endif
1095 #else
1096 #define CARD_MIC 0
1097 #endif
1098 
1099 #ifdef  CONFIG_HISAX_NETJET
1100 #define CARD_NETJET_S 1
1101 #ifndef ISDN_CHIP_ISAC
1102 #define ISDN_CHIP_ISAC 1
1103 #endif
1104 #else
1105 #define CARD_NETJET_S 0
1106 #endif
1107 
1108 #ifdef	CONFIG_HISAX_HFCS
1109 #define  CARD_HFCS 1
1110 #else
1111 #define  CARD_HFCS 0
1112 #endif
1113 
1114 #ifdef	CONFIG_HISAX_HFC_PCI
1115 #define  CARD_HFC_PCI 1
1116 #else
1117 #define  CARD_HFC_PCI 0
1118 #endif
1119 
1120 #ifdef	CONFIG_HISAX_HFC_SX
1121 #define  CARD_HFC_SX 1
1122 #else
1123 #define  CARD_HFC_SX 0
1124 #endif
1125 
1126 #ifdef	CONFIG_HISAX_NICCY
1127 #define	CARD_NICCY 1
1128 #ifndef ISDN_CHIP_ISAC
1129 #define ISDN_CHIP_ISAC 1
1130 #endif
1131 #else
1132 #define CARD_NICCY 0
1133 #endif
1134 
1135 #ifdef	CONFIG_HISAX_ISURF
1136 #define	CARD_ISURF 1
1137 #ifndef ISDN_CHIP_ISAC
1138 #define ISDN_CHIP_ISAC 1
1139 #endif
1140 #else
1141 #define CARD_ISURF 0
1142 #endif
1143 
1144 #ifdef	CONFIG_HISAX_S0BOX
1145 #define	CARD_S0BOX 1
1146 #ifndef ISDN_CHIP_ISAC
1147 #define ISDN_CHIP_ISAC 1
1148 #endif
1149 #else
1150 #define CARD_S0BOX 0
1151 #endif
1152 
1153 #ifdef	CONFIG_HISAX_HSTSAPHIR
1154 #define	CARD_HSTSAPHIR 1
1155 #ifndef ISDN_CHIP_ISAC
1156 #define ISDN_CHIP_ISAC 1
1157 #endif
1158 #else
1159 #define CARD_HSTSAPHIR 0
1160 #endif
1161 
1162 #ifdef	CONFIG_HISAX_BKM_A4T
1163 #define	CARD_BKM_A4T 1
1164 #ifndef ISDN_CHIP_ISAC
1165 #define ISDN_CHIP_ISAC 1
1166 #endif
1167 #else
1168 #define CARD_BKM_A4T 0
1169 #endif
1170 
1171 #ifdef	CONFIG_HISAX_SCT_QUADRO
1172 #define	CARD_SCT_QUADRO 1
1173 #ifndef ISDN_CHIP_ISAC
1174 #define ISDN_CHIP_ISAC 1
1175 #endif
1176 #else
1177 #define CARD_SCT_QUADRO 0
1178 #endif
1179 
1180 #ifdef	CONFIG_HISAX_GAZEL
1181 #define  CARD_GAZEL 1
1182 #ifndef ISDN_CHIP_ISAC
1183 #define ISDN_CHIP_ISAC 1
1184 #endif
1185 #else
1186 #define  CARD_GAZEL  0
1187 #endif
1188 
1189 #ifdef	CONFIG_HISAX_W6692
1190 #define	CARD_W6692	1
1191 #ifndef	ISDN_CHIP_W6692
1192 #define	ISDN_CHIP_W6692	1
1193 #endif
1194 #else
1195 #define	CARD_W6692	0
1196 #endif
1197 
1198 #ifdef  CONFIG_HISAX_NETJET_U
1199 #define CARD_NETJET_U 1
1200 #ifndef ISDN_CHIP_ICC
1201 #define ISDN_CHIP_ICC 1
1202 #endif
1203 #ifndef HISAX_UINTERFACE
1204 #define HISAX_UINTERFACE 1
1205 #endif
1206 #else
1207 #define CARD_NETJET_U 0
1208 #endif
1209 
1210 #ifdef CONFIG_HISAX_ENTERNOW_PCI
1211 #define CARD_FN_ENTERNOW_PCI 1
1212 #else
1213 #define CARD_FN_ENTERNOW_PCI 0
1214 #endif
1215 
1216 #define TEI_PER_CARD 1
1217 
1218 /* L1 Debug */
1219 #define	L1_DEB_WARN		0x01
1220 #define	L1_DEB_INTSTAT		0x02
1221 #define	L1_DEB_ISAC		0x04
1222 #define	L1_DEB_ISAC_FIFO	0x08
1223 #define	L1_DEB_HSCX		0x10
1224 #define	L1_DEB_HSCX_FIFO	0x20
1225 #define	L1_DEB_LAPD	        0x40
1226 #define	L1_DEB_IPAC	        0x80
1227 #define	L1_DEB_RECEIVE_FRAME    0x100
1228 #define L1_DEB_MONITOR		0x200
1229 #define DEB_DLOG_HEX		0x400
1230 #define DEB_DLOG_VERBOSE	0x800
1231 
1232 #define L2FRAME_DEBUG
1233 
1234 #ifdef L2FRAME_DEBUG
1235 extern void Logl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir);
1236 #endif
1237 
1238 #include "hisax_cfg.h"
1239 
1240 void init_bcstate(struct IsdnCardState *cs, int bc);
1241 
1242 void setstack_HiSax(struct PStack *st, struct IsdnCardState *cs);
1243 void HiSax_addlist(struct IsdnCardState *sp, struct PStack *st);
1244 void HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st);
1245 
1246 void setstack_l1_B(struct PStack *st);
1247 
1248 void setstack_tei(struct PStack *st);
1249 void setstack_manager(struct PStack *st);
1250 
1251 void setstack_isdnl2(struct PStack *st, char *debug_id);
1252 void releasestack_isdnl2(struct PStack *st);
1253 void setstack_transl2(struct PStack *st);
1254 void releasestack_transl2(struct PStack *st);
1255 void lli_writewakeup(struct PStack *st, int len);
1256 
1257 void setstack_l3dc(struct PStack *st, struct Channel *chanp);
1258 void setstack_l3bc(struct PStack *st, struct Channel *chanp);
1259 void releasestack_isdnl3(struct PStack *st);
1260 
1261 u_char *findie(u_char * p, int size, u_char ie, int wanted_set);
1262 int getcallref(u_char * p);
1263 int newcallref(void);
1264 
1265 int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
1266 void FsmFree(struct Fsm *fsm);
1267 int FsmEvent(struct FsmInst *fi, int event, void *arg);
1268 void FsmChangeState(struct FsmInst *fi, int newstate);
1269 void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
1270 int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
1271 	void *arg, int where);
1272 void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
1273 	void *arg, int where);
1274 void FsmDelTimer(struct FsmTimer *ft, int where);
1275 int jiftime(char *s, long mark);
1276 
1277 int HiSax_command(isdn_ctrl * ic);
1278 int HiSax_writebuf_skb(int id, int chan, int ack, struct sk_buff *skb);
1279 void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
1280 void VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args);
1281 void HiSax_reportcard(int cardnr, int sel);
1282 int QuickHex(char *txt, u_char * p, int cnt);
1283 void LogFrame(struct IsdnCardState *cs, u_char * p, int size);
1284 void dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir);
1285 void iecpy(u_char * dest, u_char * iestart, int ieoffset);
1286 #endif	/* __KERNEL__ */
1287 
1288 /*
1289  * Busywait delay for `jiffs' jiffies
1290  */
1291 #define HZDELAY(jiffs) do {					\
1292 		int tout = jiffs;				\
1293 								\
1294 		while (tout--) {				\
1295 			int loops = USEC_PER_SEC / HZ;		\
1296 			while (loops--)				\
1297 				udelay(1);			\
1298 		}						\
1299 	} while (0)
1300 
1301 int ll_run(struct IsdnCardState *cs, int addfeatures);
1302 int CallcNew(void);
1303 void CallcFree(void);
1304 int CallcNewChan(struct IsdnCardState *cs);
1305 void CallcFreeChan(struct IsdnCardState *cs);
1306 int Isdnl1New(void);
1307 void Isdnl1Free(void);
1308 int Isdnl2New(void);
1309 void Isdnl2Free(void);
1310 int Isdnl3New(void);
1311 void Isdnl3Free(void);
1312 void init_tei(struct IsdnCardState *cs, int protocol);
1313 void release_tei(struct IsdnCardState *cs);
1314 char *HiSax_getrev(const char *revision);
1315 int TeiNew(void);
1316 void TeiFree(void);
1317