📄 eicon.h
字号:
/* $Id: eicon.h,v 1.23.6.5 2001/09/23 22:24:37 kai 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 software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * */#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#define EICON_IOCTL_DIA_OFFSET 100/* 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;/* Data for downloading protocol via ioctl */typedef union { eicon_isa_codebuf isa; eicon_isa_codebuf mca;} eicon_codebuf;/* Data for Management interface */typedef struct { int count; int pos; int length[50]; unsigned char data[700]; } eicon_manifbuf;#define TRACE_OK (1)#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/io.h>#include <linux/kernel.h>#include <linux/signal.h>#include <linux/slab.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/pci.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"#include "idi.h"typedef struct { __u16 NextReq __attribute__ ((packed)); /* pointer to next Req Buffer */ __u16 NextRc __attribute__ ((packed)); /* pointer to next Rc Buffer */ __u16 NextInd __attribute__ ((packed)); /* pointer to next Ind Buffer */ __u8 ReqInput __attribute__ ((packed)); /* number of Req Buffers sent */ __u8 ReqOutput __attribute__ ((packed)); /* number of Req Buffers returned */ __u8 ReqReserved __attribute__ ((packed));/*number of Req Buffers reserved */ __u8 Int __attribute__ ((packed)); /* ISDN-P interrupt */ __u8 XLock __attribute__ ((packed)); /* Lock field for arbitration */ __u8 RcOutput __attribute__ ((packed)); /* number of Rc buffers received */ __u8 IndOutput __attribute__ ((packed)); /* number of Ind buffers received */ __u8 IMask __attribute__ ((packed)); /* Interrupt Mask Flag */ __u8 Reserved1[2] __attribute__ ((packed)); /* reserved field, do not use */ __u8 ReadyInt __attribute__ ((packed)); /* request field for ready int */ __u8 Reserved2[12] __attribute__ ((packed)); /* reserved field, do not use */ __u8 InterfaceType __attribute__ ((packed)); /* interface type 1=16K */ __u16 Signature __attribute__ ((packed)); /* ISDN-P initialized ind */ __u8 B[1]; /* buffer space for Req,Ind and Rc */} eicon_pr_ram;/* Macro for delay via schedule() */#define SLEEP(j) { \ set_current_state(TASK_UNINTERRUPTIBLE); \ schedule_timeout(j); \}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 256typedef 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 pqueued; /* User-Data Packets 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; /* Native Entity */ ENTITY de; /* Divas D Entity */ ENTITY be; /* Divas B 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 *//* 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 2138typedef 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;/* * Per card driver data */typedef struct eicon_card { eicon_hwif hwif; /* Hardware dependant interface */ DESCRIPTOR *d; /* IDI Descriptor */ 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 */ 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 */ DBUFFER *dbuf; /* Dbuffer for Diva Server */ BUFFERS *sbuf; /* Buffer for Diva Server */ char *sbufp; /* Data Buffer for Diva Server */ isdn_if interface; /* Interface to upper layer */ char regname[35]; /* Drivers card name */#ifdef CONFIG_MCA int mca_slot; /* # of cards MCA slot */ int mca_io; /* MCA cards IO port */#endif /* CONFIG_MCA */} eicon_card;#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 int eicon_addcard(int, int, int, char *, int);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);#ifdef CONFIG_MCAextern 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);extern spinlock_t eicon_lock;#endif /* __KERNEL__ */#endif /* eicon_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -