2005-04-17 02:20:36 +04:00
/* $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/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__
2009-02-25 16:11:03 +03:00
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 ;
2005-04-17 02:20:36 +04:00
/* 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 ;
2007-10-14 22:35:20 +04:00
unsigned long Flags ;
2005-04-17 02:20:36 +04:00
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
2006-02-03 14:04:48 +03:00
# define PACKET_NOACK 7
2005-04-17 02:20:36 +04:00
/* 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
2006-01-08 12:05:07 +03:00
u_char fill ;
u_char mode ;
u_char xml ;
u_char cmd ;
2005-04-17 02:20:36 +04:00
# else
2006-01-08 12:05:07 +03:00
u_char cmd ;
u_char xml ;
u_char mode ;
u_char fill ;
2005-04-17 02:20:36 +04:00
# endif
2006-01-08 12:05:07 +03:00
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
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 */
2009-06-02 16:57:35 +04:00
dma_addr_t dma ; /* dma handle for Fifos */
2005-04-17 02:20:36 +04:00
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 * ) ;
2007-10-31 12:42:50 +03:00
irq_handler_t irq_func ;
2005-04-17 02:20:36 +04:00
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 ;
2010-09-30 00:16:36 +04:00
unsigned int irq_cnt ;
2005-04-17 02:20:36 +04:00
# 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
2005-09-08 02:19:41 +04:00
# else
# define CARD_FN_ENTERNOW_PCI 0
2005-04-17 02:20:36 +04:00
# 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 ) ;
2010-11-10 21:54:58 +03:00
__attribute__ ( ( format ( printf , 3 , 4 ) ) )
2005-04-17 02:20:36 +04:00
void HiSax_putstatus ( struct IsdnCardState * cs , char * head , char * fmt , . . . ) ;
2010-11-10 21:54:58 +03:00
__attribute__ ( ( format ( printf , 3 , 0 ) ) )
2005-04-17 02:20:36 +04:00
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__ */
2006-10-02 13:17:38 +04:00
/*
* 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 )
2005-04-17 02:20:36 +04:00
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 ) ;
2010-01-18 19:24:10 +03:00
# 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