Logo Search packages:      
Sourcecode: linux version File versions  Download package

hisax.h

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

/* 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 */
        void *share_start; /* shared memory for Fifos start */
        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 *);
      int         (*irq_func) (int, void *);
      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;
#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);
void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
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);

Generated by  Doxygen 1.6.0   Back to index