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