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