linux/drivers/isdn/hisax/hisax.h
<<
>>
Prefs
   1/* $Id: hisax.h,v 2.64.2.4 2004/02/11 13:21:33 keil Exp $
   2 *
   3 * Basic declarations, defines and prototypes
   4 *
   5 * This software may be used and distributed according to the terms
   6 * of the GNU General Public License, incorporated herein by reference.
   7 *
   8 */
   9#include <linux/errno.h>
  10#include <linux/fs.h>
  11#include <linux/major.h>
  12#include <asm/io.h>
  13#include <linux/delay.h>
  14#include <linux/kernel.h>
  15#include <linux/signal.h>
  16#include <linux/slab.h>
  17#include <linux/mm.h>
  18#include <linux/mman.h>
  19#include <linux/interrupt.h>
  20#include <linux/ioport.h>
  21#include <linux/timer.h>
  22#include <linux/wait.h>
  23#include <linux/isdnif.h>
  24#include <linux/tty.h>
  25#include <linux/serial_reg.h>
  26#include <linux/netdevice.h>
  27
  28#define ERROR_STATISTIC
  29
  30#define REQUEST         0
  31#define CONFIRM         1
  32#define INDICATION      2
  33#define RESPONSE        3
  34
  35#define HW_ENABLE       0x0000
  36#define HW_RESET        0x0004
  37#define HW_POWERUP      0x0008
  38#define HW_ACTIVATE     0x0010
  39#define HW_DEACTIVATE   0x0018
  40
  41#define HW_INFO1        0x0010
  42#define HW_INFO2        0x0020
  43#define HW_INFO3        0x0030
  44#define HW_INFO4        0x0040
  45#define HW_INFO4_P8     0x0040
  46#define HW_INFO4_P10    0x0048
  47#define HW_RSYNC        0x0060
  48#define HW_TESTLOOP     0x0070
  49#define CARD_RESET      0x00F0
  50#define CARD_INIT       0x00F2
  51#define CARD_RELEASE    0x00F3
  52#define CARD_TEST       0x00F4
  53#define CARD_AUX_IND    0x00F5
  54
  55#define PH_ACTIVATE     0x0100
  56#define PH_DEACTIVATE   0x0110
  57#define PH_DATA         0x0120
  58#define PH_PULL         0x0130
  59#define PH_TESTLOOP     0x0140
  60#define PH_PAUSE        0x0150
  61#define MPH_ACTIVATE    0x0180
  62#define MPH_DEACTIVATE  0x0190
  63#define MPH_INFORMATION 0x01A0
  64
  65#define DL_ESTABLISH    0x0200
  66#define DL_RELEASE      0x0210
  67#define DL_DATA         0x0220
  68#define DL_FLUSH        0x0224
  69#define DL_UNIT_DATA    0x0230
  70
  71#define MDL_BC_RELEASE  0x0278  // Formula-n enter:now
  72#define MDL_BC_ASSIGN   0x027C  // Formula-n enter:now
  73#define MDL_ASSIGN      0x0280
  74#define MDL_REMOVE      0x0284
  75#define MDL_ERROR       0x0288
  76#define MDL_INFO_SETUP  0x02E0
  77#define MDL_INFO_CONN   0x02E4
  78#define MDL_INFO_REL    0x02E8
  79
  80#define CC_SETUP        0x0300
  81#define CC_RESUME       0x0304
  82#define CC_MORE_INFO    0x0310
  83#define CC_IGNORE       0x0320
  84#define CC_REJECT       0x0324
  85#define CC_SETUP_COMPL  0x0330
  86#define CC_PROCEEDING   0x0340
  87#define CC_ALERTING     0x0344
  88#define CC_PROGRESS     0x0348
  89#define CC_CONNECT      0x0350
  90#define CC_CHARGE       0x0354
  91#define CC_NOTIFY       0x0358
  92#define CC_DISCONNECT   0x0360
  93#define CC_RELEASE      0x0368
  94#define CC_SUSPEND      0x0370
  95#define CC_PROCEED_SEND 0x0374
  96#define CC_REDIR        0x0378
  97#define CC_T302         0x0382
  98#define CC_T303         0x0383
  99#define CC_T304         0x0384
 100#define CC_T305         0x0385
 101#define CC_T308_1       0x0388
 102#define CC_T308_2       0x038A
 103#define CC_T309         0x0309
 104#define CC_T310         0x0390
 105#define CC_T313         0x0393
 106#define CC_T318         0x0398
 107#define CC_T319         0x0399
 108#define CC_TSPID        0x03A0
 109#define CC_NOSETUP_RSP  0x03E0
 110#define CC_SETUP_ERR    0x03E1
 111#define CC_SUSPEND_ERR  0x03E2
 112#define CC_RESUME_ERR   0x03E3
 113#define CC_CONNECT_ERR  0x03E4
 114#define CC_RELEASE_ERR  0x03E5
 115#define CC_RESTART      0x03F4
 116#define CC_TDSS1_IO     0x13F4    /* DSS1 IO user timer */
 117#define CC_TNI1_IO      0x13F5    /* NI1 IO user timer */
 118
 119/* define maximum number of possible waiting incoming calls */
 120#define MAX_WAITING_CALLS 2
 121
 122
 123#ifdef __KERNEL__
 124
 125extern const char *CardType[];
 126extern int nrcards;
 127
 128extern const char *l1_revision;
 129extern const char *l2_revision;
 130extern const char *l3_revision;
 131extern const char *lli_revision;
 132extern const char *tei_revision;
 133
 134/* include l3dss1 & ni1 specific process structures, but no other defines */
 135#ifdef CONFIG_HISAX_EURO
 136#define l3dss1_process
 137#include "l3dss1.h"
 138#undef  l3dss1_process
 139#endif /* CONFIG_HISAX_EURO */
 140
 141#ifdef CONFIG_HISAX_NI1
 142#define l3ni1_process
 143#include "l3ni1.h"
 144#undef  l3ni1_process
 145#endif /* CONFIG_HISAX_NI1 */
 146
 147#define MAX_DFRAME_LEN  260
 148#define MAX_DFRAME_LEN_L1       300
 149#define HSCX_BUFMAX     4096
 150#define MAX_DATA_SIZE   (HSCX_BUFMAX - 4)
 151#define MAX_DATA_MEM    (HSCX_BUFMAX + 64)
 152#define RAW_BUFMAX      (((HSCX_BUFMAX * 6) / 5) + 5)
 153#define MAX_HEADER_LEN  4
 154#define MAX_WINDOW      8
 155#define MAX_MON_FRAME   32
 156#define MAX_DLOG_SPACE  2048
 157#define MAX_BLOG_SPACE  256
 158
 159/* #define I4L_IRQ_FLAG SA_INTERRUPT */
 160#define I4L_IRQ_FLAG    0
 161
 162/*
 163 * Statemachine
 164 */
 165
 166struct FsmInst;
 167
 168typedef void (*FSMFNPTR)(struct FsmInst *, int, void *);
 169
 170struct Fsm {
 171        FSMFNPTR *jumpmatrix;
 172        int state_count, event_count;
 173        char **strEvent, **strState;
 174};
 175
 176struct FsmInst {
 177        struct Fsm *fsm;
 178        int state;
 179        int debug;
 180        void *userdata;
 181        int userint;
 182        void (*printdebug) (struct FsmInst *, char *, ...);
 183};
 184
 185struct FsmNode {
 186        int state, event;
 187        void (*routine) (struct FsmInst *, int, void *);
 188};
 189
 190struct FsmTimer {
 191        struct FsmInst *fi;
 192        struct timer_list tl;
 193        int event;
 194        void *arg;
 195};
 196
 197struct L3Timer {
 198        struct l3_process *pc;
 199        struct timer_list tl;
 200        int event;
 201};
 202
 203#define FLG_L1_ACTIVATING       1
 204#define FLG_L1_ACTIVATED        2
 205#define FLG_L1_DEACTTIMER       3
 206#define FLG_L1_ACTTIMER         4
 207#define FLG_L1_T3RUN            5
 208#define FLG_L1_PULL_REQ         6
 209#define FLG_L1_UINT             7
 210
 211struct Layer1 {
 212        void *hardware;
 213        struct BCState *bcs;
 214        struct PStack **stlistp;
 215        unsigned long Flags;
 216        struct FsmInst l1m;
 217        struct FsmTimer timer;
 218        void (*l1l2) (struct PStack *, int, void *);
 219        void (*l1hw) (struct PStack *, int, void *);
 220        void (*l1tei) (struct PStack *, int, void *);
 221        int mode, bc;
 222        int delay;
 223};
 224
 225#define GROUP_TEI       127
 226#define TEI_SAPI        63
 227#define CTRL_SAPI       0
 228#define PACKET_NOACK    7
 229
 230/* Layer2 Flags */
 231
 232#define FLG_LAPB        0
 233#define FLG_LAPD        1
 234#define FLG_ORIG        2
 235#define FLG_MOD128      3
 236#define FLG_PEND_REL    4
 237#define FLG_L3_INIT     5
 238#define FLG_T200_RUN    6
 239#define FLG_ACK_PEND    7
 240#define FLG_REJEXC      8
 241#define FLG_OWN_BUSY    9
 242#define FLG_PEER_BUSY   10
 243#define FLG_DCHAN_BUSY  11
 244#define FLG_L1_ACTIV    12
 245#define FLG_ESTAB_PEND  13
 246#define FLG_PTP         14
 247#define FLG_FIXED_TEI   15
 248#define FLG_L2BLOCK     16
 249
 250struct Layer2 {
 251        int tei;
 252        int sap;
 253        int maxlen;
 254        u_long flag;
 255        spinlock_t lock;
 256        u_int vs, va, vr;
 257        int rc;
 258        unsigned int window;
 259        unsigned int sow;
 260        struct sk_buff *windowar[MAX_WINDOW];
 261        struct sk_buff_head i_queue;
 262        struct sk_buff_head ui_queue;
 263        void (*l2l1) (struct PStack *, int, void *);
 264        void (*l2l3) (struct PStack *, int, void *);
 265        void (*l2tei) (struct PStack *, int, void *);
 266        struct FsmInst l2m;
 267        struct FsmTimer t200, t203;
 268        int T200, N200, T203;
 269        int debug;
 270        char debug_id[16];
 271};
 272
 273struct Layer3 {
 274        void (*l3l4) (struct PStack *, int, void *);
 275        void (*l3ml3) (struct PStack *, int, void *);
 276        void (*l3l2) (struct PStack *, int, void *);
 277        struct FsmInst l3m;
 278        struct FsmTimer l3m_timer;
 279        struct sk_buff_head squeue;
 280        struct l3_process *proc;
 281        struct l3_process *global;
 282        int N303;
 283        int debug;
 284        char debug_id[8];
 285};
 286
 287struct LLInterface {
 288        void (*l4l3) (struct PStack *, int, void *);
 289        int  (*l4l3_proto) (struct PStack *, isdn_ctrl *);
 290        void *userdata;
 291        u_long flag;
 292};
 293
 294#define FLG_LLI_L1WAKEUP        1
 295#define FLG_LLI_L2WAKEUP        2
 296
 297struct Management {
 298        int     ri;
 299        struct FsmInst tei_m;
 300        struct FsmTimer t202;
 301        int T202, N202, debug;
 302        void (*layer) (struct PStack *, int, void *);
 303};
 304
 305#define NO_CAUSE 254
 306
 307struct Param {
 308        u_char cause;
 309        u_char loc;
 310        u_char diag[6];
 311        int bchannel;
 312        int chargeinfo;
 313        int spv;                /* SPV Flag */
 314        setup_parm setup;       /* from isdnif.h numbers and Serviceindicator */
 315        u_char moderate;        /* transfer mode and rate (bearer octet 4) */
 316};
 317
 318
 319struct PStack {
 320        struct PStack *next;
 321        struct Layer1 l1;
 322        struct Layer2 l2;
 323        struct Layer3 l3;
 324        struct LLInterface lli;
 325        struct Management ma;
 326        int protocol;           /* EDSS1, 1TR6 or NI1 */
 327
 328        /* protocol specific data fields */
 329        union
 330        { u_char uuuu; /* only as dummy */
 331#ifdef CONFIG_HISAX_EURO
 332                dss1_stk_priv dss1; /* private dss1 data */
 333#endif /* CONFIG_HISAX_EURO */
 334#ifdef CONFIG_HISAX_NI1
 335                ni1_stk_priv ni1; /* private ni1 data */
 336#endif /* CONFIG_HISAX_NI1 */
 337        } prot;
 338};
 339
 340struct l3_process {
 341        int callref;
 342        int state;
 343        struct L3Timer timer;
 344        int N303;
 345        int debug;
 346        struct Param para;
 347        struct Channel *chan;
 348        struct PStack *st;
 349        struct l3_process *next;
 350        ulong redir_result;
 351
 352        /* protocol specific data fields */
 353        union
 354        { u_char uuuu; /* only when euro not defined, avoiding empty union */
 355#ifdef CONFIG_HISAX_EURO
 356                dss1_proc_priv dss1; /* private dss1 data */
 357#endif /* CONFIG_HISAX_EURO */
 358#ifdef CONFIG_HISAX_NI1
 359                ni1_proc_priv ni1; /* private ni1 data */
 360#endif /* CONFIG_HISAX_NI1 */
 361        } prot;
 362};
 363
 364struct hscx_hw {
 365        int hscx;
 366        int rcvidx;
 367        int count;              /* Current skb sent count */
 368        u_char *rcvbuf;         /* B-Channel receive Buffer */
 369        u_char tsaxr0;
 370        u_char tsaxr1;
 371};
 372
 373struct w6692B_hw {
 374        int bchan;
 375        int rcvidx;
 376        int count;              /* Current skb sent count */
 377        u_char *rcvbuf;         /* B-Channel receive Buffer */
 378};
 379
 380struct isar_reg {
 381        unsigned long Flags;
 382        volatile u_char bstat;
 383        volatile u_char iis;
 384        volatile u_char cmsb;
 385        volatile u_char clsb;
 386        volatile u_char par[8];
 387};
 388
 389struct isar_hw {
 390        int dpath;
 391        int rcvidx;
 392        int txcnt;
 393        int mml;
 394        u_char state;
 395        u_char cmd;
 396        u_char mod;
 397        u_char newcmd;
 398        u_char newmod;
 399        char try_mod;
 400        struct timer_list ftimer;
 401        u_char *rcvbuf;         /* B-Channel receive Buffer */
 402        u_char conmsg[16];
 403        struct isar_reg *reg;
 404};
 405
 406struct hdlc_stat_reg {
 407#ifdef __BIG_ENDIAN
 408        u_char fill;
 409        u_char mode;
 410        u_char xml;
 411        u_char cmd;
 412#else
 413        u_char cmd;
 414        u_char xml;
 415        u_char mode;
 416        u_char fill;
 417#endif
 418} __attribute__((packed));
 419
 420struct hdlc_hw {
 421        union {
 422                u_int ctrl;
 423                struct hdlc_stat_reg sr;
 424        } ctrl;
 425        u_int stat;
 426        int rcvidx;
 427        int count;              /* Current skb sent count */
 428        u_char *rcvbuf;         /* B-Channel receive Buffer */
 429};
 430
 431struct hfcB_hw {
 432        unsigned int *send;
 433        int f1;
 434        int f2;
 435};
 436
 437struct tiger_hw {
 438        u_int *send;
 439        u_int *s_irq;
 440        u_int *s_end;
 441        u_int *sendp;
 442        u_int *rec;
 443        int free;
 444        u_char *rcvbuf;
 445        u_char *sendbuf;
 446        u_char *sp;
 447        int sendcnt;
 448        u_int s_tot;
 449        u_int r_bitcnt;
 450        u_int r_tot;
 451        u_int r_err;
 452        u_int r_fcs;
 453        u_char r_state;
 454        u_char r_one;
 455        u_char r_val;
 456        u_char s_state;
 457};
 458
 459struct amd7930_hw {
 460        u_char *tx_buff;
 461        u_char *rv_buff;
 462        int rv_buff_in;
 463        int rv_buff_out;
 464        struct sk_buff *rv_skb;
 465        struct hdlc_state *hdlc_state;
 466        struct work_struct tq_rcv;
 467        struct work_struct tq_xmt;
 468};
 469
 470#define BC_FLG_INIT     1
 471#define BC_FLG_ACTIV    2
 472#define BC_FLG_BUSY     3
 473#define BC_FLG_NOFRAME  4
 474#define BC_FLG_HALF     5
 475#define BC_FLG_EMPTY    6
 476#define BC_FLG_ORIG     7
 477#define BC_FLG_DLEETX   8
 478#define BC_FLG_LASTDLE  9
 479#define BC_FLG_FIRST    10
 480#define BC_FLG_LASTDATA 11
 481#define BC_FLG_NMD_DATA 12
 482#define BC_FLG_FTI_RUN  13
 483#define BC_FLG_LL_OK    14
 484#define BC_FLG_LL_CONN  15
 485#define BC_FLG_FTI_FTS  16
 486#define BC_FLG_FRH_WAIT 17
 487
 488#define L1_MODE_NULL    0
 489#define L1_MODE_TRANS   1
 490#define L1_MODE_HDLC    2
 491#define L1_MODE_EXTRN   3
 492#define L1_MODE_HDLC_56K 4
 493#define L1_MODE_MODEM   7
 494#define L1_MODE_V32     8
 495#define L1_MODE_FAX     9
 496
 497struct BCState {
 498        int channel;
 499        int mode;
 500        u_long Flag;
 501        struct IsdnCardState *cs;
 502        int tx_cnt;             /* B-Channel transmit counter */
 503        struct sk_buff *tx_skb; /* B-Channel transmit Buffer */
 504        struct sk_buff_head rqueue;     /* B-Channel receive Queue */
 505        struct sk_buff_head squeue;     /* B-Channel send Queue */
 506        int ackcnt;
 507        spinlock_t aclock;
 508        struct PStack *st;
 509        u_char *blog;
 510        u_char *conmsg;
 511        struct timer_list transbusy;
 512        struct work_struct tqueue;
 513        u_long event;
 514        int  (*BC_SetStack) (struct PStack *, struct BCState *);
 515        void (*BC_Close) (struct BCState *);
 516#ifdef ERROR_STATISTIC
 517        int err_crc;
 518        int err_tx;
 519        int err_rdo;
 520        int err_inv;
 521#endif
 522        union {
 523                struct hscx_hw hscx;
 524                struct hdlc_hw hdlc;
 525                struct isar_hw isar;
 526                struct hfcB_hw hfc;
 527                struct tiger_hw tiger;
 528                struct amd7930_hw  amd7930;
 529                struct w6692B_hw w6692;
 530                struct hisax_b_if *b_if;
 531        } hw;
 532};
 533
 534struct Channel {
 535        struct PStack *b_st, *d_st;
 536        struct IsdnCardState *cs;
 537        struct BCState *bcs;
 538        int chan;
 539        int incoming;
 540        struct FsmInst fi;
 541        struct FsmTimer drel_timer, dial_timer;
 542        int debug;
 543        int l2_protocol, l2_active_protocol;
 544        int l3_protocol;
 545        int data_open;
 546        struct l3_process *proc;
 547        setup_parm setup;       /* from isdnif.h numbers and Serviceindicator */
 548        u_long Flags;           /* for remembering action done in l4 */
 549        int leased;
 550};
 551
 552struct elsa_hw {
 553        struct pci_dev *dev;
 554        unsigned long base;
 555        unsigned int cfg;
 556        unsigned int ctrl;
 557        unsigned int ale;
 558        unsigned int isac;
 559        unsigned int itac;
 560        unsigned int hscx;
 561        unsigned int trig;
 562        unsigned int timer;
 563        unsigned int counter;
 564        unsigned int status;
 565        struct timer_list tl;
 566        unsigned int MFlag;
 567        struct BCState *bcs;
 568        u_char *transbuf;
 569        u_char *rcvbuf;
 570        unsigned int transp;
 571        unsigned int rcvp;
 572        unsigned int transcnt;
 573        unsigned int rcvcnt;
 574        u_char IER;
 575        u_char FCR;
 576        u_char LCR;
 577        u_char MCR;
 578        u_char ctrl_reg;
 579};
 580
 581struct teles3_hw {
 582        unsigned int cfg_reg;
 583        signed   int isac;
 584        signed   int hscx[2];
 585        signed   int isacfifo;
 586        signed   int hscxfifo[2];
 587};
 588
 589struct teles0_hw {
 590        unsigned int cfg_reg;
 591        void __iomem *membase;
 592        unsigned long phymem;
 593};
 594
 595struct avm_hw {
 596        unsigned int cfg_reg;
 597        unsigned int isac;
 598        unsigned int hscx[2];
 599        unsigned int isacfifo;
 600        unsigned int hscxfifo[2];
 601        unsigned int counter;
 602        struct pci_dev *dev;
 603};
 604
 605struct ix1_hw {
 606        unsigned int cfg_reg;
 607        unsigned int isac_ale;
 608        unsigned int isac;
 609        unsigned int hscx_ale;
 610        unsigned int hscx;
 611};
 612
 613struct diva_hw {
 614        unsigned long cfg_reg;
 615        unsigned long pci_cfg;
 616        unsigned int ctrl;
 617        unsigned long isac_adr;
 618        unsigned int isac;
 619        unsigned long hscx_adr;
 620        unsigned int hscx;
 621        unsigned int status;
 622        struct timer_list tl;
 623        u_char ctrl_reg;
 624        struct pci_dev *dev;
 625};
 626
 627struct asus_hw {
 628        unsigned int cfg_reg;
 629        unsigned int adr;
 630        unsigned int isac;
 631        unsigned int hscx;
 632        unsigned int u7;
 633        unsigned int pots;
 634};
 635
 636
 637struct hfc_hw {
 638        unsigned int addr;
 639        unsigned int fifosize;
 640        unsigned char cirm;
 641        unsigned char ctmt;
 642        unsigned char cip;
 643        u_char isac_spcr;
 644        struct timer_list timer;
 645};
 646
 647struct sedl_hw {
 648        unsigned int cfg_reg;
 649        unsigned int adr;
 650        unsigned int isac;
 651        unsigned int hscx;
 652        unsigned int reset_on;
 653        unsigned int reset_off;
 654        struct isar_reg isar;
 655        unsigned int chip;
 656        unsigned int bus;
 657        struct pci_dev *dev;
 658};
 659
 660struct spt_hw {
 661        unsigned int cfg_reg;
 662        unsigned int isac;
 663        unsigned int hscx[2];
 664        unsigned char res_irq;
 665};
 666
 667struct mic_hw {
 668        unsigned int cfg_reg;
 669        unsigned int adr;
 670        unsigned int isac;
 671        unsigned int hscx;
 672};
 673
 674struct njet_hw {
 675        unsigned long base;
 676        unsigned int isac;
 677        unsigned int auxa;
 678        unsigned char auxd;
 679        unsigned char dmactrl;
 680        unsigned char ctrl_reg;
 681        unsigned char irqmask0;
 682        unsigned char irqstat0;
 683        unsigned char last_is0;
 684        struct pci_dev *dev;
 685};
 686
 687struct hfcPCI_hw {
 688        unsigned char cirm;
 689        unsigned char ctmt;
 690        unsigned char conn;
 691        unsigned char mst_m;
 692        unsigned char int_m1;
 693        unsigned char int_m2;
 694        unsigned char int_s1;
 695        unsigned char sctrl;
 696        unsigned char sctrl_r;
 697        unsigned char sctrl_e;
 698        unsigned char trm;
 699        unsigned char stat;
 700        unsigned char fifo;
 701        unsigned char fifo_en;
 702        unsigned char bswapped;
 703        unsigned char nt_mode;
 704        int nt_timer;
 705        struct pci_dev *dev;
 706        unsigned char *pci_io; /* start of PCI IO memory */
 707        dma_addr_t dma; /* dma handle for Fifos */
 708        void *fifos; /* FIFO memory */
 709        int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */
 710        struct timer_list timer;
 711};
 712
 713struct hfcSX_hw {
 714        unsigned long base;
 715        unsigned char cirm;
 716        unsigned char ctmt;
 717        unsigned char conn;
 718        unsigned char mst_m;
 719        unsigned char int_m1;
 720        unsigned char int_m2;
 721        unsigned char int_s1;
 722        unsigned char sctrl;
 723        unsigned char sctrl_r;
 724        unsigned char sctrl_e;
 725        unsigned char trm;
 726        unsigned char stat;
 727        unsigned char fifo;
 728        unsigned char bswapped;
 729        unsigned char nt_mode;
 730        unsigned char chip;
 731        int b_fifo_size;
 732        unsigned char last_fifo;
 733        void *extra;
 734        int nt_timer;
 735        struct timer_list timer;
 736};
 737
 738struct hfcD_hw {
 739        unsigned int addr;
 740        unsigned int bfifosize;
 741        unsigned int dfifosize;
 742        unsigned char cirm;
 743        unsigned char ctmt;
 744        unsigned char cip;
 745        unsigned char conn;
 746        unsigned char mst_m;
 747        unsigned char int_m1;
 748        unsigned char int_m2;
 749        unsigned char int_s1;
 750        unsigned char sctrl;
 751        unsigned char stat;
 752        unsigned char fifo;
 753        unsigned char f1;
 754        unsigned char f2;
 755        unsigned int *send;
 756        struct timer_list timer;
 757};
 758
 759struct isurf_hw {
 760        unsigned int reset;
 761        unsigned long phymem;
 762        void __iomem *isac;
 763        void __iomem *isar;
 764        struct isar_reg isar_r;
 765};
 766
 767struct saphir_hw {
 768        struct pci_dev *dev;
 769        unsigned int cfg_reg;
 770        unsigned int ale;
 771        unsigned int isac;
 772        unsigned int hscx;
 773        struct timer_list timer;
 774};
 775
 776struct bkm_hw {
 777        struct pci_dev *dev;
 778        unsigned long base;
 779        /* A4T stuff */
 780        unsigned long isac_adr;
 781        unsigned int isac_ale;
 782        unsigned long jade_adr;
 783        unsigned int jade_ale;
 784        /* Scitel Quadro stuff */
 785        unsigned long plx_adr;
 786        unsigned long data_adr;
 787};
 788
 789struct gazel_hw {
 790        struct pci_dev *dev;
 791        unsigned int cfg_reg;
 792        unsigned int pciaddr[2];
 793        signed   int ipac;
 794        signed   int isac;
 795        signed   int hscx[2];
 796        signed   int isacfifo;
 797        signed   int hscxfifo[2];
 798        unsigned char timeslot;
 799        unsigned char iom2;
 800};
 801
 802struct w6692_hw {
 803        struct pci_dev *dev;
 804        unsigned int iobase;
 805        struct timer_list timer;
 806};
 807
 808struct arcofi_msg {
 809        struct arcofi_msg *next;
 810        u_char receive;
 811        u_char len;
 812        u_char msg[10];
 813};
 814
 815struct isac_chip {
 816        int ph_state;
 817        u_char *mon_tx;
 818        u_char *mon_rx;
 819        int mon_txp;
 820        int mon_txc;
 821        int mon_rxp;
 822        struct arcofi_msg *arcofi_list;
 823        struct timer_list arcofitimer;
 824        wait_queue_head_t arcofi_wait;
 825        u_char arcofi_bc;
 826        u_char arcofi_state;
 827        u_char mocr;
 828        u_char adf2;
 829};
 830
 831struct hfcd_chip {
 832        int ph_state;
 833};
 834
 835struct hfcpci_chip {
 836        int ph_state;
 837};
 838
 839struct hfcsx_chip {
 840        int ph_state;
 841};
 842
 843struct w6692_chip {
 844        int ph_state;
 845};
 846
 847struct amd7930_chip {
 848        u_char lmr1;
 849        u_char ph_state;
 850        u_char old_state;
 851        u_char flg_t3;
 852        unsigned int tx_xmtlen;
 853        struct timer_list timer3;
 854        void (*ph_command) (struct IsdnCardState *, u_char, char *);
 855        void (*setIrqMask) (struct IsdnCardState *, u_char);
 856};
 857
 858struct icc_chip {
 859        int ph_state;
 860        u_char *mon_tx;
 861        u_char *mon_rx;
 862        int mon_txp;
 863        int mon_txc;
 864        int mon_rxp;
 865        struct arcofi_msg *arcofi_list;
 866        struct timer_list arcofitimer;
 867        wait_queue_head_t arcofi_wait;
 868        u_char arcofi_bc;
 869        u_char arcofi_state;
 870        u_char mocr;
 871        u_char adf2;
 872};
 873
 874#define HW_IOM1                 0
 875#define HW_IPAC                 1
 876#define HW_ISAR                 2
 877#define HW_ARCOFI               3
 878#define FLG_TWO_DCHAN           4
 879#define FLG_L1_DBUSY            5
 880#define FLG_DBUSY_TIMER         6
 881#define FLG_LOCK_ATOMIC         7
 882#define FLG_ARCOFI_TIMER        8
 883#define FLG_ARCOFI_ERROR        9
 884#define FLG_HW_L1_UINT          10
 885
 886struct IsdnCardState {
 887        spinlock_t      lock;
 888        u_char          typ;
 889        u_char          subtyp;
 890        int             protocol;
 891        u_int           irq;
 892        u_long          irq_flags;
 893        u_long          HW_Flags;
 894        int             *busy_flag;
 895        int             chanlimit; /* limited number of B-chans to use */
 896        int             logecho; /* log echo if supported by card */
 897        union {
 898                struct elsa_hw elsa;
 899                struct teles0_hw teles0;
 900                struct teles3_hw teles3;
 901                struct avm_hw avm;
 902                struct ix1_hw ix1;
 903                struct diva_hw diva;
 904                struct asus_hw asus;
 905                struct hfc_hw hfc;
 906                struct sedl_hw sedl;
 907                struct spt_hw spt;
 908                struct mic_hw mic;
 909                struct njet_hw njet;
 910                struct hfcD_hw hfcD;
 911                struct hfcPCI_hw hfcpci;
 912                struct hfcSX_hw hfcsx;
 913                struct ix1_hw niccy;
 914                struct isurf_hw isurf;
 915                struct saphir_hw saphir;
 916                struct bkm_hw ax;
 917                struct gazel_hw gazel;
 918                struct w6692_hw w6692;
 919                struct hisax_d_if *hisax_d_if;
 920        } hw;
 921        int             myid;
 922        isdn_if         iif;
 923        spinlock_t      statlock;
 924        u_char          *status_buf;
 925        u_char          *status_read;
 926        u_char          *status_write;
 927        u_char          *status_end;
 928        u_char          (*readisac) (struct IsdnCardState *, u_char);
 929        void            (*writeisac) (struct IsdnCardState *, u_char, u_char);
 930        void            (*readisacfifo) (struct IsdnCardState *, u_char *, int);
 931        void            (*writeisacfifo) (struct IsdnCardState *, u_char *, int);
 932        u_char          (*BC_Read_Reg) (struct IsdnCardState *, int, u_char);
 933        void            (*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char);
 934        void            (*BC_Send_Data) (struct BCState *);
 935        int             (*cardmsg) (struct IsdnCardState *, int, void *);
 936        void            (*setstack_d) (struct PStack *, struct IsdnCardState *);
 937        void            (*DC_Close) (struct IsdnCardState *);
 938        irq_handler_t   irq_func;
 939        int             (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
 940        struct Channel  channel[2 + MAX_WAITING_CALLS];
 941        struct BCState  bcs[2 + MAX_WAITING_CALLS];
 942        struct PStack   *stlist;
 943        struct sk_buff_head rq, sq; /* D-channel queues */
 944        int             cardnr;
 945        char            *dlog;
 946        int             debug;
 947        union {
 948                struct isac_chip isac;
 949                struct hfcd_chip hfcd;
 950                struct hfcpci_chip hfcpci;
 951                struct hfcsx_chip hfcsx;
 952                struct w6692_chip w6692;
 953                struct amd7930_chip amd7930;
 954                struct icc_chip icc;
 955        } dc;
 956        u_char          *rcvbuf;
 957        int             rcvidx;
 958        struct sk_buff  *tx_skb;
 959        int             tx_cnt;
 960        u_long          event;
 961        struct work_struct tqueue;
 962        struct timer_list dbusytimer;
 963        unsigned int    irq_cnt;
 964#ifdef ERROR_STATISTIC
 965        int             err_crc;
 966        int             err_tx;
 967        int             err_rx;
 968#endif
 969};
 970
 971
 972#define schedule_event(s, ev)   do { test_and_set_bit(ev, &s->event); schedule_work(&s->tqueue); } while (0)
 973
 974#define  MON0_RX        1
 975#define  MON1_RX        2
 976#define  MON0_TX        4
 977#define  MON1_TX        8
 978
 979
 980#ifdef ISDN_CHIP_ISAC
 981#undef ISDN_CHIP_ISAC
 982#endif
 983
 984#ifdef  CONFIG_HISAX_16_0
 985#define  CARD_TELES0 1
 986#ifndef ISDN_CHIP_ISAC
 987#define ISDN_CHIP_ISAC 1
 988#endif
 989#else
 990#define  CARD_TELES0  0
 991#endif
 992
 993#ifdef  CONFIG_HISAX_16_3
 994#define  CARD_TELES3 1
 995#ifndef ISDN_CHIP_ISAC
 996#define ISDN_CHIP_ISAC 1
 997#endif
 998#else
 999#define  CARD_TELES3  0
1000#endif
1001
1002#ifdef  CONFIG_HISAX_TELESPCI
1003#define  CARD_TELESPCI 1
1004#ifndef ISDN_CHIP_ISAC
1005#define ISDN_CHIP_ISAC 1
1006#endif
1007#else
1008#define  CARD_TELESPCI  0
1009#endif
1010
1011#ifdef  CONFIG_HISAX_AVM_A1
1012#define  CARD_AVM_A1 1
1013#ifndef ISDN_CHIP_ISAC
1014#define ISDN_CHIP_ISAC 1
1015#endif
1016#else
1017#define  CARD_AVM_A1  0
1018#endif
1019
1020#ifdef  CONFIG_HISAX_AVM_A1_PCMCIA
1021#define  CARD_AVM_A1_PCMCIA 1
1022#ifndef ISDN_CHIP_ISAC
1023#define ISDN_CHIP_ISAC 1
1024#endif
1025#else
1026#define  CARD_AVM_A1_PCMCIA  0
1027#endif
1028
1029#ifdef  CONFIG_HISAX_FRITZPCI
1030#define  CARD_FRITZPCI 1
1031#ifndef ISDN_CHIP_ISAC
1032#define ISDN_CHIP_ISAC 1
1033#endif
1034#else
1035#define  CARD_FRITZPCI  0
1036#endif
1037
1038#ifdef  CONFIG_HISAX_ELSA
1039#define  CARD_ELSA 1
1040#ifndef ISDN_CHIP_ISAC
1041#define ISDN_CHIP_ISAC 1
1042#endif
1043#else
1044#define  CARD_ELSA  0
1045#endif
1046
1047#ifdef  CONFIG_HISAX_IX1MICROR2
1048#define CARD_IX1MICROR2 1
1049#ifndef ISDN_CHIP_ISAC
1050#define ISDN_CHIP_ISAC 1
1051#endif
1052#else
1053#define CARD_IX1MICROR2 0
1054#endif
1055
1056#ifdef CONFIG_HISAX_DIEHLDIVA
1057#define CARD_DIEHLDIVA 1
1058#ifndef ISDN_CHIP_ISAC
1059#define ISDN_CHIP_ISAC 1
1060#endif
1061#else
1062#define CARD_DIEHLDIVA 0
1063#endif
1064
1065#ifdef CONFIG_HISAX_ASUSCOM
1066#define CARD_ASUSCOM 1
1067#ifndef ISDN_CHIP_ISAC
1068#define ISDN_CHIP_ISAC 1
1069#endif
1070#else
1071#define CARD_ASUSCOM 0
1072#endif
1073
1074#ifdef CONFIG_HISAX_TELEINT
1075#define CARD_TELEINT 1
1076#ifndef ISDN_CHIP_ISAC
1077#define ISDN_CHIP_ISAC 1
1078#endif
1079#else
1080#define CARD_TELEINT 0
1081#endif
1082
1083#ifdef CONFIG_HISAX_SEDLBAUER
1084#define CARD_SEDLBAUER 1
1085#ifndef ISDN_CHIP_ISAC
1086#define ISDN_CHIP_ISAC 1
1087#endif
1088#else
1089#define CARD_SEDLBAUER 0
1090#endif
1091
1092#ifdef CONFIG_HISAX_SPORTSTER
1093#define CARD_SPORTSTER 1
1094#ifndef ISDN_CHIP_ISAC
1095#define ISDN_CHIP_ISAC 1
1096#endif
1097#else
1098#define CARD_SPORTSTER 0
1099#endif
1100
1101#ifdef CONFIG_HISAX_MIC
1102#define CARD_MIC 1
1103#ifndef ISDN_CHIP_ISAC
1104#define ISDN_CHIP_ISAC 1
1105#endif
1106#else
1107#define CARD_MIC 0
1108#endif
1109
1110#ifdef CONFIG_HISAX_NETJET
1111#define CARD_NETJET_S 1
1112#ifndef ISDN_CHIP_ISAC
1113#define ISDN_CHIP_ISAC 1
1114#endif
1115#else
1116#define CARD_NETJET_S 0
1117#endif
1118
1119#ifdef  CONFIG_HISAX_HFCS
1120#define  CARD_HFCS 1
1121#else
1122#define  CARD_HFCS 0
1123#endif
1124
1125#ifdef  CONFIG_HISAX_HFC_PCI
1126#define  CARD_HFC_PCI 1
1127#else
1128#define  CARD_HFC_PCI 0
1129#endif
1130
1131#ifdef  CONFIG_HISAX_HFC_SX
1132#define  CARD_HFC_SX 1
1133#else
1134#define  CARD_HFC_SX 0
1135#endif
1136
1137#ifdef  CONFIG_HISAX_NICCY
1138#define CARD_NICCY 1
1139#ifndef ISDN_CHIP_ISAC
1140#define ISDN_CHIP_ISAC 1
1141#endif
1142#else
1143#define CARD_NICCY 0
1144#endif
1145
1146#ifdef  CONFIG_HISAX_ISURF
1147#define CARD_ISURF 1
1148#ifndef ISDN_CHIP_ISAC
1149#define ISDN_CHIP_ISAC 1
1150#endif
1151#else
1152#define CARD_ISURF 0
1153#endif
1154
1155#ifdef  CONFIG_HISAX_S0BOX
1156#define CARD_S0BOX 1
1157#ifndef ISDN_CHIP_ISAC
1158#define ISDN_CHIP_ISAC 1
1159#endif
1160#else
1161#define CARD_S0BOX 0
1162#endif
1163
1164#ifdef  CONFIG_HISAX_HSTSAPHIR
1165#define CARD_HSTSAPHIR 1
1166#ifndef ISDN_CHIP_ISAC
1167#define ISDN_CHIP_ISAC 1
1168#endif
1169#else
1170#define CARD_HSTSAPHIR 0
1171#endif
1172
1173#ifdef  CONFIG_HISAX_BKM_A4T
1174#define CARD_BKM_A4T 1
1175#ifndef ISDN_CHIP_ISAC
1176#define ISDN_CHIP_ISAC 1
1177#endif
1178#else
1179#define CARD_BKM_A4T 0
1180#endif
1181
1182#ifdef  CONFIG_HISAX_SCT_QUADRO
1183#define CARD_SCT_QUADRO 1
1184#ifndef ISDN_CHIP_ISAC
1185#define ISDN_CHIP_ISAC 1
1186#endif
1187#else
1188#define CARD_SCT_QUADRO 0
1189#endif
1190
1191#ifdef  CONFIG_HISAX_GAZEL
1192#define  CARD_GAZEL 1
1193#ifndef ISDN_CHIP_ISAC
1194#define ISDN_CHIP_ISAC 1
1195#endif
1196#else
1197#define  CARD_GAZEL  0
1198#endif
1199
1200#ifdef  CONFIG_HISAX_W6692
1201#define CARD_W6692      1
1202#ifndef ISDN_CHIP_W6692
1203#define ISDN_CHIP_W6692 1
1204#endif
1205#else
1206#define CARD_W6692      0
1207#endif
1208
1209#ifdef CONFIG_HISAX_NETJET_U
1210#define CARD_NETJET_U 1
1211#ifndef ISDN_CHIP_ICC
1212#define ISDN_CHIP_ICC 1
1213#endif
1214#ifndef HISAX_UINTERFACE
1215#define HISAX_UINTERFACE 1
1216#endif
1217#else
1218#define CARD_NETJET_U 0
1219#endif
1220
1221#ifdef CONFIG_HISAX_ENTERNOW_PCI
1222#define CARD_FN_ENTERNOW_PCI 1
1223#else
1224#define CARD_FN_ENTERNOW_PCI 0
1225#endif
1226
1227#define TEI_PER_CARD 1
1228
1229/* L1 Debug */
1230#define L1_DEB_WARN             0x01
1231#define L1_DEB_INTSTAT          0x02
1232#define L1_DEB_ISAC             0x04
1233#define L1_DEB_ISAC_FIFO        0x08
1234#define L1_DEB_HSCX             0x10
1235#define L1_DEB_HSCX_FIFO        0x20
1236#define L1_DEB_LAPD             0x40
1237#define L1_DEB_IPAC             0x80
1238#define L1_DEB_RECEIVE_FRAME    0x100
1239#define L1_DEB_MONITOR          0x200
1240#define DEB_DLOG_HEX            0x400
1241#define DEB_DLOG_VERBOSE        0x800
1242
1243#define L2FRAME_DEBUG
1244
1245#ifdef L2FRAME_DEBUG
1246extern void Logl2Frame(struct IsdnCardState *cs, struct sk_buff *skb, char *buf, int dir);
1247#endif
1248
1249#include "hisax_cfg.h"
1250
1251void init_bcstate(struct IsdnCardState *cs, int bc);
1252
1253void setstack_HiSax(struct PStack *st, struct IsdnCardState *cs);
1254void HiSax_addlist(struct IsdnCardState *sp, struct PStack *st);
1255void HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st);
1256
1257void setstack_l1_B(struct PStack *st);
1258
1259void setstack_tei(struct PStack *st);
1260void setstack_manager(struct PStack *st);
1261
1262void setstack_isdnl2(struct PStack *st, char *debug_id);
1263void releasestack_isdnl2(struct PStack *st);
1264void setstack_transl2(struct PStack *st);
1265void releasestack_transl2(struct PStack *st);
1266void lli_writewakeup(struct PStack *st, int len);
1267
1268void setstack_l3dc(struct PStack *st, struct Channel *chanp);
1269void setstack_l3bc(struct PStack *st, struct Channel *chanp);
1270void releasestack_isdnl3(struct PStack *st);
1271
1272u_char *findie(u_char *p, int size, u_char ie, int wanted_set);
1273int getcallref(u_char *p);
1274int newcallref(void);
1275
1276int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
1277void FsmFree(struct Fsm *fsm);
1278int FsmEvent(struct FsmInst *fi, int event, void *arg);
1279void FsmChangeState(struct FsmInst *fi, int newstate);
1280void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
1281int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
1282                void *arg, int where);
1283void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
1284                     void *arg, int where);
1285void FsmDelTimer(struct FsmTimer *ft, int where);
1286int jiftime(char *s, long mark);
1287
1288int HiSax_command(isdn_ctrl *ic);
1289int HiSax_writebuf_skb(int id, int chan, int ack, struct sk_buff *skb);
1290__printf(3, 4)
1291void HiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, ...);
1292__printf(3, 0)
1293void VHiSax_putstatus(struct IsdnCardState *cs, char *head, char *fmt, va_list args);
1294void HiSax_reportcard(int cardnr, int sel);
1295int QuickHex(char *txt, u_char *p, int cnt);
1296void LogFrame(struct IsdnCardState *cs, u_char *p, int size);
1297void dlogframe(struct IsdnCardState *cs, struct sk_buff *skb, int dir);
1298void iecpy(u_char *dest, u_char *iestart, int ieoffset);
1299#endif  /* __KERNEL__ */
1300
1301/*
1302 * Busywait delay for `jiffs' jiffies
1303 */
1304#define HZDELAY(jiffs) do {                             \
1305                int tout = jiffs;                       \
1306                                                        \
1307                while (tout--) {                        \
1308                        int loops = USEC_PER_SEC / HZ;  \
1309                        while (loops--)                 \
1310                                udelay(1);              \
1311                }                                       \
1312        } while (0)
1313
1314int ll_run(struct IsdnCardState *cs, int addfeatures);
1315int CallcNew(void);
1316void CallcFree(void);
1317int CallcNewChan(struct IsdnCardState *cs);
1318void CallcFreeChan(struct IsdnCardState *cs);
1319int Isdnl1New(void);
1320void Isdnl1Free(void);
1321int Isdnl2New(void);
1322void Isdnl2Free(void);
1323int Isdnl3New(void);
1324void Isdnl3Free(void);
1325void init_tei(struct IsdnCardState *cs, int protocol);
1326void release_tei(struct IsdnCardState *cs);
1327char *HiSax_getrev(const char *revision);
1328int TeiNew(void);
1329void TeiFree(void);
1330
1331#ifdef CONFIG_PCI
1332
1333#include <linux/pci.h>
1334
1335/* adaptation wrapper for old usage
1336 * WARNING! This is unfit for use in a PCI hotplug environment,
1337 * as the returned PCI device can disappear at any moment in time.
1338 * Callers should be converted to use pci_get_device() instead.
1339 */
1340static inline struct pci_dev *hisax_find_pci_device(unsigned int vendor,
1341                                                    unsigned int device,
1342                                                    struct pci_dev *from)
1343{
1344        struct pci_dev *pdev;
1345
1346        pci_dev_get(from);
1347        pdev = pci_get_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
1348        pci_dev_put(pdev);
1349        return pdev;
1350}
1351
1352#endif
1353