import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / drivers / isdn / hisax / hisax.h
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);