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 | /* $Id: eicon.h,v 1.19 2000/01/23 21:21:23 armin Exp $ * * ISDN low-level module for Eicon active ISDN-Cards. * * Copyright 1998 by Fritz Elfert (fritz@isdn4linux.de) * Copyright 1998-2000 by Armin Schindler (mac@melware.de) * Copyright 1999,2000 Cytronics & Melware (info@melware.de) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: eicon.h,v $ * Revision 1.19 2000/01/23 21:21:23 armin * Added new trace capability and some updates. * DIVA Server BRI now supports data for ISDNLOG. * * Revision 1.18 1999/11/25 11:43:27 armin * Fixed statectrl and connect message. * X.75 fix and HDLC/transparent with autoconnect. * Minor cleanup. * * Revision 1.17 1999/10/26 21:15:33 armin * using define for checking phone number len to avoid buffer overflow. * * Revision 1.16 1999/10/08 22:09:33 armin * Some fixes of cards interface handling. * Bugfix of NULL pointer occurence. * Changed a few log outputs. * * Revision 1.15 1999/09/26 14:17:53 armin * Improved debug and log via readstat() * * Revision 1.14 1999/09/08 20:17:31 armin * Added microchannel patch from Erik Weber. * * Revision 1.13 1999/09/06 07:29:35 fritz * Changed my mail-address. * * Revision 1.12 1999/09/04 06:20:05 keil * Changes from kernel set_current_state() * * Revision 1.11 1999/08/29 17:23:44 armin * New setup compat. * Bugfix if compile as not module. * * Revision 1.10 1999/08/22 20:26:41 calle * backported changes from kernel 2.3.14: * - several #include "config.h" gone, others come. * - "struct device" changed to "struct net_device" in 2.3.14, added a * define in isdn_compat.h for older kernel versions. * * Revision 1.9 1999/08/18 20:16:57 armin * Added XLOG function for all cards. * Bugfix of alloc_skb NULL pointer. * * Revision 1.8 1999/07/25 15:12:01 armin * fix of some debug logs. * enabled ISA-cards option. * * Revision 1.7 1999/07/11 17:16:23 armin * Bugfixes in queue handling. * Added DSP-DTMF decoder functions. * Reorganized ack_handler. * * Revision 1.6 1999/06/09 19:31:24 armin * Wrong PLX size for request_region() corrected. * Added first MCA code from Erik Weber. * * Revision 1.5 1999/03/29 11:19:41 armin * I/O stuff now in seperate file (eicon_io.c) * Old ISA type cards (S,SX,SCOM,Quadro,S2M) implemented. * * Revision 1.4 1999/03/02 12:37:42 armin * Added some important checks. * Analog Modem with DSP. * Channels will be added to Link-Level after loading firmware. * * Revision 1.3 1999/01/24 20:14:07 armin * Changed and added debug stuff. * Better data sending. (still problems with tty's flip buffer) * * Revision 1.2 1999/01/10 18:46:04 armin * Bug with wrong values in HLC fixed. * Bytes to send are counted and limited now. * * Revision 1.1 1999/01/01 18:09:41 armin * First checkin of new eicon driver. * DIVA-Server BRI/PCI and PRI/PCI are supported. * Old diehl code is obsolete. * * */ #ifndef eicon_h #define eicon_h #define EICON_IOCTL_SETMMIO 0 #define EICON_IOCTL_GETMMIO 1 #define EICON_IOCTL_SETIRQ 2 #define EICON_IOCTL_GETIRQ 3 #define EICON_IOCTL_LOADBOOT 4 #define EICON_IOCTL_ADDCARD 5 #define EICON_IOCTL_GETTYPE 6 #define EICON_IOCTL_LOADPCI 7 #define EICON_IOCTL_LOADISA 8 #define EICON_IOCTL_GETVER 9 #define EICON_IOCTL_GETXLOG 10 #define EICON_IOCTL_MANIF 90 #define EICON_IOCTL_FREEIT 97 #define EICON_IOCTL_TEST 98 #define EICON_IOCTL_DEBUGVAR 99 /* Bus types */ #define EICON_BUS_ISA 1 #define EICON_BUS_MCA 2 #define EICON_BUS_PCI 3 /* Constants for describing Card-Type */ #define EICON_CTYPE_S 0 #define EICON_CTYPE_SX 1 #define EICON_CTYPE_SCOM 2 #define EICON_CTYPE_QUADRO 3 #define EICON_CTYPE_S2M 4 #define EICON_CTYPE_MAESTRA 5 #define EICON_CTYPE_MAESTRAQ 6 #define EICON_CTYPE_MAESTRAQ_U 7 #define EICON_CTYPE_MAESTRAP 8 #define EICON_CTYPE_ISABRI 0x10 #define EICON_CTYPE_ISAPRI 0x20 #define EICON_CTYPE_MASK 0x0f #define EICON_CTYPE_QUADRO_NR(n) (n<<4) #define MAX_HEADER_LEN 10 #define MAX_STATUS_BUFFER 150 /* Struct for adding new cards */ typedef struct eicon_cdef { int membase; int irq; char id[10]; } eicon_cdef; #define EICON_ISA_BOOT_MEMCHK 1 #define EICON_ISA_BOOT_NORMAL 2 /* Struct for downloading protocol via ioctl for ISA cards */ /* same struct for downloading protocol via ioctl for MCA cards */ typedef struct { /* start-up parameters */ unsigned char tei; unsigned char nt2; unsigned char skip1; unsigned char WatchDog; unsigned char Permanent; unsigned char XInterface; unsigned char StableL2; unsigned char NoOrderCheck; unsigned char HandsetType; unsigned char skip2; unsigned char LowChannel; unsigned char ProtVersion; unsigned char Crc4; unsigned char Loopback; unsigned char oad[32]; unsigned char osa[32]; unsigned char spid[32]; unsigned char boot_opt; unsigned long bootstrap_len; unsigned long firmware_len; unsigned char code[1]; /* Rest (bootstrap- and firmware code) will be allocated */ } eicon_isa_codebuf; /* Struct for downloading protocol via ioctl for PCI cards */ typedef struct { /* start-up parameters */ unsigned char tei; unsigned char nt2; unsigned char WatchDog; unsigned char Permanent; unsigned char XInterface; unsigned char StableL2; unsigned char NoOrderCheck; unsigned char HandsetType; unsigned char LowChannel; unsigned char ProtVersion; unsigned char Crc4; unsigned char NoHscx30Mode; /* switch PRI into No HSCX30 test mode */ unsigned char Loopback; /* switch card into Loopback mode */ struct q931_link_s { unsigned char oad[32]; unsigned char osa[32]; unsigned char spid[32]; } l[2]; unsigned long protocol_len; unsigned int dsp_code_num; unsigned long dsp_code_len[9]; unsigned char code[1]; /* Rest (protocol- and dsp code) will be allocated */ } eicon_pci_codebuf; /* Data for downloading protocol via ioctl */ typedef union { eicon_isa_codebuf isa; eicon_isa_codebuf mca; eicon_pci_codebuf pci; } eicon_codebuf; /* Data for Management interface */ typedef struct { int count; int pos; int length[50]; unsigned char data[700]; } eicon_manifbuf; #ifdef __KERNEL__ /* Kernel includes */ #include <linux/config.h> #include <linux/sched.h> #include <linux/string.h> #include <linux/tqueue.h> #include <linux/interrupt.h> #include <linux/skbuff.h> #include <linux/errno.h> #include <linux/fs.h> #include <linux/major.h> #include <asm/segment.h> #include <asm/io.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/delay.h> #include <linux/ctype.h> #include <linux/isdn.h> #include <linux/isdnif.h> typedef struct { __u16 length __attribute__ ((packed)); /* length of data/parameter field */ __u8 P[1]; /* data/parameter field */ } eicon_PBUFFER; #include "eicon_isa.h" /* Macro for delay via schedule() */ #define SLEEP(j) { \ set_current_state(TASK_UNINTERRUPTIBLE); \ schedule_timeout(j); \ } #endif /* KERNEL */ #define DIVAS_SHARED_OFFSET (0x1000) #define MIPS_BUFFER_SZ 128 #define MIPS_MAINT_OFFS 0xff00 #define XLOG_ERR_CARD_NUM (13) #define XLOG_ERR_DONE (14) #define XLOG_ERR_CMD (15) #define XLOG_ERR_TIMEOUT (16) #define XLOG_ERR_CARD_STATE (17) #define XLOG_ERR_UNKNOWN (18) #define XLOG_OK (0) #define TRACE_OK (1) typedef struct { __u8 Id __attribute__ ((packed)); __u8 uX __attribute__ ((packed)); __u8 listen __attribute__ ((packed)); __u8 active __attribute__ ((packed)); __u8 sin[3] __attribute__ ((packed)); __u8 bc[6] __attribute__ ((packed)); __u8 llc[6] __attribute__ ((packed)); __u8 hlc[6] __attribute__ ((packed)); __u8 oad[20] __attribute__ ((packed)); }DSigStruc; typedef struct { __u32 cx_b1 __attribute__ ((packed)); __u32 cx_b2 __attribute__ ((packed)); __u32 cr_b1 __attribute__ ((packed)); __u32 cr_b2 __attribute__ ((packed)); __u32 px_b1 __attribute__ ((packed)); __u32 px_b2 __attribute__ ((packed)); __u32 pr_b1 __attribute__ ((packed)); __u32 pr_b2 __attribute__ ((packed)); __u16 er_b1 __attribute__ ((packed)); __u16 er_b2 __attribute__ ((packed)); }BL1Struc; typedef struct { __u32 XTotal __attribute__ ((packed)); __u32 RTotal __attribute__ ((packed)); __u16 XError __attribute__ ((packed)); __u16 RError __attribute__ ((packed)); }L2Struc; typedef struct { __u16 free_n; }OSStruc; typedef union { DSigStruc DSigStats; BL1Struc BL1Stats; L2Struc L2Stats; OSStruc OSStats; __u8 b[MIPS_BUFFER_SZ]; __u16 w[MIPS_BUFFER_SZ>>1]; __u16 l[MIPS_BUFFER_SZ>>2]; /* word is wrong, do not use! Use 'd' instead. */ __u32 d[MIPS_BUFFER_SZ>>2]; } MIPS_BUFFER; typedef struct { __u8 req __attribute__ ((packed)); __u8 rc __attribute__ ((packed)); __u8 reserved[2] __attribute__ ((packed)); /* R3000 alignment ... */ __u8 *mem __attribute__ ((packed)); __u16 length __attribute__ ((packed)); /* used to be short */ __u16 port __attribute__ ((packed)); __u8 fill[4] __attribute__ ((packed)); /* data at offset 16 */ MIPS_BUFFER data __attribute__ ((packed)); } mi_pc_maint_t; typedef struct { __u16 command; mi_pc_maint_t pcm; }xlogreq_t; typedef struct{ __u16 code __attribute__ ((packed)); /* used to be short */ __u16 timeh __attribute__ ((packed)); __u16 timel __attribute__ ((packed)); char buffer[MIPS_BUFFER_SZ - 6]; }xlog_entry_t; #define DSP_COMBIFILE_FORMAT_IDENTIFICATION_SIZE 48 #define DSP_COMBIFILE_FORMAT_VERSION_BCD 0x0100 #define DSP_FILE_FORMAT_IDENTIFICATION_SIZE 48 #define DSP_FILE_FORMAT_VERSION_BCD 0x0100 typedef struct tag_dsp_combifile_header { char format_identification[DSP_COMBIFILE_FORMAT_IDENTIFICATION_SIZE] __attribute__ ((packed)); __u16 format_version_bcd __attribute__ ((packed)); __u16 header_size __attribute__ ((packed)); __u16 combifile_description_size __attribute__ ((packed)); __u16 directory_entries __attribute__ ((packed)); __u16 directory_size __attribute__ ((packed)); __u16 download_count __attribute__ ((packed)); __u16 usage_mask_size __attribute__ ((packed)); } t_dsp_combifile_header; typedef struct tag_dsp_combifile_directory_entry { __u16 card_type_number __attribute__ ((packed)); __u16 file_set_number __attribute__ ((packed)); } t_dsp_combifile_directory_entry; typedef struct tag_dsp_file_header { char format_identification[DSP_FILE_FORMAT_IDENTIFICATION_SIZE] __attribute__ ((packed)); __u16 format_version_bcd __attribute__ ((packed)); __u16 download_id __attribute__ ((packed)); __u16 download_flags __attribute__ ((packed)); __u16 required_processing_power __attribute__ ((packed)); __u16 interface_channel_count __attribute__ ((packed)); __u16 header_size __attribute__ ((packed)); __u16 download_description_size __attribute__ ((packed)); __u16 memory_block_table_size __attribute__ ((packed)); __u16 memory_block_count __attribute__ ((packed)); __u16 segment_table_size __attribute__ ((packed)); __u16 segment_count __attribute__ ((packed)); __u16 symbol_table_size __attribute__ ((packed)); __u16 symbol_count __attribute__ ((packed)); __u16 total_data_size_dm __attribute__ ((packed)); __u16 data_block_count_dm __attribute__ ((packed)); __u16 total_data_size_pm __attribute__ ((packed)); __u16 data_block_count_pm __attribute__ ((packed)); } t_dsp_file_header; typedef struct tag_dsp_memory_block_desc { __u16 alias_memory_block; __u16 memory_type; __u16 address; __u16 size; /* DSP words */ } t_dsp_memory_block_desc; typedef struct tag_dsp_segment_desc { __u16 memory_block; __u16 attributes; __u16 base; __u16 size; __u16 alignment; /* ==0 -> no other legal start address than base */ } t_dsp_segment_desc; typedef struct tag_dsp_symbol_desc { __u16 symbol_id; __u16 segment; __u16 offset; __u16 size; /* DSP words */ } t_dsp_symbol_desc; typedef struct tag_dsp_data_block_header { __u16 attributes; __u16 segment; __u16 offset; __u16 size; /* DSP words */ } t_dsp_data_block_header; typedef struct tag_dsp_download_desc /* be sure to keep native alignment for MAESTRA's */ { __u16 download_id; __u16 download_flags; __u16 required_processing_power; __u16 interface_channel_count; __u16 excess_header_size; __u16 memory_block_count; __u16 segment_count; __u16 symbol_count; __u16 data_block_count_dm; __u16 data_block_count_pm; __u8 * p_excess_header_data __attribute__ ((packed)); char * p_download_description __attribute__ ((packed)); t_dsp_memory_block_desc *p_memory_block_table __attribute__ ((packed)); t_dsp_segment_desc *p_segment_table __attribute__ ((packed)); t_dsp_symbol_desc *p_symbol_table __attribute__ ((packed)); __u16 * p_data_blocks_dm __attribute__ ((packed)); __u16 * p_data_blocks_pm __attribute__ ((packed)); } t_dsp_download_desc; #ifdef __KERNEL__ typedef struct { __u8 Req; /* pending request */ __u8 Rc; /* return code received */ __u8 Ind; /* indication received */ __u8 ReqCh; /* channel of current Req */ __u8 RcCh; /* channel of current Rc */ __u8 IndCh; /* channel of current Ind */ __u8 D3Id; /* ID used by this entity */ __u8 B2Id; /* ID used by this entity */ __u8 GlobalId; /* reserved field */ __u8 XNum; /* number of X-buffers */ __u8 RNum; /* number of R-buffers */ struct sk_buff_head X; /* X-buffer queue */ struct sk_buff_head R; /* R-buffer queue */ __u8 RNR; /* receive not ready flag */ __u8 complete; /* receive complete status */ __u8 busy; /* busy flag */ __u16 ref; /* saved reference */ } entity; #define FAX_MAX_SCANLINE 256 typedef struct { __u8 PrevObject; __u8 NextObject; __u8 abLine[FAX_MAX_SCANLINE]; __u8 abFrame[FAX_MAX_SCANLINE]; unsigned int LineLen; unsigned int LineDataLen; __u32 LineData; unsigned int NullBytesPos; __u8 NullByteExist; int PageCount; __u8 Dle; __u8 Eop; } eicon_ch_fax_buf; typedef struct { int No; /* Channel Number */ unsigned short fsm_state; /* Current D-Channel state */ unsigned short statectrl; /* State controling bits */ unsigned short eazmask; /* EAZ-Mask for this Channel */ int queued; /* User-Data Bytes in TX queue */ int waitq; /* User-Data Bytes in wait queue */ int waitpq; /* User-Data Bytes in packet queue */ struct sk_buff *tskb1; /* temp skb 1 */ struct sk_buff *tskb2; /* temp skb 2 */ unsigned char l2prot; /* Layer 2 protocol */ unsigned char l3prot; /* Layer 3 protocol */ #ifdef CONFIG_ISDN_TTY_FAX T30_s *fax; /* pointer to fax data in LL */ eicon_ch_fax_buf fax2; /* fax related struct */ #endif entity e; /* Entity */ char cpn[32]; /* remember cpn */ char oad[32]; /* remember oad */ char dsa[32]; /* remember dsa */ char osa[32]; /* remember osa */ unsigned char cause[2]; /* Last Cause */ unsigned char si1; unsigned char si2; unsigned char plan; unsigned char screen; } eicon_chan; typedef struct { eicon_chan *ptr; } eicon_chan_ptr; #include "eicon_pci.h" #define EICON_FLAGS_RUNNING 1 /* Cards driver activated */ #define EICON_FLAGS_PVALID 2 /* Cards port is valid */ #define EICON_FLAGS_IVALID 4 /* Cards irq is valid */ #define EICON_FLAGS_MVALID 8 /* Cards membase is valid */ #define EICON_FLAGS_LOADED 8 /* Firmware loaded */ #define EICON_BCH 2 /* # of channels per card */ /* D-Channel states */ #define EICON_STATE_NULL 0 #define EICON_STATE_ICALL 1 #define EICON_STATE_OCALL 2 #define EICON_STATE_IWAIT 3 #define EICON_STATE_OWAIT 4 #define EICON_STATE_IBWAIT 5 #define EICON_STATE_OBWAIT 6 #define EICON_STATE_BWAIT 7 #define EICON_STATE_BHWAIT 8 #define EICON_STATE_BHWAIT2 9 #define EICON_STATE_DHWAIT 10 #define EICON_STATE_DHWAIT2 11 #define EICON_STATE_BSETUP 12 #define EICON_STATE_ACTIVE 13 #define EICON_STATE_ICALLW 14 #define EICON_STATE_LISTEN 15 #define EICON_STATE_WMCONN 16 #define EICON_MAX_QUEUE 2138 #define EICON_LOCK_TX 0 #define EICON_LOCK_RX 1 typedef union { eicon_isa_card isa; eicon_pci_card pci; eicon_isa_card mca; } eicon_hwif; typedef struct { __u8 ret; __u8 id; __u8 ch; } eicon_ack; typedef struct { __u8 code; __u8 id; __u8 ch; } eicon_req; typedef struct { __u8 ret; __u8 id; __u8 ch; __u8 more; } eicon_indhdr; typedef struct msn_entry { char eaz; char msn[16]; struct msn_entry * next; } msn_entry; /* * Per card driver data */ typedef struct eicon_card { eicon_hwif hwif; /* Hardware dependant interface */ u_char ptype; /* Protocol type (1TR6 or Euro) */ u_char bus; /* Bustype (ISA, MCA, PCI) */ u_char type; /* Cardtype (EICON_CTYPE_...) */ struct eicon_card *qnext; /* Pointer to next quadro adapter */ int Feature; /* Protocol Feature Value */ struct eicon_card *next; /* Pointer to next device struct */ int myid; /* Driver-Nr. assigned by linklevel */ unsigned long flags; /* Statusflags */ struct sk_buff_head rcvq; /* Receive-Message queue */ struct sk_buff_head sndq; /* Send-Message queue */ struct sk_buff_head rackq; /* Req-Ack-Message queue */ struct sk_buff_head sackq; /* Data-Ack-Message queue */ struct sk_buff_head statq; /* Status-Message queue */ int statq_entries; struct tq_struct snd_tq; /* Task struct for xmit bh */ struct tq_struct rcv_tq; /* Task struct for rcv bh */ struct tq_struct ack_tq; /* Task struct for ack bh */ msn_entry *msn_list; eicon_chan* IdTable[256]; /* Table to find entity */ __u16 ref_in; __u16 ref_out; int nchannels; /* Number of B-Channels */ int ReadyInt; /* Ready Interrupt */ eicon_chan *bch; /* B-Channel status/control */ char status_buf[256]; /* Buffer for status messages */ char *status_buf_read; char *status_buf_write; char *status_buf_end; isdn_if interface; /* Interface to upper layer */ char regname[35]; /* Name used for request_region */ #ifdef CONFIG_MCA int mca_slot; /* # of cards MCA slot */ int mca_io; /* MCA cards IO port */ #endif /* CONFIG_MCA */ } eicon_card; /* -----------------------------------------------------------** ** The PROTOCOL_FEATURE_STRING ** ** defines capabilities and ** ** features of the actual protocol code. It's used as a bit ** ** mask. ** ** The following Bits are defined: ** ** -----------------------------------------------------------*/ #define PROTCAP_TELINDUS 0x0001 /* Telindus Variant of protocol code */ #define PROTCAP_MANIF 0x0002 /* Management interface implemented */ #define PROTCAP_V_42 0x0004 /* V42 implemented */ #define PROTCAP_V90D 0x0008 /* V.90D (implies up to 384k DSP code) */ #define PROTCAP_EXTD_FAX 0x0010 /* Extended FAX (ECM, 2D, T6, Polling) */ #define PROTCAP_FREE4 0x0020 /* not used */ #define PROTCAP_FREE5 0x0040 /* not used */ #define PROTCAP_FREE6 0x0080 /* not used */ #define PROTCAP_FREE7 0x0100 /* not used */ #define PROTCAP_FREE8 0x0200 /* not used */ #define PROTCAP_FREE9 0x0400 /* not used */ #define PROTCAP_FREE10 0x0800 /* not used */ #define PROTCAP_FREE11 0x1000 /* not used */ #define PROTCAP_FREE12 0x2000 /* not used */ #define PROTCAP_FREE13 0x4000 /* not used */ #define PROTCAP_EXTENSION 0x8000 /* used for future extentions */ #include "eicon_idi.h" extern eicon_card *cards; extern char *eicon_ctype_name[]; extern __inline__ void eicon_schedule_tx(eicon_card *card) { queue_task(&card->snd_tq, &tq_immediate); mark_bh(IMMEDIATE_BH); } extern __inline__ void eicon_schedule_rx(eicon_card *card) { queue_task(&card->rcv_tq, &tq_immediate); mark_bh(IMMEDIATE_BH); } extern __inline__ void eicon_schedule_ack(eicon_card *card) { queue_task(&card->ack_tq, &tq_immediate); mark_bh(IMMEDIATE_BH); } extern char *eicon_find_eaz(eicon_card *, char); extern int eicon_addcard(int, int, int, char *); extern void eicon_io_transmit(eicon_card *card); extern void eicon_irq(int irq, void *dev_id, struct pt_regs *regs); extern void eicon_io_rcv_dispatch(eicon_card *ccard); extern void eicon_io_ack_dispatch(eicon_card *ccard); extern int eicon_get_xlog(eicon_card *card, xlogreq_t *xlogreq); #ifdef CONFIG_MCA extern int eicon_mca_find_card(int, int, int, char *); extern int eicon_mca_probe(int, int, int, int, char *); extern int eicon_info(char *, int , void *); #endif /* CONFIG_MCA */ extern ulong DebugVar; extern void eicon_log(eicon_card * card, int level, const char *fmt, ...); extern void eicon_putstatus(eicon_card * card, char * buf); #endif /* __KERNEL__ */ #endif /* eicon_h */ |