| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 9 | #include <linux/errno.h> | 
|  | 10 | #include <linux/fs.h> | 
|  | 11 | #include <linux/major.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; | 
| Al Viro | 64b3361 | 2007-10-14 19:35:20 +0100 | [diff] [blame] | 205 | unsigned long Flags; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Karsten Keil | ddca248 | 2006-02-03 03:04:48 -0800 | [diff] [blame] | 218 | #define PACKET_NOACK	7 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Jan Blunck | 6a87818 | 2006-01-08 01:05:07 -0800 | [diff] [blame] | 398 | u_char fill; | 
|  | 399 | u_char mode; | 
|  | 400 | u_char xml; | 
|  | 401 | u_char cmd; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 402 | #else | 
| Jan Blunck | 6a87818 | 2006-01-08 01:05:07 -0800 | [diff] [blame] | 403 | u_char cmd; | 
|  | 404 | u_char xml; | 
|  | 405 | u_char mode; | 
|  | 406 | u_char fill; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 407 | #endif | 
| Jan Blunck | 6a87818 | 2006-01-08 01:05:07 -0800 | [diff] [blame] | 408 | } __attribute__((packed)); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 *); | 
| Jeff Garzik | 896c6fa | 2007-10-31 05:42:50 -0400 | [diff] [blame] | 928 | irq_handler_t	irq_func; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| viro@ZenIV.linux.org.uk | f718404 | 2005-09-07 23:19:41 +0100 | [diff] [blame] | 1212 | #else | 
|  | 1213 | #define CARD_FN_ENTERNOW_PCI 0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1286 | #endif	/* __KERNEL__ */ | 
|  | 1287 |  | 
| Andrew Morton | ca8af48 | 2006-10-02 02:17:38 -0700 | [diff] [blame] | 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) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1300 |  | 
|  | 1301 | int ll_run(struct IsdnCardState *cs, int addfeatures); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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); |