12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352 |
- /* $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
|