mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
475be4d85a
isdn source code uses a not-current coding style. Update the coding style used on a per-line basis so that git diff -w shows only elided blank lines at EOF. Done with emacs and some scripts and some typing. Built x86 allyesconfig. No detected change in objdump -d or size. Signed-off-by: Joe Perches <joe@perches.com>
1353 lines
28 KiB
C
1353 lines
28 KiB
C
/* $Id: hisax.h,v 2.64.2.4 2004/02/11 13:21:33 keil Exp $
|
|
*
|
|
* Basic declarations, defines and prototypes
|
|
*
|
|
* This software may be used and distributed according to the terms
|
|
* of the GNU General Public License, incorporated herein by reference.
|
|
*
|
|
*/
|
|
#include <linux/errno.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/major.h>
|
|
#include <asm/io.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/signal.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/mman.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/ioport.h>
|
|
#include <linux/timer.h>
|
|
#include <linux/wait.h>
|
|
#include <linux/isdnif.h>
|
|
#include <linux/tty.h>
|
|
#include <linux/serial_reg.h>
|
|
#include <linux/netdevice.h>
|
|
|
|
#define ERROR_STATISTIC
|
|
|
|
#define REQUEST 0
|
|
#define CONFIRM 1
|
|
#define INDICATION 2
|
|
#define RESPONSE 3
|
|
|
|
#define HW_ENABLE 0x0000
|
|
#define HW_RESET 0x0004
|
|
#define HW_POWERUP 0x0008
|
|
#define HW_ACTIVATE 0x0010
|
|
#define HW_DEACTIVATE 0x0018
|
|
|
|
#define HW_INFO1 0x0010
|
|
#define HW_INFO2 0x0020
|
|
#define HW_INFO3 0x0030
|
|
#define HW_INFO4 0x0040
|
|
#define HW_INFO4_P8 0x0040
|
|
#define HW_INFO4_P10 0x0048
|
|
#define HW_RSYNC 0x0060
|
|
#define HW_TESTLOOP 0x0070
|
|
#define CARD_RESET 0x00F0
|
|
#define CARD_INIT 0x00F2
|
|
#define CARD_RELEASE 0x00F3
|
|
#define CARD_TEST 0x00F4
|
|
#define CARD_AUX_IND 0x00F5
|
|
|
|
#define PH_ACTIVATE 0x0100
|
|
#define PH_DEACTIVATE 0x0110
|
|
#define PH_DATA 0x0120
|
|
#define PH_PULL 0x0130
|
|
#define PH_TESTLOOP 0x0140
|
|
#define PH_PAUSE 0x0150
|
|
#define MPH_ACTIVATE 0x0180
|
|
#define MPH_DEACTIVATE 0x0190
|
|
#define MPH_INFORMATION 0x01A0
|
|
|
|
#define DL_ESTABLISH 0x0200
|
|
#define DL_RELEASE 0x0210
|
|
#define DL_DATA 0x0220
|
|
#define DL_FLUSH 0x0224
|
|
#define DL_UNIT_DATA 0x0230
|
|
|
|
#define MDL_BC_RELEASE 0x0278 // Formula-n enter:now
|
|
#define MDL_BC_ASSIGN 0x027C // Formula-n enter:now
|
|
#define MDL_ASSIGN 0x0280
|
|
#define MDL_REMOVE 0x0284
|
|
#define MDL_ERROR 0x0288
|
|
#define MDL_INFO_SETUP 0x02E0
|
|
#define MDL_INFO_CONN 0x02E4
|
|
#define MDL_INFO_REL 0x02E8
|
|
|
|
#define CC_SETUP 0x0300
|
|
#define CC_RESUME 0x0304
|
|
#define CC_MORE_INFO 0x0310
|
|
#define CC_IGNORE 0x0320
|
|
#define CC_REJECT 0x0324
|
|
#define CC_SETUP_COMPL 0x0330
|
|
#define CC_PROCEEDING 0x0340
|
|
#define CC_ALERTING 0x0344
|
|
#define CC_PROGRESS 0x0348
|
|
#define CC_CONNECT 0x0350
|
|
#define CC_CHARGE 0x0354
|
|
#define CC_NOTIFY 0x0358
|
|
#define CC_DISCONNECT 0x0360
|
|
#define CC_RELEASE 0x0368
|
|
#define CC_SUSPEND 0x0370
|
|
#define CC_PROCEED_SEND 0x0374
|
|
#define CC_REDIR 0x0378
|
|
#define CC_T302 0x0382
|
|
#define CC_T303 0x0383
|
|
#define CC_T304 0x0384
|
|
#define CC_T305 0x0385
|
|
#define CC_T308_1 0x0388
|
|
#define CC_T308_2 0x038A
|
|
#define CC_T309 0x0309
|
|
#define CC_T310 0x0390
|
|
#define CC_T313 0x0393
|
|
#define CC_T318 0x0398
|
|
#define CC_T319 0x0399
|
|
#define CC_TSPID 0x03A0
|
|
#define CC_NOSETUP_RSP 0x03E0
|
|
#define CC_SETUP_ERR 0x03E1
|
|
#define CC_SUSPEND_ERR 0x03E2
|
|
#define CC_RESUME_ERR 0x03E3
|
|
#define CC_CONNECT_ERR 0x03E4
|
|
#define CC_RELEASE_ERR 0x03E5
|
|
#define CC_RESTART 0x03F4
|
|
#define CC_TDSS1_IO 0x13F4 /* DSS1 IO user timer */
|
|
#define CC_TNI1_IO 0x13F5 /* NI1 IO user timer */
|
|
|
|
/* define maximum number of possible waiting incoming calls */
|
|
#define MAX_WAITING_CALLS 2
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
extern const char *CardType[];
|
|
extern int nrcards;
|
|
|
|
extern const char *l1_revision;
|
|
extern const char *l2_revision;
|
|
extern const char *l3_revision;
|
|
extern const char *lli_revision;
|
|
extern const char *tei_revision;
|
|
|
|
/* include l3dss1 & ni1 specific process structures, but no other defines */
|
|
#ifdef CONFIG_HISAX_EURO
|
|
#define l3dss1_process
|
|
#include "l3dss1.h"
|
|
#undef l3dss1_process
|
|
#endif /* CONFIG_HISAX_EURO */
|
|
|
|
#ifdef CONFIG_HISAX_NI1
|
|
#define l3ni1_process
|
|
#include "l3ni1.h"
|
|
#undef l3ni1_process
|
|
#endif /* CONFIG_HISAX_NI1 */
|
|
|
|
#define MAX_DFRAME_LEN 260
|
|
#define MAX_DFRAME_LEN_L1 300
|
|
#define HSCX_BUFMAX 4096
|
|
#define MAX_DATA_SIZE (HSCX_BUFMAX - 4)
|
|
#define MAX_DATA_MEM (HSCX_BUFMAX + 64)
|
|
#define RAW_BUFMAX (((HSCX_BUFMAX * 6) / 5) + 5)
|
|
#define MAX_HEADER_LEN 4
|
|
#define MAX_WINDOW 8
|
|
#define MAX_MON_FRAME 32
|
|
#define MAX_DLOG_SPACE 2048
|
|
#define MAX_BLOG_SPACE 256
|
|
|
|
/* #define I4L_IRQ_FLAG SA_INTERRUPT */
|
|
#define I4L_IRQ_FLAG 0
|
|
|
|
/*
|
|
* Statemachine
|
|
*/
|
|
|
|
struct FsmInst;
|
|
|
|
typedef void (*FSMFNPTR)(struct FsmInst *, int, void *);
|
|
|
|
struct Fsm {
|
|
FSMFNPTR *jumpmatrix;
|
|
int state_count, event_count;
|
|
char **strEvent, **strState;
|
|
};
|
|
|
|
struct FsmInst {
|
|
struct Fsm *fsm;
|
|
int state;
|
|
int debug;
|
|
void *userdata;
|
|
int userint;
|
|
void (*printdebug) (struct FsmInst *, char *, ...);
|
|
};
|
|
|
|
struct FsmNode {
|
|
int state, event;
|
|
void (*routine) (struct FsmInst *, int, void *);
|
|
};
|
|
|
|
struct FsmTimer {
|
|
struct FsmInst *fi;
|
|
struct timer_list tl;
|
|
int event;
|
|
void *arg;
|
|
};
|
|
|
|
struct L3Timer {
|
|
struct l3_process *pc;
|
|
struct timer_list tl;
|
|
int event;
|
|
};
|
|
|
|
#define FLG_L1_ACTIVATING 1
|
|
#define FLG_L1_ACTIVATED 2
|
|
#define FLG_L1_DEACTTIMER 3
|
|
#define FLG_L1_ACTTIMER 4
|
|
#define FLG_L1_T3RUN 5
|
|
#define FLG_L1_PULL_REQ 6
|
|
#define FLG_L1_UINT 7
|
|
|
|
struct Layer1 {
|
|
void *hardware;
|
|
struct BCState *bcs;
|
|
struct PStack **stlistp;
|
|
unsigned long Flags;
|
|
struct FsmInst l1m;
|
|
struct FsmTimer timer;
|
|
void (*l1l2) (struct PStack *, int, void *);
|
|
void (*l1hw) (struct PStack *, int, void *);
|
|
void (*l1tei) (struct PStack *, int, void *);
|
|
int mode, bc;
|
|
int delay;
|
|
};
|
|
|
|
#define GROUP_TEI 127
|
|
#define TEI_SAPI 63
|
|
#define CTRL_SAPI 0
|
|
#define PACKET_NOACK 7
|
|
|
|
/* Layer2 Flags */
|
|
|
|
#define FLG_LAPB 0
|
|
#define FLG_LAPD 1
|
|
#define FLG_ORIG 2
|
|
#define FLG_MOD128 3
|
|
#define FLG_PEND_REL 4
|
|
#define FLG_L3_INIT 5
|
|
#define FLG_T200_RUN 6
|
|
#define FLG_ACK_PEND 7
|
|
#define FLG_REJEXC 8
|
|
#define FLG_OWN_BUSY 9
|
|
#define FLG_PEER_BUSY 10
|
|
#define FLG_DCHAN_BUSY 11
|
|
#define FLG_L1_ACTIV 12
|
|
#define FLG_ESTAB_PEND 13
|
|
#define FLG_PTP 14
|
|
#define FLG_FIXED_TEI 15
|
|
#define FLG_L2BLOCK 16
|
|
|
|
struct Layer2 {
|
|
int tei;
|
|
int sap;
|
|
int maxlen;
|
|
u_long flag;
|
|
spinlock_t lock;
|
|
u_int vs, va, vr;
|
|
int rc;
|
|
unsigned int window;
|
|
unsigned int sow;
|
|
struct sk_buff *windowar[MAX_WINDOW];
|
|
struct sk_buff_head i_queue;
|
|
struct sk_buff_head ui_queue;
|
|
void (*l2l1) (struct PStack *, int, void *);
|
|
void (*l2l3) (struct PStack *, int, void *);
|
|
void (*l2tei) (struct PStack *, int, void *);
|
|
struct FsmInst l2m;
|
|
struct FsmTimer t200, t203;
|
|
int T200, N200, T203;
|
|
int debug;
|
|
char debug_id[16];
|
|
};
|
|
|
|
struct Layer3 {
|
|
void (*l3l4) (struct PStack *, int, void *);
|
|
void (*l3ml3) (struct PStack *, int, void *);
|
|
void (*l3l2) (struct PStack *, int, void *);
|
|
struct FsmInst l3m;
|
|
struct FsmTimer l3m_timer;
|
|
struct sk_buff_head squeue;
|
|
struct l3_process *proc;
|
|
struct l3_process *global;
|
|
int N303;
|
|
int debug;
|
|
char debug_id[8];
|
|
};
|
|
|
|
struct LLInterface {
|
|
void (*l4l3) (struct PStack *, int, void *);
|
|
int (*l4l3_proto) (struct PStack *, isdn_ctrl *);
|
|
void *userdata;
|
|
u_long flag;
|
|
};
|
|
|
|
#define FLG_LLI_L1WAKEUP 1
|
|
#define FLG_LLI_L2WAKEUP 2
|
|
|
|
struct Management {
|
|
int ri;
|
|
struct FsmInst tei_m;
|
|
struct FsmTimer t202;
|
|
int T202, N202, debug;
|
|
void (*layer) (struct PStack *, int, void *);
|
|
};
|
|
|
|
#define NO_CAUSE 254
|
|
|
|
struct Param {
|
|
u_char cause;
|
|
u_char loc;
|
|
u_char diag[6];
|
|
int bchannel;
|
|
int chargeinfo;
|
|
int spv; /* SPV Flag */
|
|
setup_parm setup; /* from isdnif.h numbers and Serviceindicator */
|
|
u_char moderate; /* transfer mode and rate (bearer octet 4) */
|
|
};
|
|
|
|
|
|
struct PStack {
|
|
struct PStack *next;
|
|
struct Layer1 l1;
|
|
struct Layer2 l2;
|
|
struct Layer3 l3;
|
|
struct LLInterface lli;
|
|
struct Management ma;
|
|
int protocol; /* EDSS1, 1TR6 or NI1 */
|
|
|
|
/* protocol specific data fields */
|
|
union
|
|
{ u_char uuuu; /* only as dummy */
|
|
#ifdef CONFIG_HISAX_EURO
|
|
dss1_stk_priv dss1; /* private dss1 data */
|
|
#endif /* CONFIG_HISAX_EURO */
|
|
#ifdef CONFIG_HISAX_NI1
|
|
ni1_stk_priv ni1; /* private ni1 data */
|
|
#endif /* CONFIG_HISAX_NI1 */
|
|
} prot;
|
|
};
|
|
|
|
struct l3_process {
|
|
int callref;
|
|
int state;
|
|
struct L3Timer timer;
|
|
int N303;
|
|
int debug;
|
|
struct Param para;
|
|
struct Channel *chan;
|
|
struct PStack *st;
|
|
struct l3_process *next;
|
|
ulong redir_result;
|
|
|
|
/* protocol specific data fields */
|
|
union
|
|
{ u_char uuuu; /* only when euro not defined, avoiding empty union */
|
|
#ifdef CONFIG_HISAX_EURO
|
|
dss1_proc_priv dss1; /* private dss1 data */
|
|
#endif /* CONFIG_HISAX_EURO */
|
|
#ifdef CONFIG_HISAX_NI1
|
|
ni1_proc_priv ni1; /* private ni1 data */
|
|
#endif /* CONFIG_HISAX_NI1 */
|
|
} prot;
|
|
};
|
|
|
|
struct hscx_hw {
|
|
int hscx;
|
|
int rcvidx;
|
|
int count; /* Current skb sent count */
|
|
u_char *rcvbuf; /* B-Channel receive Buffer */
|
|
u_char tsaxr0;
|
|
u_char tsaxr1;
|
|
};
|
|
|
|
struct w6692B_hw {
|
|
int bchan;
|
|
int rcvidx;
|
|
int count; /* Current skb sent count */
|
|
u_char *rcvbuf; /* B-Channel receive Buffer */
|
|
};
|
|
|
|
struct isar_reg {
|
|
unsigned long Flags;
|
|
volatile u_char bstat;
|
|
volatile u_char iis;
|
|
volatile u_char cmsb;
|
|
volatile u_char clsb;
|
|
volatile u_char par[8];
|
|
};
|
|
|
|
struct isar_hw {
|
|
int dpath;
|
|
int rcvidx;
|
|
int txcnt;
|
|
int mml;
|
|
u_char state;
|
|
u_char cmd;
|
|
u_char mod;
|
|
u_char newcmd;
|
|
u_char newmod;
|
|
char try_mod;
|
|
struct timer_list ftimer;
|
|
u_char *rcvbuf; /* B-Channel receive Buffer */
|
|
u_char conmsg[16];
|
|
struct isar_reg *reg;
|
|
};
|
|
|
|
struct hdlc_stat_reg {
|
|
#ifdef __BIG_ENDIAN
|
|
u_char fill;
|
|
u_char mode;
|
|
u_char xml;
|
|
u_char cmd;
|
|
#else
|
|
u_char cmd;
|
|
u_char xml;
|
|
u_char mode;
|
|
u_char fill;
|
|
#endif
|
|
} __attribute__((packed));
|
|
|
|
struct hdlc_hw {
|
|
union {
|
|
u_int ctrl;
|
|
struct hdlc_stat_reg sr;
|
|
} ctrl;
|
|
u_int stat;
|
|
int rcvidx;
|
|
int count; /* Current skb sent count */
|
|
u_char *rcvbuf; /* B-Channel receive Buffer */
|
|
};
|
|
|
|
struct hfcB_hw {
|
|
unsigned int *send;
|
|
int f1;
|
|
int f2;
|
|
};
|
|
|
|
struct tiger_hw {
|
|
u_int *send;
|
|
u_int *s_irq;
|
|
u_int *s_end;
|
|
u_int *sendp;
|
|
u_int *rec;
|
|
int free;
|
|
u_char *rcvbuf;
|
|
u_char *sendbuf;
|
|
u_char *sp;
|
|
int sendcnt;
|
|
u_int s_tot;
|
|
u_int r_bitcnt;
|
|
u_int r_tot;
|
|
u_int r_err;
|
|
u_int r_fcs;
|
|
u_char r_state;
|
|
u_char r_one;
|
|
u_char r_val;
|
|
u_char s_state;
|
|
};
|
|
|
|
struct amd7930_hw {
|
|
u_char *tx_buff;
|
|
u_char *rv_buff;
|
|
int rv_buff_in;
|
|
int rv_buff_out;
|
|
struct sk_buff *rv_skb;
|
|
struct hdlc_state *hdlc_state;
|
|
struct work_struct tq_rcv;
|
|
struct work_struct tq_xmt;
|
|
};
|
|
|
|
#define BC_FLG_INIT 1
|
|
#define BC_FLG_ACTIV 2
|
|
#define BC_FLG_BUSY 3
|
|
#define BC_FLG_NOFRAME 4
|
|
#define BC_FLG_HALF 5
|
|
#define BC_FLG_EMPTY 6
|
|
#define BC_FLG_ORIG 7
|
|
#define BC_FLG_DLEETX 8
|
|
#define BC_FLG_LASTDLE 9
|
|
#define BC_FLG_FIRST 10
|
|
#define BC_FLG_LASTDATA 11
|
|
#define BC_FLG_NMD_DATA 12
|
|
#define BC_FLG_FTI_RUN 13
|
|
#define BC_FLG_LL_OK 14
|
|
#define BC_FLG_LL_CONN 15
|
|
#define BC_FLG_FTI_FTS 16
|
|
#define BC_FLG_FRH_WAIT 17
|
|
|
|
#define L1_MODE_NULL 0
|
|
#define L1_MODE_TRANS 1
|
|
#define L1_MODE_HDLC 2
|
|
#define L1_MODE_EXTRN 3
|
|
#define L1_MODE_HDLC_56K 4
|
|
#define L1_MODE_MODEM 7
|
|
#define L1_MODE_V32 8
|
|
#define L1_MODE_FAX 9
|
|
|
|
struct BCState {
|
|
int channel;
|
|
int mode;
|
|
u_long Flag;
|
|
struct IsdnCardState *cs;
|
|
int tx_cnt; /* B-Channel transmit counter */
|
|
struct sk_buff *tx_skb; /* B-Channel transmit Buffer */
|
|
struct sk_buff_head rqueue; /* B-Channel receive Queue */
|
|
struct sk_buff_head squeue; /* B-Channel send Queue */
|
|
int ackcnt;
|
|
spinlock_t aclock;
|
|
struct PStack *st;
|
|
u_char *blog;
|
|
u_char *conmsg;
|
|
struct timer_list transbusy;
|
|
struct work_struct tqueue;
|
|
u_long event;
|
|
int (*BC_SetStack) (struct PStack *, struct BCState *);
|
|
void (*BC_Close) (struct BCState *);
|
|
#ifdef ERROR_STATISTIC
|
|
int err_crc;
|
|
int err_tx;
|
|
int err_rdo;
|
|
int err_inv;
|
|
#endif
|
|
union {
|
|
struct hscx_hw hscx;
|
|
struct hdlc_hw hdlc;
|
|
struct isar_hw isar;
|
|
struct hfcB_hw hfc;
|
|
struct tiger_hw tiger;
|
|
struct amd7930_hw amd7930;
|
|
struct w6692B_hw w6692;
|
|
struct hisax_b_if *b_if;
|
|
} hw;
|
|
};
|
|
|
|
struct Channel {
|
|
struct PStack *b_st, *d_st;
|
|
struct IsdnCardState *cs;
|
|
struct BCState *bcs;
|
|
int chan;
|
|
int incoming;
|
|
struct FsmInst fi;
|
|
struct FsmTimer drel_timer, dial_timer;
|
|
int debug;
|
|
int l2_protocol, l2_active_protocol;
|
|
int l3_protocol;
|
|
int data_open;
|
|
struct l3_process *proc;
|
|
setup_parm setup; /* from isdnif.h numbers and Serviceindicator */
|
|
u_long Flags; /* for remembering action done in l4 */
|
|
int leased;
|
|
};
|
|
|
|
struct elsa_hw {
|
|
struct pci_dev *dev;
|
|
unsigned long base;
|
|
unsigned int cfg;
|
|
unsigned int ctrl;
|
|
unsigned int ale;
|
|
unsigned int isac;
|
|
unsigned int itac;
|
|
unsigned int hscx;
|
|
unsigned int trig;
|
|
unsigned int timer;
|
|
unsigned int counter;
|
|
unsigned int status;
|
|
struct timer_list tl;
|
|
unsigned int MFlag;
|
|
struct BCState *bcs;
|
|
u_char *transbuf;
|
|
u_char *rcvbuf;
|
|
unsigned int transp;
|
|
unsigned int rcvp;
|
|
unsigned int transcnt;
|
|
unsigned int rcvcnt;
|
|
u_char IER;
|
|
u_char FCR;
|
|
u_char LCR;
|
|
u_char MCR;
|
|
u_char ctrl_reg;
|
|
};
|
|
|
|
struct teles3_hw {
|
|
unsigned int cfg_reg;
|
|
signed int isac;
|
|
signed int hscx[2];
|
|
signed int isacfifo;
|
|
signed int hscxfifo[2];
|
|
};
|
|
|
|
struct teles0_hw {
|
|
unsigned int cfg_reg;
|
|
void __iomem *membase;
|
|
unsigned long phymem;
|
|
};
|
|
|
|
struct avm_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int isac;
|
|
unsigned int hscx[2];
|
|
unsigned int isacfifo;
|
|
unsigned int hscxfifo[2];
|
|
unsigned int counter;
|
|
struct pci_dev *dev;
|
|
};
|
|
|
|
struct ix1_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int isac_ale;
|
|
unsigned int isac;
|
|
unsigned int hscx_ale;
|
|
unsigned int hscx;
|
|
};
|
|
|
|
struct diva_hw {
|
|
unsigned long cfg_reg;
|
|
unsigned long pci_cfg;
|
|
unsigned int ctrl;
|
|
unsigned long isac_adr;
|
|
unsigned int isac;
|
|
unsigned long hscx_adr;
|
|
unsigned int hscx;
|
|
unsigned int status;
|
|
struct timer_list tl;
|
|
u_char ctrl_reg;
|
|
struct pci_dev *dev;
|
|
};
|
|
|
|
struct asus_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int adr;
|
|
unsigned int isac;
|
|
unsigned int hscx;
|
|
unsigned int u7;
|
|
unsigned int pots;
|
|
};
|
|
|
|
|
|
struct hfc_hw {
|
|
unsigned int addr;
|
|
unsigned int fifosize;
|
|
unsigned char cirm;
|
|
unsigned char ctmt;
|
|
unsigned char cip;
|
|
u_char isac_spcr;
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct sedl_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int adr;
|
|
unsigned int isac;
|
|
unsigned int hscx;
|
|
unsigned int reset_on;
|
|
unsigned int reset_off;
|
|
struct isar_reg isar;
|
|
unsigned int chip;
|
|
unsigned int bus;
|
|
struct pci_dev *dev;
|
|
};
|
|
|
|
struct spt_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int isac;
|
|
unsigned int hscx[2];
|
|
unsigned char res_irq;
|
|
};
|
|
|
|
struct mic_hw {
|
|
unsigned int cfg_reg;
|
|
unsigned int adr;
|
|
unsigned int isac;
|
|
unsigned int hscx;
|
|
};
|
|
|
|
struct njet_hw {
|
|
unsigned long base;
|
|
unsigned int isac;
|
|
unsigned int auxa;
|
|
unsigned char auxd;
|
|
unsigned char dmactrl;
|
|
unsigned char ctrl_reg;
|
|
unsigned char irqmask0;
|
|
unsigned char irqstat0;
|
|
unsigned char last_is0;
|
|
struct pci_dev *dev;
|
|
};
|
|
|
|
struct hfcPCI_hw {
|
|
unsigned char cirm;
|
|
unsigned char ctmt;
|
|
unsigned char conn;
|
|
unsigned char mst_m;
|
|
unsigned char int_m1;
|
|
unsigned char int_m2;
|
|
unsigned char int_s1;
|
|
unsigned char sctrl;
|
|
unsigned char sctrl_r;
|
|
unsigned char sctrl_e;
|
|
unsigned char trm;
|
|
unsigned char stat;
|
|
unsigned char fifo;
|
|
unsigned char fifo_en;
|
|
unsigned char bswapped;
|
|
unsigned char nt_mode;
|
|
int nt_timer;
|
|
struct pci_dev *dev;
|
|
unsigned char *pci_io; /* start of PCI IO memory */
|
|
dma_addr_t dma; /* dma handle for Fifos */
|
|
void *fifos; /* FIFO memory */
|
|
int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct hfcSX_hw {
|
|
unsigned long base;
|
|
unsigned char cirm;
|
|
unsigned char ctmt;
|
|
unsigned char conn;
|
|
unsigned char mst_m;
|
|
unsigned char int_m1;
|
|
unsigned char int_m2;
|
|
unsigned char int_s1;
|
|
unsigned char sctrl;
|
|
unsigned char sctrl_r;
|
|
unsigned char sctrl_e;
|
|
unsigned char trm;
|
|
unsigned char stat;
|
|
unsigned char fifo;
|
|
unsigned char bswapped;
|
|
unsigned char nt_mode;
|
|
unsigned char chip;
|
|
int b_fifo_size;
|
|
unsigned char last_fifo;
|
|
void *extra;
|
|
int nt_timer;
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct hfcD_hw {
|
|
unsigned int addr;
|
|
unsigned int bfifosize;
|
|
unsigned int dfifosize;
|
|
unsigned char cirm;
|
|
unsigned char ctmt;
|
|
unsigned char cip;
|
|
unsigned char conn;
|
|
unsigned char mst_m;
|
|
unsigned char int_m1;
|
|
unsigned char int_m2;
|
|
unsigned char int_s1;
|
|
unsigned char sctrl;
|
|
unsigned char stat;
|
|
unsigned char fifo;
|
|
unsigned char f1;
|
|
unsigned char f2;
|
|
unsigned int *send;
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct isurf_hw {
|
|
unsigned int reset;
|
|
unsigned long phymem;
|
|
void __iomem *isac;
|
|
void __iomem *isar;
|
|
struct isar_reg isar_r;
|
|
};
|
|
|
|
struct saphir_hw {
|
|
struct pci_dev *dev;
|
|
unsigned int cfg_reg;
|
|
unsigned int ale;
|
|
unsigned int isac;
|
|
unsigned int hscx;
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct bkm_hw {
|
|
struct pci_dev *dev;
|
|
unsigned long base;
|
|
/* A4T stuff */
|
|
unsigned long isac_adr;
|
|
unsigned int isac_ale;
|
|
unsigned long jade_adr;
|
|
unsigned int jade_ale;
|
|
/* Scitel Quadro stuff */
|
|
unsigned long plx_adr;
|
|
unsigned long data_adr;
|
|
};
|
|
|
|
struct gazel_hw {
|
|
struct pci_dev *dev;
|
|
unsigned int cfg_reg;
|
|
unsigned int pciaddr[2];
|
|
signed int ipac;
|
|
signed int isac;
|
|
signed int hscx[2];
|
|
signed int isacfifo;
|
|
signed int hscxfifo[2];
|
|
unsigned char timeslot;
|
|
unsigned char iom2;
|
|
};
|
|
|
|
struct w6692_hw {
|
|
struct pci_dev *dev;
|
|
unsigned int iobase;
|
|
struct timer_list timer;
|
|
};
|
|
|
|
struct arcofi_msg {
|
|
struct arcofi_msg *next;
|
|
u_char receive;
|
|
u_char len;
|
|
u_char msg[10];
|
|
};
|
|
|
|
struct isac_chip {
|
|
int ph_state;
|
|
u_char *mon_tx;
|
|
u_char *mon_rx;
|
|
int mon_txp;
|
|
int mon_txc;
|
|
int mon_rxp;
|
|
struct arcofi_msg *arcofi_list;
|
|
struct timer_list arcofitimer;
|
|
wait_queue_head_t arcofi_wait;
|
|
u_char arcofi_bc;
|
|
u_char arcofi_state;
|
|
u_char mocr;
|
|
u_char adf2;
|
|
};
|
|
|
|
struct hfcd_chip {
|
|
int ph_state;
|
|
};
|
|
|
|
struct hfcpci_chip {
|
|
int ph_state;
|
|
};
|
|
|
|
struct hfcsx_chip {
|
|
int ph_state;
|
|
};
|
|
|
|
struct w6692_chip {
|
|
int ph_state;
|
|
};
|
|
|
|
struct amd7930_chip {
|
|
u_char lmr1;
|
|
u_char ph_state;
|
|
u_char old_state;
|
|
u_char flg_t3;
|
|
unsigned int tx_xmtlen;
|
|
struct timer_list timer3;
|
|
void (*ph_command) (struct IsdnCardState *, u_char, char *);
|
|
void (*setIrqMask) (struct IsdnCardState *, u_char);
|
|
};
|
|
|
|
struct icc_chip {
|
|
int ph_state;
|
|
u_char *mon_tx;
|
|
u_char *mon_rx;
|
|
int mon_txp;
|
|
int mon_txc;
|
|
int mon_rxp;
|
|
struct arcofi_msg *arcofi_list;
|
|
struct timer_list arcofitimer;
|
|
wait_queue_head_t arcofi_wait;
|
|
u_char arcofi_bc;
|
|
u_char arcofi_state;
|
|
u_char mocr;
|
|
u_char adf2;
|
|
};
|
|
|
|
#define HW_IOM1 0
|
|
#define HW_IPAC 1
|
|
#define HW_ISAR 2
|
|
#define HW_ARCOFI 3
|
|
#define FLG_TWO_DCHAN 4
|
|
#define FLG_L1_DBUSY 5
|
|
#define FLG_DBUSY_TIMER 6
|
|
#define FLG_LOCK_ATOMIC 7
|
|
#define FLG_ARCOFI_TIMER 8
|
|
#define FLG_ARCOFI_ERROR 9
|
|
#define FLG_HW_L1_UINT 10
|
|
|
|
struct IsdnCardState {
|
|
spinlock_t lock;
|
|
u_char typ;
|
|
u_char subtyp;
|
|
int protocol;
|
|
u_int irq;
|
|
u_long irq_flags;
|
|
u_long HW_Flags;
|
|
int *busy_flag;
|
|
int chanlimit; /* limited number of B-chans to use */
|
|
int logecho; /* log echo if supported by card */
|
|
union {
|
|
struct elsa_hw elsa;
|
|
struct teles0_hw teles0;
|
|
struct teles3_hw teles3;
|
|
struct avm_hw avm;
|
|
struct ix1_hw ix1;
|
|
struct diva_hw diva;
|
|
struct asus_hw asus;
|
|
struct hfc_hw hfc;
|
|
struct sedl_hw sedl;
|
|
struct spt_hw spt;
|
|
struct mic_hw mic;
|
|
struct njet_hw njet;
|
|
struct hfcD_hw hfcD;
|
|
struct hfcPCI_hw hfcpci;
|
|
struct hfcSX_hw hfcsx;
|
|
struct ix1_hw niccy;
|
|
struct isurf_hw isurf;
|
|
struct saphir_hw saphir;
|
|
struct bkm_hw ax;
|
|
struct gazel_hw gazel;
|
|
struct w6692_hw w6692;
|
|
struct hisax_d_if *hisax_d_if;
|
|
} hw;
|
|
int myid;
|
|
isdn_if iif;
|
|
spinlock_t statlock;
|
|
u_char *status_buf;
|
|
u_char *status_read;
|
|
u_char *status_write;
|
|
u_char *status_end;
|
|
u_char (*readisac) (struct IsdnCardState *, u_char);
|
|
void (*writeisac) (struct IsdnCardState *, u_char, u_char);
|
|
void (*readisacfifo) (struct IsdnCardState *, u_char *, int);
|
|
void (*writeisacfifo) (struct IsdnCardState *, u_char *, int);
|
|
u_char (*BC_Read_Reg) (struct IsdnCardState *, int, u_char);
|
|
void (*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char);
|
|
void (*BC_Send_Data) (struct BCState *);
|
|
int (*cardmsg) (struct IsdnCardState *, int, void *);
|
|
void (*setstack_d) (struct PStack *, struct IsdnCardState *);
|
|
void (*DC_Close) (struct IsdnCardState *);
|
|
irq_handler_t irq_func;
|
|
int (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
|
|
struct Channel channel[2 + MAX_WAITING_CALLS];
|
|
struct BCState bcs[2 + MAX_WAITING_CALLS];
|
|
struct PStack *stlist;
|
|
struct sk_buff_head rq, sq; /* D-channel queues */
|
|
int cardnr;
|
|
char *dlog;
|
|
int debug;
|
|
union {
|
|
struct isac_chip isac;
|
|
struct hfcd_chip hfcd;
|
|
struct hfcpci_chip hfcpci;
|
|
struct hfcsx_chip hfcsx;
|
|
struct w6692_chip w6692;
|
|
struct amd7930_chip amd7930;
|
|
struct icc_chip icc;
|
|
} dc;
|
|
u_char *rcvbuf;
|
|
int rcvidx;
|
|
struct sk_buff *tx_skb;
|
|
int tx_cnt;
|
|
u_long event;
|
|
struct work_struct tqueue;
|
|
struct timer_list dbusytimer;
|
|
unsigned int irq_cnt;
|
|
#ifdef ERROR_STATISTIC
|
|
int err_crc;
|
|
int err_tx;
|
|
int err_rx;
|
|
#endif
|
|
};
|
|
|
|
|
|
#define schedule_event(s, ev) do { test_and_set_bit(ev, &s->event); schedule_work(&s->tqueue); } while (0)
|
|
|
|
#define MON0_RX 1
|
|
#define MON1_RX 2
|
|
#define MON0_TX 4
|
|
#define MON1_TX 8
|
|
|
|
|
|
#ifdef ISDN_CHIP_ISAC
|
|
#undef ISDN_CHIP_ISAC
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_16_0
|
|
#define CARD_TELES0 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_TELES0 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_16_3
|
|
#define CARD_TELES3 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_TELES3 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_TELESPCI
|
|
#define CARD_TELESPCI 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_TELESPCI 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_AVM_A1
|
|
#define CARD_AVM_A1 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_AVM_A1 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_AVM_A1_PCMCIA
|
|
#define CARD_AVM_A1_PCMCIA 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_AVM_A1_PCMCIA 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_FRITZPCI
|
|
#define CARD_FRITZPCI 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_FRITZPCI 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_ELSA
|
|
#define CARD_ELSA 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_ELSA 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_IX1MICROR2
|
|
#define CARD_IX1MICROR2 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_IX1MICROR2 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_DIEHLDIVA
|
|
#define CARD_DIEHLDIVA 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_DIEHLDIVA 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_ASUSCOM
|
|
#define CARD_ASUSCOM 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_ASUSCOM 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_TELEINT
|
|
#define CARD_TELEINT 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_TELEINT 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_SEDLBAUER
|
|
#define CARD_SEDLBAUER 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_SEDLBAUER 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_SPORTSTER
|
|
#define CARD_SPORTSTER 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_SPORTSTER 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_MIC
|
|
#define CARD_MIC 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_MIC 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_NETJET
|
|
#define CARD_NETJET_S 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_NETJET_S 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_HFCS
|
|
#define CARD_HFCS 1
|
|
#else
|
|
#define CARD_HFCS 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_HFC_PCI
|
|
#define CARD_HFC_PCI 1
|
|
#else
|
|
#define CARD_HFC_PCI 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_HFC_SX
|
|
#define CARD_HFC_SX 1
|
|
#else
|
|
#define CARD_HFC_SX 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_NICCY
|
|
#define CARD_NICCY 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_NICCY 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_ISURF
|
|
#define CARD_ISURF 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_ISURF 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_S0BOX
|
|
#define CARD_S0BOX 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_S0BOX 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_HSTSAPHIR
|
|
#define CARD_HSTSAPHIR 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_HSTSAPHIR 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_BKM_A4T
|
|
#define CARD_BKM_A4T 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_BKM_A4T 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_SCT_QUADRO
|
|
#define CARD_SCT_QUADRO 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_SCT_QUADRO 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_GAZEL
|
|
#define CARD_GAZEL 1
|
|
#ifndef ISDN_CHIP_ISAC
|
|
#define ISDN_CHIP_ISAC 1
|
|
#endif
|
|
#else
|
|
#define CARD_GAZEL 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_W6692
|
|
#define CARD_W6692 1
|
|
#ifndef ISDN_CHIP_W6692
|
|
#define ISDN_CHIP_W6692 1
|
|
#endif
|
|
#else
|
|
#define CARD_W6692 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_NETJET_U
|
|
#define CARD_NETJET_U 1
|
|
#ifndef ISDN_CHIP_ICC
|
|
#define ISDN_CHIP_ICC 1
|
|
#endif
|
|
#ifndef HISAX_UINTERFACE
|
|
#define HISAX_UINTERFACE 1
|
|
#endif
|
|
#else
|
|
#define CARD_NETJET_U 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_HISAX_ENTERNOW_PCI
|
|
#define CARD_FN_ENTERNOW_PCI 1
|
|
#else
|
|
#define CARD_FN_ENTERNOW_PCI 0
|
|
#endif
|
|
|
|
#define TEI_PER_CARD 1
|
|
|
|
/* L1 Debug */
|
|
#define L1_DEB_WARN 0x01
|
|
#define L1_DEB_INTSTAT 0x02
|
|
#define L1_DEB_ISAC 0x04
|
|
#define L1_DEB_ISAC_FIFO 0x08
|
|
#define L1_DEB_HSCX 0x10
|
|
#define L1_DEB_HSCX_FIFO 0x20
|
|
#define L1_DEB_LAPD 0x40
|
|
#define L1_DEB_IPAC 0x80
|
|
#define L1_DEB_RECEIVE_FRAME 0x100
|
|
#define L1_DEB_MONITOR 0x200
|
|
#define DEB_DLOG_HEX 0x400
|
|
#define DEB_DLOG_VERBOSE 0x800
|
|
|
|
#define L2FRAME_DEBUG
|
|
|
|
#ifdef L2FRAME_DEBUG
|
|
extern void Logl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir);
|
|
#endif
|
|
|
|
#include "hisax_cfg.h"
|
|
|
|
void init_bcstate(struct IsdnCardState *cs, int bc);
|
|
|
|
void setstack_HiSax(struct PStack *st, struct IsdnCardState *cs);
|
|
void HiSax_addlist(struct IsdnCardState *sp, struct PStack *st);
|
|
void HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st);
|
|
|
|
void setstack_l1_B(struct PStack *st);
|
|
|
|
void setstack_tei(struct PStack *st);
|
|
void setstack_manager(struct PStack *st);
|
|
|
|
void setstack_isdnl2(struct PStack *st, char *debug_id);
|
|
void releasestack_isdnl2(struct PStack *st);
|
|
void setstack_transl2(struct PStack *st);
|
|
void releasestack_transl2(struct PStack *st);
|
|
void lli_writewakeup(struct PStack *st, int len);
|
|
|
|
void setstack_l3dc(struct PStack *st, struct Channel *chanp);
|
|
void setstack_l3bc(struct PStack *st, struct Channel *chanp);
|
|
void releasestack_isdnl3(struct PStack *st);
|
|
|
|
u_char *findie(u_char *p, int size, u_char ie, int wanted_set);
|
|
int getcallref(u_char *p);
|
|
int newcallref(void);
|
|
|
|
int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
|
|
void FsmFree(struct Fsm *fsm);
|
|
int FsmEvent(struct FsmInst *fi, int event, void *arg);
|
|
void FsmChangeState(struct FsmInst *fi, int newstate);
|
|
void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
|
|
int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
|
|
void *arg, int where);
|
|
void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
|
|
void *arg, int where);
|
|
void FsmDelTimer(struct FsmTimer *ft, int where);
|
|
int jiftime(char *s, long mark);
|
|
|
|
int HiSax_command(isdn_ctrl *ic);
|
|
int HiSax_writebuf_skb(int id, int chan, int ack, struct sk_buff *skb);
|
|
__printf(3, 4)
|
|
void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
|
|
__printf(3, 0)
|
|
void VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args);
|
|
void HiSax_reportcard(int cardnr, int sel);
|
|
int QuickHex(char *txt, u_char *p, int cnt);
|
|
void LogFrame(struct IsdnCardState *cs, u_char *p, int size);
|
|
void dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir);
|
|
void iecpy(u_char *dest, u_char *iestart, int ieoffset);
|
|
#endif /* __KERNEL__ */
|
|
|
|
/*
|
|
* Busywait delay for `jiffs' jiffies
|
|
*/
|
|
#define HZDELAY(jiffs) do { \
|
|
int tout = jiffs; \
|
|
\
|
|
while (tout--) { \
|
|
int loops = USEC_PER_SEC / HZ; \
|
|
while (loops--) \
|
|
udelay(1); \
|
|
} \
|
|
} while (0)
|
|
|
|
int ll_run(struct IsdnCardState *cs, int addfeatures);
|
|
int CallcNew(void);
|
|
void CallcFree(void);
|
|
int CallcNewChan(struct IsdnCardState *cs);
|
|
void CallcFreeChan(struct IsdnCardState *cs);
|
|
int Isdnl1New(void);
|
|
void Isdnl1Free(void);
|
|
int Isdnl2New(void);
|
|
void Isdnl2Free(void);
|
|
int Isdnl3New(void);
|
|
void Isdnl3Free(void);
|
|
void init_tei(struct IsdnCardState *cs, int protocol);
|
|
void release_tei(struct IsdnCardState *cs);
|
|
char *HiSax_getrev(const char *revision);
|
|
int TeiNew(void);
|
|
void TeiFree(void);
|
|
|
|
#ifdef CONFIG_PCI
|
|
|
|
#include <linux/pci.h>
|
|
|
|
/* adaptation wrapper for old usage
|
|
* WARNING! This is unfit for use in a PCI hotplug environment,
|
|
* as the returned PCI device can disappear at any moment in time.
|
|
* Callers should be converted to use pci_get_device() instead.
|
|
*/
|
|
static inline struct pci_dev *hisax_find_pci_device(unsigned int vendor,
|
|
unsigned int device,
|
|
struct pci_dev *from)
|
|
{
|
|
struct pci_dev *pdev;
|
|
|
|
pci_dev_get(from);
|
|
pdev = pci_get_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
|
|
pci_dev_put(pdev);
|
|
return pdev;
|
|
}
|
|
|
|
#endif
|