11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* $Id: hisax.h,v 2.64.2.4 2004/02/11 13:21:33 keil Exp $
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Basic declarations, defines and prototypes
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This software may be used and distributed according to the terms
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the GNU General Public License, incorporated herein by reference.
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/errno.h>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fs.h>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/major.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h>
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/delay.h>
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h>
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/signal.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/slab.h>
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mm.h>
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mman.h>
19a6b7a407865aab9f849dd99a71072b7cd1175116Alexey Dobriyan#include <linux/interrupt.h>
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/ioport.h>
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/timer.h>
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/wait.h>
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/isdnif.h>
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/tty.h>
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/serial_reg.h>
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/netdevice.h>
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERROR_STATISTIC
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REQUEST		0
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CONFIRM		1
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INDICATION	2
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESPONSE	3
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_ENABLE	0x0000
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_RESET	0x0004
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_POWERUP	0x0008
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_ACTIVATE	0x0010
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_DEACTIVATE	0x0018
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO1	0x0010
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO2	0x0020
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO3	0x0030
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO4	0x0040
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO4_P8	0x0040
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_INFO4_P10	0x0048
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_RSYNC	0x0060
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_TESTLOOP	0x0070
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_RESET	0x00F0
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_INIT	0x00F2
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_RELEASE	0x00F3
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_TEST	0x00F4
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_AUX_IND	0x00F5
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_ACTIVATE	0x0100
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_DEACTIVATE	0x0110
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_DATA		0x0120
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_PULL		0x0130
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_TESTLOOP	0x0140
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PH_PAUSE	0x0150
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MPH_ACTIVATE	0x0180
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MPH_DEACTIVATE	0x0190
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MPH_INFORMATION	0x01A0
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DL_ESTABLISH	0x0200
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DL_RELEASE	0x0210
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DL_DATA		0x0220
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DL_FLUSH	0x0224
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DL_UNIT_DATA	0x0230
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_BC_RELEASE  0x0278  // Formula-n enter:now
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_BC_ASSIGN   0x027C  // Formula-n enter:now
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_ASSIGN	0x0280
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_REMOVE	0x0284
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_ERROR	0x0288
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_INFO_SETUP	0x02E0
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_INFO_CONN	0x02E4
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDL_INFO_REL	0x02E8
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_SETUP	0x0300
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_RESUME	0x0304
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_MORE_INFO	0x0310
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_IGNORE	0x0320
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_REJECT	0x0324
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_SETUP_COMPL	0x0330
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_PROCEEDING	0x0340
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_ALERTING	0x0344
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_PROGRESS	0x0348
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_CONNECT	0x0350
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_CHARGE	0x0354
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_NOTIFY	0x0358
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_DISCONNECT	0x0360
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_RELEASE	0x0368
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_SUSPEND	0x0370
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_PROCEED_SEND 0x0374
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_REDIR        0x0378
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T302		0x0382
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T303		0x0383
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T304		0x0384
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T305		0x0385
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T308_1	0x0388
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T308_2	0x038A
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T309         0x0309
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T310		0x0390
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T313		0x0393
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T318		0x0398
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_T319		0x0399
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_TSPID	0x03A0
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_NOSETUP_RSP	0x03E0
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_SETUP_ERR	0x03E1
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_SUSPEND_ERR	0x03E2
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_RESUME_ERR	0x03E3
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_CONNECT_ERR	0x03E4
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_RELEASE_ERR	0x03E5
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_RESTART	0x03F4
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_TDSS1_IO     0x13F4    /* DSS1 IO user timer */
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CC_TNI1_IO      0x13F5    /* NI1 IO user timer */
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* define maximum number of possible waiting incoming calls */
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_WAITING_CALLS 2
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
125e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *CardType[];
126e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern int nrcards;
127e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Eder
128e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *l1_revision;
129e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *l2_revision;
130e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *l3_revision;
131e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *lli_revision;
132e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Ederextern const char *tei_revision;
133e86a6a1b7849217bb3b1ef725c7fee86ed6dae33Hannes Eder
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* include l3dss1 & ni1 specific process structures, but no other defines */
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_EURO
136475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define l3dss1_process
137475be4d85a274d0961593db41cf85689db1d583cJoe Perches#include "l3dss1.h"
138475be4d85a274d0961593db41cf85689db1d583cJoe Perches#undef  l3dss1_process
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_HISAX_EURO */
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_NI1
142475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define l3ni1_process
143475be4d85a274d0961593db41cf85689db1d583cJoe Perches#include "l3ni1.h"
144475be4d85a274d0961593db41cf85689db1d583cJoe Perches#undef  l3ni1_process
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_HISAX_NI1 */
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_DFRAME_LEN	260
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_DFRAME_LEN_L1	300
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HSCX_BUFMAX	4096
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_DATA_SIZE	(HSCX_BUFMAX - 4)
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_DATA_MEM	(HSCX_BUFMAX + 64)
152475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define RAW_BUFMAX	(((HSCX_BUFMAX * 6) / 5) + 5)
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_HEADER_LEN	4
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_WINDOW	8
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_MON_FRAME	32
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_DLOG_SPACE	2048
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_BLOG_SPACE	256
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* #define I4L_IRQ_FLAG SA_INTERRUPT */
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I4L_IRQ_FLAG    0
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Statemachine
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FsmInst;
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
168475be4d85a274d0961593db41cf85689db1d583cJoe Perchestypedef void (*FSMFNPTR)(struct FsmInst *, int, void *);
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Fsm {
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	FSMFNPTR *jumpmatrix;
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state_count, event_count;
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char **strEvent, **strState;
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FsmInst {
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Fsm *fsm;
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state;
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int debug;
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *userdata;
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int userint;
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*printdebug) (struct FsmInst *, char *, ...);
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FsmNode {
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state, event;
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*routine) (struct FsmInst *, int, void *);
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FsmTimer {
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst *fi;
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list tl;
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int event;
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *arg;
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct L3Timer {
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct l3_process *pc;
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list tl;
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int event;
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_ACTIVATING	1
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_ACTIVATED	2
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_DEACTTIMER	3
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_ACTTIMER		4
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_T3RUN		5
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_PULL_REQ		6
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_UINT		7
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Layer1 {
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *hardware;
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct BCState *bcs;
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack **stlistp;
21564b33619a30ff18c1535ee779572ecffcc4711d2Al Viro	unsigned long Flags;
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst l1m;
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmTimer	timer;
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l1l2) (struct PStack *, int, void *);
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l1hw) (struct PStack *, int, void *);
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l1tei) (struct PStack *, int, void *);
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mode, bc;
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int delay;
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define GROUP_TEI	127
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEI_SAPI	63
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_SAPI	0
228ddca2488a2a69421924485bbcec39b512b580d0eKarsten Keil#define PACKET_NOACK	7
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Layer2 Flags */
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_LAPB	0
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_LAPD	1
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_ORIG	2
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_MOD128	3
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_PEND_REL	4
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L3_INIT	5
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_T200_RUN	6
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_ACK_PEND	7
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_REJEXC	8
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_OWN_BUSY	9
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_PEER_BUSY	10
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_DCHAN_BUSY	11
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_ACTIV	12
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_ESTAB_PEND	13
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_PTP		14
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_FIXED_TEI	15
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L2BLOCK	16
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Layer2 {
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int tei;
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int sap;
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int maxlen;
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long flag;
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t lock;
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int vs, va, vr;
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rc;
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int window;
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int sow;
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *windowar[MAX_WINDOW];
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head i_queue;
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head ui_queue;
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l2l1) (struct PStack *, int, void *);
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l2l3) (struct PStack *, int, void *);
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l2tei) (struct PStack *, int, void *);
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst l2m;
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmTimer t200, t203;
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int T200, N200, T203;
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int debug;
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char debug_id[16];
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Layer3 {
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l3l4) (struct PStack *, int, void *);
275475be4d85a274d0961593db41cf85689db1d583cJoe Perches	void (*l3ml3) (struct PStack *, int, void *);
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l3l2) (struct PStack *, int, void *);
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst l3m;
278475be4d85a274d0961593db41cf85689db1d583cJoe Perches	struct FsmTimer l3m_timer;
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head squeue;
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct l3_process *proc;
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct l3_process *global;
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int N303;
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int debug;
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char debug_id[8];
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct LLInterface {
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*l4l3) (struct PStack *, int, void *);
289475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int  (*l4l3_proto) (struct PStack *, isdn_ctrl *);
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *userdata;
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long flag;
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	FLG_LLI_L1WAKEUP	1
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	FLG_LLI_L2WAKEUP	2
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Management {
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int	ri;
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst tei_m;
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmTimer t202;
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int T202, N202, debug;
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*layer) (struct PStack *, int, void *);
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_CAUSE 254
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Param {
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char cause;
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char loc;
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char diag[6];
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int bchannel;
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int chargeinfo;
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int spv;		/* SPV Flag */
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	setup_parm setup;	/* from isdnif.h numbers and Serviceindicator */
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char moderate;	/* transfer mode and rate (bearer octet 4) */
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct PStack {
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack *next;
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Layer1 l1;
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Layer2 l2;
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Layer3 l3;
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct LLInterface lli;
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Management ma;
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int protocol;		/* EDSS1, 1TR6 or NI1 */
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
328475be4d85a274d0961593db41cf85689db1d583cJoe Perches	/* protocol specific data fields */
329475be4d85a274d0961593db41cf85689db1d583cJoe Perches	union
330475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{ u_char uuuu; /* only as dummy */
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_EURO
332475be4d85a274d0961593db41cf85689db1d583cJoe Perches		dss1_stk_priv dss1; /* private dss1 data */
333475be4d85a274d0961593db41cf85689db1d583cJoe Perches#endif /* CONFIG_HISAX_EURO */
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_NI1
335475be4d85a274d0961593db41cf85689db1d583cJoe Perches		ni1_stk_priv ni1; /* private ni1 data */
336475be4d85a274d0961593db41cf85689db1d583cJoe Perches#endif /* CONFIG_HISAX_NI1 */
337475be4d85a274d0961593db41cf85689db1d583cJoe Perches	} prot;
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct l3_process {
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int callref;
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state;
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct L3Timer timer;
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int N303;
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int debug;
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Param para;
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Channel *chan;
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack *st;
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct l3_process *next;
350475be4d85a274d0961593db41cf85689db1d583cJoe Perches	ulong redir_result;
351475be4d85a274d0961593db41cf85689db1d583cJoe Perches
352475be4d85a274d0961593db41cf85689db1d583cJoe Perches	/* protocol specific data fields */
353475be4d85a274d0961593db41cf85689db1d583cJoe Perches	union
354475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{ u_char uuuu; /* only when euro not defined, avoiding empty union */
355475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_EURO
356475be4d85a274d0961593db41cf85689db1d583cJoe Perches		dss1_proc_priv dss1; /* private dss1 data */
357475be4d85a274d0961593db41cf85689db1d583cJoe Perches#endif /* CONFIG_HISAX_EURO */
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_NI1
359475be4d85a274d0961593db41cf85689db1d583cJoe Perches		ni1_proc_priv ni1; /* private ni1 data */
360475be4d85a274d0961593db41cf85689db1d583cJoe Perches#endif /* CONFIG_HISAX_NI1 */
361475be4d85a274d0961593db41cf85689db1d583cJoe Perches	} prot;
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hscx_hw {
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int hscx;
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rcvidx;
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int count;              /* Current skb sent count */
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;         /* B-Channel receive Buffer */
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char tsaxr0;
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char tsaxr1;
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct w6692B_hw {
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int bchan;
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rcvidx;
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int count;              /* Current skb sent count */
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;         /* B-Channel receive Buffer */
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct isar_reg {
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long Flags;
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile u_char bstat;
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile u_char iis;
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile u_char cmsb;
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile u_char clsb;
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile u_char par[8];
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct isar_hw {
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int dpath;
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rcvidx;
3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int txcnt;
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mml;
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char state;
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char cmd;
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char mod;
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char newcmd;
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char newmod;
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char try_mod;
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list ftimer;
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;         /* B-Channel receive Buffer */
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char conmsg[16];
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct isar_reg *reg;
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hdlc_stat_reg {
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __BIG_ENDIAN
4086a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char fill;
4096a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char mode;
4106a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char xml;
4116a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char cmd;
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
4136a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char cmd;
4146a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char xml;
4156a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char mode;
4166a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck	u_char fill;
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
4186a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck} __attribute__((packed));
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hdlc_hw {
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		u_int ctrl;
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hdlc_stat_reg sr;
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} ctrl;
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int stat;
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rcvidx;
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int count;              /* Current skb sent count */
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;         /* B-Channel receive Buffer */
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcB_hw {
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int *send;
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int f1;
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int f2;
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct tiger_hw {
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int *send;
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int *s_irq;
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int *s_end;
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int *sendp;
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int *rec;
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int free;
4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *sendbuf;
4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *sp;
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int sendcnt;
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int s_tot;
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int r_bitcnt;
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int r_tot;
4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int r_err;
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int r_fcs;
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char r_state;
4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char r_one;
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char r_val;
4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char s_state;
4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct amd7930_hw {
4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *tx_buff;
4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rv_buff;
4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rv_buff_in;
4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rv_buff_out;
4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *rv_skb;
4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct hdlc_state *hdlc_state;
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct work_struct tq_rcv;
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct work_struct tq_xmt;
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_INIT	1
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_ACTIV	2
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_BUSY	3
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_NOFRAME	4
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_HALF	5
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_EMPTY	6
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_ORIG	7
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_DLEETX	8
4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_LASTDLE	9
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_FIRST	10
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_LASTDATA	11
4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_NMD_DATA	12
4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_FTI_RUN	13
4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_LL_OK	14
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_LL_CONN	15
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_FTI_FTS	16
4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BC_FLG_FRH_WAIT	17
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_NULL	0
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_TRANS	1
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_HDLC	2
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_EXTRN	3
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_HDLC_56K 4
4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_MODEM	7
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_V32	8
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_MODE_FAX	9
4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct BCState {
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int channel;
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mode;
5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long Flag;
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct IsdnCardState *cs;
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int tx_cnt;		/* B-Channel transmit counter */
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff *tx_skb; /* B-Channel transmit Buffer */
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head rqueue;	/* B-Channel receive Queue */
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head squeue;	/* B-Channel send Queue */
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ackcnt;
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t aclock;
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack *st;
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *blog;
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *conmsg;
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list transbusy;
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct work_struct tqueue;
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long event;
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int  (*BC_SetStack) (struct PStack *, struct BCState *);
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*BC_Close) (struct BCState *);
5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ERROR_STATISTIC
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int err_crc;
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int err_tx;
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int err_rdo;
5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int err_inv;
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hscx_hw hscx;
5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hdlc_hw hdlc;
5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct isar_hw isar;
5261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcB_hw hfc;
5271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct tiger_hw tiger;
5281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct amd7930_hw  amd7930;
5291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct w6692B_hw w6692;
5301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hisax_b_if *b_if;
5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} hw;
5321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct Channel {
5351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack *b_st, *d_st;
5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct IsdnCardState *cs;
5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct BCState *bcs;
5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int chan;
5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int incoming;
5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmInst fi;
5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct FsmTimer drel_timer, dial_timer;
5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int debug;
5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int l2_protocol, l2_active_protocol;
5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int l3_protocol;
5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int data_open;
5461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct l3_process *proc;
5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	setup_parm setup;	/* from isdnif.h numbers and Serviceindicator */
5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long Flags;		/* for remembering action done in l4 */
5491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int leased;
5501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct elsa_hw {
5531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
5541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long base;
5551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg;
5561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int ctrl;
5571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int ale;
5581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
5591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int itac;
5601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
5611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int trig;
5621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int timer;
5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int counter;
5641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int status;
5651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list tl;
5661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int MFlag;
5671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct BCState *bcs;
5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *transbuf;
5691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *rcvbuf;
5701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int transp;
5711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int rcvp;
5721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int transcnt;
5731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int rcvcnt;
5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char IER;
5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char FCR;
5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char LCR;
5771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char MCR;
5781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char ctrl_reg;
5791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct teles3_hw {
5821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
5831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int isac;
5841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int hscx[2];
5851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int isacfifo;
5861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int hscxfifo[2];
5871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct teles0_hw {
5901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
5911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *membase;
5921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long phymem;
5931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct avm_hw {
5961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx[2];
5991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isacfifo;
6001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscxfifo[2];
6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int counter;
6021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
6031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ix1_hw {
6061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac_ale;
6081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx_ale;
6101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
6111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct diva_hw {
6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long cfg_reg;
6151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long pci_cfg;
6161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int ctrl;
6171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long isac_adr;
6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long hscx_adr;
6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int status;
6221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list tl;
6231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char ctrl_reg;
6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct asus_hw {
6281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
6291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int adr;
6301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
6321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int u7;
6331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int pots;
6341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfc_hw {
6381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int addr;
6391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int fifosize;
6401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cirm;
6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char ctmt;
6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cip;
6431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char isac_spcr;
6441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
645475be4d85a274d0961593db41cf85689db1d583cJoe Perches};
6461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct sedl_hw {
6481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
6491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int adr;
6501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
6521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int reset_on;
6531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int reset_off;
6541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct isar_reg isar;
6551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int chip;
6561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int bus;
6571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
6581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct spt_hw {
6611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
6621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx[2];
6641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char res_irq;
6651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mic_hw {
6681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
6691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int adr;
6701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
6721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct njet_hw {
6751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long base;
6761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
6771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int auxa;
6781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char auxd;
6791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char dmactrl;
6801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char ctrl_reg;
6811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char irqmask0;
6821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char irqstat0;
6831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char last_is0;
6841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
6851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcPCI_hw {
6881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cirm;
6891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char ctmt;
6901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char conn;
6911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char mst_m;
6921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m1;
6931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m2;
6941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_s1;
6951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char sctrl;
696475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char sctrl_r;
697475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char sctrl_e;
698475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char trm;
6991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char stat;
7001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char fifo;
701475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char fifo_en;
702475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char bswapped;
703475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char nt_mode;
704475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int nt_timer;
705475be4d85a274d0961593db41cf85689db1d583cJoe Perches	struct pci_dev *dev;
706475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char *pci_io; /* start of PCI IO memory */
7078a745b9d91962991ce87a649a4dc3af3206c2c8bKarsten Keil	dma_addr_t dma; /* dma handle for Fifos */
708475be4d85a274d0961593db41cf85689db1d583cJoe Perches	void *fifos; /* FIFO memory */
709475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
7101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
7111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcSX_hw {
714475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned long base;
7151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cirm;
7161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char ctmt;
7171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char conn;
7181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char mst_m;
7191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m1;
7201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m2;
7211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_s1;
7221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char sctrl;
723475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char sctrl_r;
724475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char sctrl_e;
725475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char trm;
7261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char stat;
7271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char fifo;
728475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char bswapped;
729475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char nt_mode;
730475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char chip;
731475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int b_fifo_size;
732475be4d85a274d0961593db41cf85689db1d583cJoe Perches	unsigned char last_fifo;
733475be4d85a274d0961593db41cf85689db1d583cJoe Perches	void *extra;
734475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int nt_timer;
7351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
7361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcD_hw {
7391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int addr;
7401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int bfifosize;
7411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int dfifosize;
7421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cirm;
7431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char ctmt;
7441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char cip;
7451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char conn;
7461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char mst_m;
7471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m1;
7481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_m2;
7491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char int_s1;
7501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char sctrl;
7511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char stat;
7521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char fifo;
7531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char f1;
7541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char f2;
7551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int *send;
7561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
7571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct isurf_hw {
7601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int reset;
7611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long phymem;
7621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *isac;
7631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void __iomem *isar;
7641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct isar_reg isar_r;
7651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct saphir_hw {
7681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
7691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
7701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int ale;
7711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac;
7721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int hscx;
7731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
7741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct bkm_hw {
7771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
7781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long base;
7791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* A4T stuff */
7801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long isac_adr;
7811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int isac_ale;
7821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long jade_adr;
7831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int jade_ale;
7841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Scitel Quadro stuff */
7851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long plx_adr;
7861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long data_adr;
787475be4d85a274d0961593db41cf85689db1d583cJoe Perches};
7881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct gazel_hw {
7901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
7911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int cfg_reg;
7921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int pciaddr[2];
793475be4d85a274d0961593db41cf85689db1d583cJoe Perches	signed   int ipac;
7941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int isac;
7951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int hscx[2];
7961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int isacfifo;
7971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed   int hscxfifo[2];
7981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char timeslot;
7991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char iom2;
8001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct w6692_hw {
8031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev;
8041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int iobase;
8051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer;
8061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct arcofi_msg {
8091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct arcofi_msg *next;
8101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char receive;
8111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char len;
8121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char msg[10];
8131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct isac_chip {
8161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *mon_tx;
8181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *mon_rx;
8191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_txp;
8201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_txc;
8211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_rxp;
8221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct arcofi_msg *arcofi_list;
8231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list arcofitimer;
8241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t arcofi_wait;
8251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char arcofi_bc;
8261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char arcofi_state;
8271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char mocr;
8281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char adf2;
8291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcd_chip {
8321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcpci_chip {
8361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfcsx_chip {
8401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct w6692_chip {
8441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct amd7930_chip {
8481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char lmr1;
8491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char ph_state;
8501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char old_state;
8511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char flg_t3;
8521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int tx_xmtlen;
8531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list timer3;
8541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*ph_command) (struct IsdnCardState *, u_char, char *);
8551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void (*setIrqMask) (struct IsdnCardState *, u_char);
8561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct icc_chip {
8591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ph_state;
8601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *mon_tx;
8611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char *mon_rx;
8621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_txp;
8631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_txc;
8641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mon_rxp;
8651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct arcofi_msg *arcofi_list;
8661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list arcofitimer;
8671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	wait_queue_head_t arcofi_wait;
8681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char arcofi_bc;
8691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char arcofi_state;
8701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char mocr;
8711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char adf2;
8721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_IOM1			0
8751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_IPAC			1
8761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_ISAR			2
8771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_ARCOFI		3
8781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_TWO_DCHAN		4
8791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_L1_DBUSY		5
880475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define FLG_DBUSY_TIMER		6
881475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define FLG_LOCK_ATOMIC		7
8821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_ARCOFI_TIMER	8
8831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_ARCOFI_ERROR	9
8841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLG_HW_L1_UINT		10
8851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct IsdnCardState {
8871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t	lock;
8881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		typ;
8891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		subtyp;
8901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		protocol;
8911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_int		irq;
8921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long		irq_flags;
8931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long		HW_Flags;
8941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		*busy_flag;
895475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int		chanlimit; /* limited number of B-chans to use */
896475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int		logecho; /* log echo if supported by card */
8971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
8981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct elsa_hw elsa;
8991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct teles0_hw teles0;
9001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct teles3_hw teles3;
9011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct avm_hw avm;
9021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct ix1_hw ix1;
9031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct diva_hw diva;
9041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct asus_hw asus;
9051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfc_hw hfc;
9061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct sedl_hw sedl;
9071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct spt_hw spt;
9081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct mic_hw mic;
9091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct njet_hw njet;
9101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcD_hw hfcD;
9111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcPCI_hw hfcpci;
9121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcSX_hw hfcsx;
9131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct ix1_hw niccy;
9141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct isurf_hw isurf;
9151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct saphir_hw saphir;
9161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct bkm_hw ax;
9171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct gazel_hw gazel;
9181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct w6692_hw w6692;
9191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hisax_d_if *hisax_d_if;
9201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} hw;
9211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		myid;
9221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	isdn_if		iif;
9231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t	statlock;
9241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		*status_buf;
9251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		*status_read;
9261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		*status_write;
9271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		*status_end;
9281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		(*readisac) (struct IsdnCardState *, u_char);
9291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*writeisac) (struct IsdnCardState *, u_char, u_char);
9301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*readisacfifo) (struct IsdnCardState *, u_char *, int);
9311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*writeisacfifo) (struct IsdnCardState *, u_char *, int);
9321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		(*BC_Read_Reg) (struct IsdnCardState *, int, u_char);
9331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char);
9341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*BC_Send_Data) (struct BCState *);
9351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		(*cardmsg) (struct IsdnCardState *, int, void *);
9361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*setstack_d) (struct PStack *, struct IsdnCardState *);
9371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		(*DC_Close) (struct IsdnCardState *);
938896c6fa1e59dd17e1ac2877c25cab19bbb24e666Jeff Garzik	irq_handler_t	irq_func;
9391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		(*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
940475be4d85a274d0961593db41cf85689db1d583cJoe Perches	struct Channel	channel[2 + MAX_WAITING_CALLS];
941475be4d85a274d0961593db41cf85689db1d583cJoe Perches	struct BCState	bcs[2 + MAX_WAITING_CALLS];
9421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct PStack	*stlist;
9431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff_head rq, sq; /* D-channel queues */
9441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		cardnr;
9451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char		*dlog;
9461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		debug;
9471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
9481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct isac_chip isac;
9491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcd_chip hfcd;
9501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcpci_chip hfcpci;
9511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct hfcsx_chip hfcsx;
9521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct w6692_chip w6692;
9531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct amd7930_chip amd7930;
9541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct icc_chip icc;
9551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} dc;
9561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_char		*rcvbuf;
9571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		rcvidx;
9581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct sk_buff	*tx_skb;
9591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		tx_cnt;
9601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long		event;
9611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct work_struct tqueue;
9621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct timer_list dbusytimer;
96340f08a724fcc21285cf3a75aec957aef908605c6Thomas Gleixner	unsigned int	irq_cnt;
9641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ERROR_STATISTIC
9651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		err_crc;
9661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		err_tx;
9671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		err_rx;
9681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
9691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
9701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
972475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define schedule_event(s, ev)	do { test_and_set_bit(ev, &s->event); schedule_work(&s->tqueue); } while (0)
9731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  MON0_RX	1
9751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  MON1_RX	2
9761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  MON0_TX	4
9771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  MON1_TX	8
9781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ISDN_CHIP_ISAC
9811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ISDN_CHIP_ISAC
9821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
9831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_16_0
9851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELES0 1
9861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
9871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
9881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
9891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
9901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELES0  0
9911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
9921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_16_3
9941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELES3 1
9951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
9961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
9971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
9981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
9991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELES3  0
10001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_TELESPCI
10031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELESPCI 1
10041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_TELESPCI  0
10091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_AVM_A1
10121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_AVM_A1 1
10131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_AVM_A1  0
10181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_AVM_A1_PCMCIA
10211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_AVM_A1_PCMCIA 1
10221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_AVM_A1_PCMCIA  0
10271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_FRITZPCI
10301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_FRITZPCI 1
10311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_FRITZPCI  0
10361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_ELSA
10391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_ELSA 1
10401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_ELSA  0
10451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_IX1MICROR2
10481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_IX1MICROR2 1
10491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_IX1MICROR2 0
10541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1056475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_DIEHLDIVA
10571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_DIEHLDIVA 1
10581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_DIEHLDIVA 0
10631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1065475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_ASUSCOM
10661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_ASUSCOM 1
10671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_ASUSCOM 0
10721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1074475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_TELEINT
10751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_TELEINT 1
10761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_TELEINT 0
10811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1083475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_SEDLBAUER
10841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_SEDLBAUER 1
10851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_SEDLBAUER 0
10901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1092475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_SPORTSTER
10931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_SPORTSTER 1
10941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
10951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
10961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
10981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_SPORTSTER 0
10991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1101475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_MIC
11021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_MIC 1
11031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_MIC 0
11081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1110475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_NETJET
11111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_NETJET_S 1
11121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_NETJET_S 0
11171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_HFCS
11201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFCS 1
11211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFCS 0
11231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_HFC_PCI
11261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFC_PCI 1
11271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFC_PCI 0
11291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_HFC_SX
11321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFC_SX 1
11331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_HFC_SX 0
11351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_NICCY
11381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_NICCY 1
11391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_NICCY 0
11441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_ISURF
11471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_ISURF 1
11481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_ISURF 0
11531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_S0BOX
11561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_S0BOX 1
11571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_S0BOX 0
11621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_HSTSAPHIR
11651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_HSTSAPHIR 1
11661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_HSTSAPHIR 0
11711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_BKM_A4T
11741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_BKM_A4T 1
11751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_BKM_A4T 0
11801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_SCT_QUADRO
11831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_SCT_QUADRO 1
11841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_SCT_QUADRO 0
11891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_GAZEL
11921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_GAZEL 1
11931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ISAC
11941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ISAC 1
11951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
11971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define  CARD_GAZEL  0
11981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
11991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	CONFIG_HISAX_W6692
12011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_W6692	1
12021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef	ISDN_CHIP_W6692
12031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	ISDN_CHIP_W6692	1
12041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
12061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CARD_W6692	0
12071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1209475be4d85a274d0961593db41cf85689db1d583cJoe Perches#ifdef CONFIG_HISAX_NETJET_U
12101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_NETJET_U 1
12111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ISDN_CHIP_ICC
12121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISDN_CHIP_ICC 1
12131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef HISAX_UINTERFACE
12151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HISAX_UINTERFACE 1
12161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
12181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_NETJET_U 0
12191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_HISAX_ENTERNOW_PCI
12221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARD_FN_ENTERNOW_PCI 1
1223f718404aa939d2ae19efda8e71f7fa79cbdf1646Al Viro#else
1224f718404aa939d2ae19efda8e71f7fa79cbdf1646Al Viro#define CARD_FN_ENTERNOW_PCI 0
12251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEI_PER_CARD 1
12281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* L1 Debug */
12301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_WARN		0x01
12311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_INTSTAT		0x02
12321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_ISAC		0x04
12331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_ISAC_FIFO	0x08
12341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_HSCX		0x10
12351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_HSCX_FIFO	0x20
12361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_LAPD	        0x40
12371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_IPAC	        0x80
12381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	L1_DEB_RECEIVE_FRAME    0x100
12391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L1_DEB_MONITOR		0x200
12401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEB_DLOG_HEX		0x400
12411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEB_DLOG_VERBOSE	0x800
12421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2FRAME_DEBUG
12441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef L2FRAME_DEBUG
12461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void Logl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir);
12471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
12481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "hisax_cfg.h"
12501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid init_bcstate(struct IsdnCardState *cs, int bc);
12521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_HiSax(struct PStack *st, struct IsdnCardState *cs);
12541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid HiSax_addlist(struct IsdnCardState *sp, struct PStack *st);
12551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st);
12561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_l1_B(struct PStack *st);
12581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_tei(struct PStack *st);
12601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_manager(struct PStack *st);
12611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_isdnl2(struct PStack *st, char *debug_id);
12631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid releasestack_isdnl2(struct PStack *st);
12641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_transl2(struct PStack *st);
12651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid releasestack_transl2(struct PStack *st);
12661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid lli_writewakeup(struct PStack *st, int len);
12671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_l3dc(struct PStack *st, struct Channel *chanp);
12691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid setstack_l3bc(struct PStack *st, struct Channel *chanp);
12701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid releasestack_isdnl3(struct PStack *st);
12711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1272475be4d85a274d0961593db41cf85689db1d583cJoe Perchesu_char *findie(u_char *p, int size, u_char ie, int wanted_set);
1273475be4d85a274d0961593db41cf85689db1d583cJoe Perchesint getcallref(u_char *p);
12741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint newcallref(void);
12751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
12761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
12771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid FsmFree(struct Fsm *fsm);
12781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint FsmEvent(struct FsmInst *fi, int event, void *arg);
12791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid FsmChangeState(struct FsmInst *fi, int newstate);
12801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
12811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
1282475be4d85a274d0961593db41cf85689db1d583cJoe Perches		void *arg, int where);
12831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
1284475be4d85a274d0961593db41cf85689db1d583cJoe Perches		     void *arg, int where);
12851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid FsmDelTimer(struct FsmTimer *ft, int where);
12861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint jiftime(char *s, long mark);
12871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1288475be4d85a274d0961593db41cf85689db1d583cJoe Perchesint HiSax_command(isdn_ctrl *ic);
12891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint HiSax_writebuf_skb(int id, int chan, int ack, struct sk_buff *skb);
1290b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perches__printf(3, 4)
12911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
1292b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perches__printf(3, 0)
12931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args);
12941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid HiSax_reportcard(int cardnr, int sel);
1295475be4d85a274d0961593db41cf85689db1d583cJoe Perchesint QuickHex(char *txt, u_char *p, int cnt);
1296475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid LogFrame(struct IsdnCardState *cs, u_char *p, int size);
12971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir);
1298475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid iecpy(u_char *dest, u_char *iestart, int ieoffset);
12991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif	/* __KERNEL__ */
13001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1301ca8af486765852302931bb69075871d5564e1e5bAndrew Morton/*
1302ca8af486765852302931bb69075871d5564e1e5bAndrew Morton * Busywait delay for `jiffs' jiffies
1303ca8af486765852302931bb69075871d5564e1e5bAndrew Morton */
1304475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define HZDELAY(jiffs) do {				\
1305475be4d85a274d0961593db41cf85689db1d583cJoe Perches		int tout = jiffs;			\
1306475be4d85a274d0961593db41cf85689db1d583cJoe Perches							\
1307475be4d85a274d0961593db41cf85689db1d583cJoe Perches		while (tout--) {			\
1308475be4d85a274d0961593db41cf85689db1d583cJoe Perches			int loops = USEC_PER_SEC / HZ;	\
1309475be4d85a274d0961593db41cf85689db1d583cJoe Perches			while (loops--)			\
1310475be4d85a274d0961593db41cf85689db1d583cJoe Perches				udelay(1);		\
1311475be4d85a274d0961593db41cf85689db1d583cJoe Perches		}					\
1312ca8af486765852302931bb69075871d5564e1e5bAndrew Morton	} while (0)
13131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
13141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint ll_run(struct IsdnCardState *cs, int addfeatures);
13151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint CallcNew(void);
13161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid CallcFree(void);
13171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint CallcNewChan(struct IsdnCardState *cs);
13181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid CallcFreeChan(struct IsdnCardState *cs);
13191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint Isdnl1New(void);
13201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid Isdnl1Free(void);
13211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint Isdnl2New(void);
13221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid Isdnl2Free(void);
13231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint Isdnl3New(void);
13241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid Isdnl3Free(void);
13251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid init_tei(struct IsdnCardState *cs, int protocol);
13261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid release_tei(struct IsdnCardState *cs);
13271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldschar *HiSax_getrev(const char *revision);
13281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint TeiNew(void);
13291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid TeiFree(void);
133041a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt
133141a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt#ifdef CONFIG_PCI
133241a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt
133341a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt#include <linux/pci.h>
133441a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt
133541a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt/* adaptation wrapper for old usage
133641a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt * WARNING! This is unfit for use in a PCI hotplug environment,
133741a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt * as the returned PCI device can disappear at any moment in time.
133841a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt * Callers should be converted to use pci_get_device() instead.
133941a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt */
134041a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidtstatic inline struct pci_dev *hisax_find_pci_device(unsigned int vendor,
134141a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt						    unsigned int device,
134241a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt						    struct pci_dev *from)
134341a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt{
134441a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt	struct pci_dev *pdev;
134541a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt
134641a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt	pci_dev_get(from);
134741a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt	pdev = pci_get_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
134841a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt	pci_dev_put(pdev);
134941a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt	return pdev;
135041a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt}
135141a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt
135241a68a748bbc61f5bcea999e33ba72926dfbe6f7Tilman Schmidt#endif
1353