Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 | /* $Id: hisax.h,v 1.13.2.11 1998/05/27 18:05:30 keil Exp $ * Basic declarations, defines and prototypes * * $Log: hisax.h,v $ * Revision 1.13.2.11 1998/05/27 18:05:30 keil * HiSax 3.0 * * Revision 1.13.2.10 1998/04/11 18:43:16 keil * New cards * * Revision 1.13.2.9 1998/03/07 23:15:21 tsbogend * made HiSax working on Linux/Alpha * * Revision 1.13.2.8 1998/02/11 14:23:10 keil * support for Dr Neuhaus Niccy PnP and PCI * * Revision 1.13.2.7 1998/02/09 11:21:22 keil * Sedlbauer PCMCIA support from Marcus Niemann * * Revision 1.13.2.6 1998/02/03 23:16:12 keil * german AOC * * Revision 1.13.2.5 1998/01/27 22:42:42 keil * changes for new teles 16.3c and dynalink ---> asuscom * * Revision 1.13.2.4 1998/01/11 22:55:17 keil * 16.3c support * * Revision 1.13.2.3 1997/11/27 12:31:59 keil * Working netjet driver * * Revision 1.13.2.2 1997/11/15 18:55:43 keil * New init, new cards * * Revision 1.13.2.1 1997/10/17 22:13:51 keil * update to last hisax version * * Revision 2.6 1997/09/11 17:25:51 keil * Add new cards * * Revision 2.5 1997/08/03 14:36:31 keil * Implement RESTART procedure * * Revision 2.4 1997/07/31 19:25:20 keil * PTP_DATA_LINK support * * Revision 2.3 1997/07/31 11:50:17 keil * ONE TEI and FIXED TEI handling * * Revision 2.2 1997/07/30 17:13:02 keil * more changes for 'One TEI per card' * * Revision 2.1 1997/07/27 21:45:13 keil * new main structures * * Revision 2.0 1997/06/26 11:06:27 keil * New card and L1 interface. * Eicon.Diehl Diva and Dynalink IS64PH support * * old changes removed KKe * */ #include <linux/config.h> #include <linux/module.h> #include <linux/version.h> #include <linux/errno.h> #include <linux/fs.h> #include <linux/major.h> #include <asm/segment.h> #include <asm/io.h> #include <linux/delay.h> #include <linux/kernel.h> #include <linux/signal.h> #include <linux/malloc.h> #include <linux/mm.h> #include <linux/mman.h> #include <linux/ioport.h> #include <linux/timer.h> #include <linux/wait.h> #include <linux/isdnif.h> #include <linux/tty.h> #include <linux/serial_reg.h> #define REQUEST 0 #define CONFIRM 1 #define INDICATION 2 #define RESPONSE 3 #define HW_ENABLE 0x0000 #define HW_RESET 0x0004 #define HW_POWERUP 0x0008 #define HW_ACTIVATE 0x0010 #define HW_DEACTIVATE 0x0018 #define HW_INFO2 0x0020 #define HW_INFO3 0x0030 #define HW_INFO4_P8 0x0040 #define HW_INFO4_P10 0x0048 #define HW_RSYNC 0x0060 #define HW_TESTLOOP 0x0070 #define CARD_RESET 0x00F0 #define CARD_SETIRQ 0x00F1 #define CARD_INIT 0x00F2 #define CARD_RELEASE 0x00F3 #define CARD_TEST 0x00F4 #define CARD_AUX_IND 0x00F5 #define PH_ACTIVATE 0x0100 #define PH_DEACTIVATE 0x0110 #define PH_DATA 0x0120 #define PH_PULL 0x0130 #define PH_TESTLOOP 0x0140 #define PH_PAUSE 0x0150 #define MPH_ACTIVATE 0x0180 #define MPH_DEACTIVATE 0x0190 #define MPH_INFORMATION 0x01A0 #define DL_ESTABLISH 0x0200 #define DL_RELEASE 0x0210 #define DL_DATA 0x0220 #define DL_FLUSH 0x0224 #define DL_UNIT_DATA 0x0230 #define MDL_ASSIGN 0x0280 #define MDL_REMOVE 0x0284 #define MDL_ERROR 0x0288 #define MDL_INFO_SETUP 0x02E0 #define MDL_INFO_CONN 0x02E4 #define MDL_INFO_REL 0x02E8 #define CC_SETUP 0x0300 #define CC_RESUME 0x0304 #define CC_MORE_INFO 0x0310 #define CC_IGNORE 0x0320 #define CC_REJECT 0x0324 #define CC_SETUP_COMPL 0x0330 #define CC_PROCEEDING 0x0340 #define CC_ALERTING 0x0344 #define CC_CONNECT 0x0350 #define CC_CHARGE 0x0354 #define CC_DISCONNECT 0x0360 #define CC_RELEASE 0x0368 #define CC_SUSPEND 0x0370 #define CC_T303 0x0383 #define CC_T304 0x0384 #define CC_T305 0x0385 #define CC_T308_1 0x0388 #define CC_T308_2 0x0389 #define CC_T310 0x0390 #define CC_T313 0x0393 #define CC_T318 0x0398 #define CC_T319 0x0399 #define CC_NOSETUP_RSP 0x03E0 #define CC_SETUP_ERR 0x03E1 #define CC_SUSPEND_ERR 0x03E2 #define CC_RESUME_ERR 0x03E3 #define CC_CONNECT_ERR 0x03E4 #define CC_RELEASE_ERR 0x03E5 #define CC_DLRL 0x03F0 #define CC_RESTART 0x03F4 #ifdef __KERNEL__ #define MAX_DFRAME_LEN 260 #define HSCX_BUFMAX 4096 #define MAX_DATA_SIZE (HSCX_BUFMAX - 4) #define MAX_DATA_MEM (HSCX_BUFMAX + 64) #define RAW_BUFMAX (((HSCX_BUFMAX*6)/5) + 5) #define MAX_HEADER_LEN 4 #define MAX_WINDOW 8 #define MAX_MON_FRAME 32 /* #define I4L_IRQ_FLAG SA_INTERRUPT */ #define I4L_IRQ_FLAG 0 /* * Statemachine */ struct FsmInst; typedef void (* FSMFNPTR)(struct FsmInst *, int, void *); struct Fsm { FSMFNPTR *jumpmatrix; int state_count, event_count; char **strEvent, **strState; }; struct FsmInst { struct Fsm *fsm; int state; int debug; void *userdata; int userint; void (*printdebug) (struct FsmInst *, char *); }; struct FsmNode { int state, event; void (*routine) (struct FsmInst *, int, void *); }; struct FsmTimer { struct FsmInst *fi; struct timer_list tl; int event; void *arg; }; struct L3Timer { struct l3_process *pc; struct timer_list tl; int event; }; #define FLG_L1_ACTIVATING 1 #define FLG_L1_ACTIVATED 2 #define FLG_L1_DEACTTIMER 3 #define FLG_L1_ACTTIMER 4 #define FLG_L1_T3RUN 5 #define FLG_L1_PULL_REQ 6 struct Layer1 { void *hardware; struct BCState *bcs; struct PStack **stlistp; int Flags; struct FsmInst l1m; struct FsmTimer timer; void (*l1l2) (struct PStack *, int, void *); void (*l1hw) (struct PStack *, int, void *); void (*l1tei) (struct PStack *, int, void *); int mode, bc; int delay; }; #define GROUP_TEI 127 #define TEI_SAPI 63 #define CTRL_SAPI 0 #define PACKET_NOACK 250 /* Layer2 Flags */ #define FLG_LAPB 0 #define FLG_LAPD 1 #define FLG_ORIG 2 #define FLG_MOD128 3 #define FLG_PEND_REL 4 #define FLG_L3_INIT 5 #define FLG_T200_RUN 6 #define FLG_ACK_PEND 7 #define FLG_REJEXC 8 #define FLG_OWN_BUSY 9 #define FLG_PEER_BUSY 10 #define FLG_DCHAN_BUSY 11 #define FLG_L1_ACTIV 12 #define FLG_ESTAB_PEND 13 #define FLG_PTP 14 #define FLG_FIXED_TEI 15 struct Layer2 { int tei; int sap; int maxlen; unsigned int flag; int vs, va, vr; int rc; int window; int sow; struct sk_buff *windowar[MAX_WINDOW]; struct sk_buff_head i_queue; struct sk_buff_head ui_queue; void (*l2l1) (struct PStack *, int, void *); void (*l2l3) (struct PStack *, int, void *); void (*l2tei) (struct PStack *, int, void *); struct FsmInst l2m; struct FsmTimer t200, t203; int T200, N200, T203; int debug; char debug_id[32]; }; struct Layer3 { void (*l3l4) (struct PStack *, int, void *); void (*l3l2) (struct PStack *, int, void *); struct FsmInst l3m; struct sk_buff_head squeue; struct l3_process *proc; struct l3_process *global; int N303; int debug; char debug_id[32]; }; struct LLInterface { void (*l4l3) (struct PStack *, int, void *); void *userdata; void (*l1writewakeup) (struct PStack *, int); void (*l2writewakeup) (struct PStack *, int); }; struct Management { int ri; struct FsmInst tei_m; struct FsmTimer t202; int T202, N202, debug; void (*layer) (struct PStack *, int, void *); }; struct Param { int cause; int loc; int bchannel; setup_parm setup; /* from isdnif.h numbers and Serviceindicator */ int chargeinfo; /* Charge Info - only for 1tr6 in * the moment */ int spv; /* SPV Flag */ }; struct PStack { struct PStack *next; struct Layer1 l1; struct Layer2 l2; struct Layer3 l3; struct LLInterface lli; struct Management ma; int protocol; /* EDSS1 or 1TR6 */ }; struct l3_process { int callref; int state; struct L3Timer timer; int N303; int debug; struct Param para; struct Channel *chan; struct PStack *st; struct l3_process *next; }; struct hscx_hw { int rcvidx; int count; /* Current skb sent count */ u_char *rcvbuf; /* B-Channel receive Buffer */ struct sk_buff *tx_skb; /* B-Channel transmit Buffer */ }; struct hfcB_hw { unsigned int *send; int f1; int f2; struct sk_buff *tx_skb; /* B-Channel transmit Buffer */ }; struct tiger_hw { struct sk_buff *tx_skb; /* B-Channel transmit Buffer */ u_int *send; u_int *s_irq; u_int *s_end; u_int *sendp; u_int *rec; int free; u_char *rcvbuf; u_char *sendbuf; u_char *sp; int sendcnt; u_int s_tot; u_int r_bitcnt; u_int r_tot; u_int r_err; u_int r_fcs; u_char r_state; u_char r_one; u_char r_val; u_char s_state; }; struct amd7930_hw { u_char *tx_buff; u_char *rv_buff; int rv_buff_in; int rv_buff_out; struct sk_buff *rv_skb; struct hdlc_state *hdlc_state; struct tq_struct tq_rcv; struct tq_struct tq_xmt; struct sk_buff *tx_skb; /* B-Channel transmit Buffer */ }; #define BC_FLG_INIT 1 #define BC_FLG_ACTIV 2 #define BC_FLG_BUSY 3 #define BC_FLG_NOFRAME 4 #define BC_FLG_HALF 5 #define BC_FLG_EMPTY 6 #define L1_MODE_NULL 0 #define L1_MODE_TRANS 1 #define L1_MODE_HDLC 2 #define L1_MODE_MODEM 7 struct BCState { int channel; int mode; int Flag; struct IsdnCardState *cs; int tx_cnt; /* B-Channel transmit counter */ struct sk_buff_head rqueue; /* B-Channel receive Queue */ struct sk_buff_head squeue; /* B-Channel send Queue */ struct PStack *st; struct tq_struct tqueue; int event; int (*BC_SetStack) (struct PStack *, struct BCState *); void (*BC_Close) (struct BCState *); union { struct hscx_hw hscx; struct hfcB_hw hfc; struct tiger_hw tiger; struct amd7930_hw amd7930; } hw; }; struct Channel { struct PStack *b_st, *d_st; struct IsdnCardState *cs; struct BCState *bcs; int chan; int incoming; struct FsmInst fi; struct FsmTimer drel_timer, dial_timer; int debug; int l2_protocol, l2_active_protocol; int data_open; struct l3_process *proc; setup_parm setup; /* from isdnif.h numbers and Serviceindicator */ int Flags; /* for remembering action done in l4 */ int leased; }; struct elsa_hw { unsigned int base; unsigned int cfg; unsigned int ctrl; unsigned int ale; unsigned int isac; unsigned int itac; unsigned int hscx; unsigned int trig; unsigned int timer; unsigned int counter; unsigned int status; struct timer_list tl; unsigned int MFlag; struct BCState *bcs; u_char *transbuf; u_char *rcvbuf; unsigned int transp; unsigned int rcvp; unsigned int transcnt; unsigned int rcvcnt; u_char IER; u_char FCR; u_char LCR; u_char MCR; u_char ctrl_reg; }; struct teles3_hw { unsigned int cfg_reg; signed int isac; signed int hscx[2]; signed int isacfifo; signed int hscxfifo[2]; }; struct teles0_hw { unsigned int cfg_reg; unsigned int membase; }; struct avm_hw { unsigned int cfg_reg; unsigned int isac; unsigned int hscx[2]; unsigned int isacfifo; unsigned int hscxfifo[2]; unsigned int counter; }; struct ix1_hw { unsigned int cfg_reg; unsigned int isac_ale; unsigned int isac; unsigned int hscx_ale; unsigned int hscx; }; struct diva_hw { unsigned int cfg_reg; unsigned int ctrl; unsigned int isac_adr; unsigned int isac; unsigned int hscx_adr; unsigned int hscx; unsigned int status; struct timer_list tl; u_char ctrl_reg; }; struct asus_hw { unsigned int cfg_reg; unsigned int adr; unsigned int isac; unsigned int hscx; unsigned int u7; unsigned int pots; }; struct hfc_hw { unsigned int addr; unsigned int fifosize; unsigned char cirm; unsigned char ctmt; unsigned char cip; u_char isac_spcr; struct timer_list timer; }; struct sedl_hw { unsigned int cfg_reg; unsigned int adr; unsigned int isac; unsigned int hscx; unsigned int reset_on; unsigned int reset_off; }; struct spt_hw { unsigned int cfg_reg; unsigned int isac; unsigned int hscx[2]; unsigned char res_irq; }; struct mic_hw { unsigned int cfg_reg; unsigned int adr; unsigned int isac; unsigned int hscx; }; struct njet_hw { unsigned int base; unsigned int isac; unsigned int auxa; unsigned char auxd; unsigned char dmactrl; unsigned char ctrl_reg; unsigned char irqmask0; unsigned char irqstat0; unsigned char last_is0; }; struct hfcD_hw { unsigned int addr; unsigned int bfifosize; unsigned int dfifosize; unsigned char cirm; unsigned char ctmt; unsigned char cip; unsigned char conn; unsigned char mst_m; unsigned char int_m1; unsigned char int_m2; unsigned char int_s1; unsigned char sctrl; unsigned char stat; unsigned char fifo; unsigned char f1; unsigned char f2; unsigned int *send; struct timer_list timer; }; #define HW_IOM1 0 #define HW_IPAC 1 #define FLG_TWO_DCHAN 4 #define FLG_L1_DBUSY 5 #define FLG_DBUSY_TIMER 6 #define FLG_LOCK_ATOMIC 7 #define HW_MON0_RX_END 8 #define HW_MON1_RX_END 9 #define HW_MON0_TX_END 10 #define HW_MON1_TX_END 11 struct IsdnCardState { unsigned char typ; unsigned char subtyp; int protocol; unsigned int irq; int HW_Flags; int *busy_flag; union { struct elsa_hw elsa; struct teles0_hw teles0; struct teles3_hw teles3; struct avm_hw avm; struct ix1_hw ix1; struct diva_hw diva; struct asus_hw asus; struct hfc_hw hfc; struct sedl_hw sedl; struct spt_hw spt; struct mic_hw mic; struct njet_hw njet; struct hfcD_hw hfcD; struct ix1_hw niccy; } hw; int myid; isdn_if iif; u_char *status_buf; u_char *status_read; u_char *status_write; u_char *status_end; u_char (*readisac) (struct IsdnCardState *, u_char); void (*writeisac) (struct IsdnCardState *, u_char, u_char); void (*readisacfifo) (struct IsdnCardState *, u_char *, int); void (*writeisacfifo) (struct IsdnCardState *, u_char *, int); u_char (*BC_Read_Reg) (struct IsdnCardState *, int, u_char); void (*BC_Write_Reg) (struct IsdnCardState *, int, u_char, u_char); void (*BC_Send_Data) (struct BCState *); int (*cardmsg) (struct IsdnCardState *, int, void *); struct Channel channel[2]; struct BCState bcs[2]; struct PStack *stlist; u_char *rcvbuf; int rcvidx; struct sk_buff *tx_skb; int tx_cnt; int event; struct tq_struct tqueue; struct timer_list dbusytimer; struct sk_buff_head rq, sq; /* D-channel queues */ int ph_state; int cardnr; int dlogflag; char *dlogspace; int debug; u_char *mon_tx; u_char *mon_rx; int mon_txp; int mon_txc; int mon_rxp; u_char mocr; void (*setstack_d) (struct PStack *, struct IsdnCardState *); }; #define MON0_RX 1 #define MON1_RX 2 #define MON0_TX 4 #define MON1_TX 8 #define HISAX_MAX_CARDS 8 #define ISDN_CTYPE_16_0 1 #define ISDN_CTYPE_8_0 2 #define ISDN_CTYPE_16_3 3 #define ISDN_CTYPE_PNP 4 #define ISDN_CTYPE_A1 5 #define ISDN_CTYPE_ELSA 6 #define ISDN_CTYPE_ELSA_PNP 7 #define ISDN_CTYPE_TELESPCMCIA 8 #define ISDN_CTYPE_IX1MICROR2 9 #define ISDN_CTYPE_ELSA_PCMCIA 10 #define ISDN_CTYPE_DIEHLDIVA 11 #define ISDN_CTYPE_ASUSCOM 12 #define ISDN_CTYPE_TELEINT 13 #define ISDN_CTYPE_TELES3C 14 #define ISDN_CTYPE_SEDLBAUER 15 #define ISDN_CTYPE_SPORTSTER 16 #define ISDN_CTYPE_MIC 17 #define ISDN_CTYPE_ELSA_PCI 18 #define ISDN_CTYPE_COMPAQ_ISA 19 #define ISDN_CTYPE_NETJET 20 #define ISDN_CTYPE_TELESPCI 21 #define ISDN_CTYPE_SEDLBAUER_PCMCIA 22 #define ISDN_CTYPE_AMD7930 23 #define ISDN_CTYPE_NICCY 24 #define ISDN_CTYPE_S0BOX 25 #define ISDN_CTYPE_COUNT 25 #ifdef ISDN_CHIP_ISAC #undef ISDN_CHIP_ISAC #endif #ifndef __initfunc #define __initfunc(__arginit) __arginit #endif #ifndef __initdata #define __initdata #endif #define HISAX_INITFUNC(__arginit) __initfunc(__arginit) #define HISAX_INITDATA __initdata #ifdef CONFIG_HISAX_16_0 #define CARD_TELES0 (1<< ISDN_CTYPE_16_0) | (1<< ISDN_CTYPE_8_0) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_TELES0 0 #endif #ifdef CONFIG_HISAX_16_3 #define CARD_TELES3 (1<< ISDN_CTYPE_16_3) | (1<< ISDN_CTYPE_PNP) | \ (1<< ISDN_CTYPE_TELESPCMCIA) | (1<< ISDN_CTYPE_COMPAQ_ISA) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_TELES3 0 #endif #ifdef CONFIG_HISAX_TELESPCI #define CARD_TELESPCI (1<< ISDN_CTYPE_TELESPCI) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_TELESPCI 0 #endif #ifdef CONFIG_HISAX_AVM_A1 #define CARD_AVM_A1 (1<< ISDN_CTYPE_A1) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_AVM_A1 0 #endif #ifdef CONFIG_HISAX_ELSA #define CARD_ELSA (1<< ISDN_CTYPE_ELSA) | (1<< ISDN_CTYPE_ELSA_PNP) | \ (1<< ISDN_CTYPE_ELSA_PCMCIA) | (1<< ISDN_CTYPE_ELSA_PCI) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #undef HISAX_INITFUNC #define HISAX_INITFUNC(__arginit) __arginit #undef HISAX_INITDATA #define HISAX_INITDATA #else #define CARD_ELSA 0 #endif #ifdef CONFIG_HISAX_IX1MICROR2 #define CARD_IX1MICROR2 (1 << ISDN_CTYPE_IX1MICROR2) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_IX1MICROR2 0 #endif #ifdef CONFIG_HISAX_DIEHLDIVA #define CARD_DIEHLDIVA (1 << ISDN_CTYPE_DIEHLDIVA) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_DIEHLDIVA 0 #endif #ifdef CONFIG_HISAX_ASUSCOM #define CARD_ASUSCOM (1 << ISDN_CTYPE_ASUSCOM) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_ASUSCOM 0 #endif #ifdef CONFIG_HISAX_TELEINT #define CARD_TELEINT (1 << ISDN_CTYPE_TELEINT) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_TELEINT 0 #endif #ifdef CONFIG_HISAX_SEDLBAUER #define CARD_SEDLBAUER (1 << ISDN_CTYPE_SEDLBAUER) | (1 << ISDN_CTYPE_SEDLBAUER_PCMCIA) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_SEDLBAUER 0 #endif #ifdef CONFIG_HISAX_SPORTSTER #define CARD_SPORTSTER (1 << ISDN_CTYPE_SPORTSTER) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_SPORTSTER 0 #endif #ifdef CONFIG_HISAX_MIC #define CARD_MIC (1 << ISDN_CTYPE_MIC) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_MIC 0 #endif #ifdef CONFIG_HISAX_NETJET #define CARD_NETJET (1 << ISDN_CTYPE_NETJET) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_NETJET 0 #endif #ifdef CONFIG_HISAX_TELES3C #define CARD_TELES3C (1<< ISDN_CTYPE_TELES3C) #else #define CARD_TELES3C 0 #endif #ifdef CONFIG_HISAX_AMD7930 #define CARD_AMD7930 (1 << ISDN_CTYPE_AMD7930) #else #define CARD_AMD7930 0 #endif #ifdef CONFIG_HISAX_NICCY #define CARD_NICCY (1 << ISDN_CTYPE_NICCY) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_NICCY 0 #endif #ifdef CONFIG_HISAX_S0BOX #define CARD_S0BOX (1 << ISDN_CTYPE_S0BOX) #ifndef ISDN_CHIP_ISAC #define ISDN_CHIP_ISAC 1 #endif #else #define CARD_S0BOX 0 #endif #define SUPORTED_CARDS (CARD_TELES0 | CARD_TELES3 | CARD_AVM_A1 | CARD_ELSA \ | CARD_IX1MICROR2 | CARD_DIEHLDIVA | CARD_ASUSCOM \ | CARD_TELEINT | CARD_SEDLBAUER | CARD_SPORTSTER \ | CARD_MIC | CARD_NETJET | CARD_TELES3C | CARD_AMD7930 \ | CARD_NICCY | CARD_S0BOX | CARD_TELESPCI) #define TEI_PER_CARD 0 #ifdef CONFIG_HISAX_1TR6 #undef TEI_PER_CARD #define TEI_PER_CARD 1 #endif #ifdef CONFIG_HISAX_EURO #undef TEI_PER_CARD #define TEI_PER_CARD 1 #define HISAX_EURO_SENDCOMPLETE 1 #ifdef CONFIG_HISAX_ML #undef HISAX_EURO_SENDCOMPLETE #endif #undef HISAX_DE_AOC #ifdef CONFIG_DE_AOC #define HISAX_DE_AOC 1 #endif #endif struct IsdnCard { int typ; int protocol; /* EDSS1 or 1TR6 */ unsigned int para[4]; struct IsdnCardState *cs; }; int HiSax_inithardware(int *); void HiSax_closecard(int cardnr); void setstack_HiSax(struct PStack *st, struct IsdnCardState *cs); unsigned int random_ri(void); void HiSax_addlist(struct IsdnCardState *sp, struct PStack *st); void HiSax_rmlist(struct IsdnCardState *sp, struct PStack *st); void setstack_l1_B(struct PStack *st); void setstack_tei(struct PStack *st); void setstack_manager(struct PStack *st); void setstack_isdnl2(struct PStack *st, char *debug_id); void releasestack_isdnl2(struct PStack *st); void setstack_transl2(struct PStack *st); void releasestack_transl2(struct PStack *st); void setstack_l3dc(struct PStack *st, struct Channel *chanp); void setstack_l3bc(struct PStack *st, struct Channel *chanp); void releasestack_isdnl3(struct PStack *st); u_char *findie(u_char * p, int size, u_char ie, int wanted_set); int getcallref(u_char * p); int newcallref(void); void FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount); void FsmFree(struct Fsm *fsm); int FsmEvent(struct FsmInst *fi, int event, void *arg); void FsmChangeState(struct FsmInst *fi, int newstate); void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft); int FsmAddTimer(struct FsmTimer *ft, int millisec, int event, void *arg, int where); void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event, void *arg, int where); void FsmDelTimer(struct FsmTimer *ft, int where); void jiftime(char *s, long mark); int HiSax_command(isdn_ctrl * ic); int HiSax_writebuf_skb(int id, int chan, struct sk_buff *skb); void HiSax_putstatus(struct IsdnCardState *csta, char *buf); void HiSax_reportcard(int cardnr); int QuickHex(char *txt, u_char * p, int cnt); void LogFrame(struct IsdnCardState *sp, u_char * p, int size); void dlogframe(struct IsdnCardState *sp, u_char * p, int size, char *comment); void iecpy(u_char * dest, u_char * iestart, int ieoffset); int discard_queue(struct sk_buff_head *q); #ifdef ISDN_CHIP_ISAC void setstack_isac(struct PStack *st, struct IsdnCardState *cs); #endif /* ISDN_CHIP_ISAC */ #endif /* __KERNEL__ */ #define HZDELAY(jiffs) {int tout = jiffs; while (tout--) udelay(1000000/HZ);} int ll_run(struct IsdnCardState *csta); void ll_stop(struct IsdnCardState *csta); void CallcNew(void); void CallcFree(void); int CallcNewChan(struct IsdnCardState *csta); void CallcFreeChan(struct IsdnCardState *csta); void Isdnl1New(void); void Isdnl1Free(void); void Isdnl2New(void); void Isdnl2Free(void); void Isdnl3New(void); void Isdnl3Free(void); void init_tei(struct IsdnCardState *sp, int protocol); void release_tei(struct IsdnCardState *sp); char *HiSax_getrev(const char *revision); void TeiNew(void); void TeiFree(void); |