eicon.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:13k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: eicon.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
  2.  *
  3.  * ISDN low-level module for Eicon active ISDN-Cards.
  4.  *
  5.  * Copyright 1998       by Fritz Elfert (fritz@isdn4linux.de)
  6.  * Copyright 1998-2000  by Armin Schindler (mac@melware.de) 
  7.  * Copyright 1999,2000  Cytronics & Melware (info@melware.de)
  8.  *
  9.  * This software may be used and distributed according to the terms
  10.  * of the GNU General Public License, incorporated herein by reference.
  11.  *
  12.  */
  13. #ifndef eicon_h
  14. #define eicon_h
  15. #define EICON_IOCTL_SETMMIO   0
  16. #define EICON_IOCTL_GETMMIO   1
  17. #define EICON_IOCTL_SETIRQ    2
  18. #define EICON_IOCTL_GETIRQ    3
  19. #define EICON_IOCTL_LOADBOOT  4
  20. #define EICON_IOCTL_ADDCARD   5
  21. #define EICON_IOCTL_GETTYPE   6
  22. #define EICON_IOCTL_LOADPCI   7 
  23. #define EICON_IOCTL_LOADISA   8 
  24. #define EICON_IOCTL_GETVER    9 
  25. #define EICON_IOCTL_GETXLOG  10 
  26. #define EICON_IOCTL_MANIF    90 
  27. #define EICON_IOCTL_FREEIT   97
  28. #define EICON_IOCTL_TEST     98
  29. #define EICON_IOCTL_DEBUGVAR 99
  30. #define EICON_IOCTL_DIA_OFFSET 100
  31. /* Bus types */
  32. #define EICON_BUS_ISA          1
  33. #define EICON_BUS_MCA          2
  34. #define EICON_BUS_PCI          3
  35. /* Constants for describing Card-Type */
  36. #define EICON_CTYPE_S            0
  37. #define EICON_CTYPE_SX           1
  38. #define EICON_CTYPE_SCOM         2
  39. #define EICON_CTYPE_QUADRO       3
  40. #define EICON_CTYPE_S2M          4
  41. #define EICON_CTYPE_MAESTRA      5
  42. #define EICON_CTYPE_MAESTRAQ     6
  43. #define EICON_CTYPE_MAESTRAQ_U   7
  44. #define EICON_CTYPE_MAESTRAP     8
  45. #define EICON_CTYPE_ISABRI       0x10
  46. #define EICON_CTYPE_ISAPRI       0x20
  47. #define EICON_CTYPE_MASK         0x0f
  48. #define EICON_CTYPE_QUADRO_NR(n) (n<<4)
  49. #define MAX_HEADER_LEN 10
  50. #define MAX_STATUS_BUFFER 150
  51. /* Struct for adding new cards */
  52. typedef struct eicon_cdef {
  53.         int membase;
  54.         int irq;
  55.         char id[10];
  56. } eicon_cdef;
  57. #define EICON_ISA_BOOT_MEMCHK 1
  58. #define EICON_ISA_BOOT_NORMAL 2
  59. /* Struct for downloading protocol via ioctl for ISA cards */
  60. /* same struct for downloading protocol via ioctl for MCA cards */
  61. typedef struct {
  62. /* start-up parameters */
  63. unsigned char tei;
  64. unsigned char nt2;
  65. unsigned char skip1;
  66. unsigned char WatchDog;
  67. unsigned char Permanent;
  68. unsigned char XInterface;
  69. unsigned char StableL2;
  70. unsigned char NoOrderCheck;
  71. unsigned char HandsetType;
  72. unsigned char skip2;
  73. unsigned char LowChannel;
  74. unsigned char ProtVersion;
  75. unsigned char Crc4;
  76. unsigned char Loopback;
  77. unsigned char oad[32];
  78. unsigned char osa[32];
  79. unsigned char spid[32];
  80. unsigned char boot_opt;
  81. unsigned long bootstrap_len;
  82. unsigned long firmware_len;
  83. unsigned char code[1]; /* Rest (bootstrap- and firmware code) will be allocated */
  84. } eicon_isa_codebuf;
  85. /* Data for downloading protocol via ioctl */
  86. typedef union {
  87. eicon_isa_codebuf isa;
  88. eicon_isa_codebuf mca;
  89. } eicon_codebuf;
  90. /* Data for Management interface */
  91. typedef struct {
  92. int count;
  93. int pos;
  94. int length[50];
  95. unsigned char data[700]; 
  96. } eicon_manifbuf;
  97. #define TRACE_OK                 (1)
  98. #ifdef __KERNEL__
  99. /* Kernel includes */
  100. #include <linux/config.h>
  101. #include <linux/sched.h>
  102. #include <linux/string.h>
  103. #include <linux/tqueue.h>
  104. #include <linux/interrupt.h>
  105. #include <linux/skbuff.h>
  106. #include <linux/errno.h>
  107. #include <linux/fs.h>
  108. #include <linux/major.h>
  109. #include <asm/segment.h>
  110. #include <asm/io.h>
  111. #include <linux/kernel.h>
  112. #include <linux/signal.h>
  113. #include <linux/slab.h>
  114. #include <linux/mm.h>
  115. #include <linux/mman.h>
  116. #include <linux/ioport.h>
  117. #include <linux/timer.h>
  118. #include <linux/wait.h>
  119. #include <linux/delay.h>
  120. #include <linux/ctype.h>
  121. #include <linux/pci.h>
  122. #include <linux/isdn.h>
  123. #include <linux/isdnif.h>
  124. typedef struct {
  125.   __u16 length __attribute__ ((packed)); /* length of data/parameter field */
  126.   __u8  P[1];                          /* data/parameter field */
  127. } eicon_PBUFFER;
  128. #include "eicon_isa.h"
  129. #include "idi.h"
  130. typedef struct {
  131.   __u16 NextReq  __attribute__ ((packed));  /* pointer to next Req Buffer */
  132.   __u16 NextRc   __attribute__ ((packed));  /* pointer to next Rc Buffer  */
  133.   __u16 NextInd  __attribute__ ((packed));  /* pointer to next Ind Buffer */
  134.   __u8 ReqInput  __attribute__ ((packed));  /* number of Req Buffers sent */
  135.   __u8 ReqOutput  __attribute__ ((packed)); /* number of Req Buffers returned */
  136.   __u8 ReqReserved  __attribute__ ((packed));/*number of Req Buffers reserved */
  137.   __u8 Int  __attribute__ ((packed));       /* ISDN-P interrupt           */
  138.   __u8 XLock  __attribute__ ((packed));     /* Lock field for arbitration */
  139.   __u8 RcOutput  __attribute__ ((packed));  /* number of Rc buffers received */
  140.   __u8 IndOutput  __attribute__ ((packed)); /* number of Ind buffers received */
  141.   __u8 IMask  __attribute__ ((packed));     /* Interrupt Mask Flag        */
  142.   __u8 Reserved1[2]  __attribute__ ((packed)); /* reserved field, do not use */
  143.   __u8 ReadyInt  __attribute__ ((packed));  /* request field for ready int */
  144.   __u8 Reserved2[12]  __attribute__ ((packed)); /* reserved field, do not use */
  145.   __u8 InterfaceType  __attribute__ ((packed)); /* interface type 1=16K    */
  146.   __u16 Signature  __attribute__ ((packed));    /* ISDN-P initialized ind  */
  147.   __u8 B[1];                            /* buffer space for Req,Ind and Rc */
  148. } eicon_pr_ram;
  149. /* Macro for delay via schedule() */
  150. #define SLEEP(j) {                     
  151.   set_current_state(TASK_UNINTERRUPTIBLE); 
  152.   schedule_timeout(j);                 
  153. }
  154. typedef struct {
  155.   __u8                  Req;            /* pending request          */
  156.   __u8                  Rc;             /* return code received     */
  157.   __u8                  Ind;            /* indication received      */
  158.   __u8                  ReqCh;          /* channel of current Req   */
  159.   __u8                  RcCh;           /* channel of current Rc    */
  160.   __u8                  IndCh;          /* channel of current Ind   */
  161.   __u8                  D3Id;           /* ID used by this entity   */
  162.   __u8                  B2Id;           /* ID used by this entity   */
  163.   __u8                  GlobalId;       /* reserved field           */
  164.   __u8                  XNum;           /* number of X-buffers      */
  165.   __u8                  RNum;           /* number of R-buffers      */
  166.   struct sk_buff_head   X;              /* X-buffer queue           */
  167.   struct sk_buff_head   R;              /* R-buffer queue           */
  168.   __u8                  RNR;            /* receive not ready flag   */
  169.   __u8                  complete;       /* receive complete status  */
  170.   __u8                  busy;           /* busy flag                */
  171.   __u16                 ref;            /* saved reference          */
  172. } entity;
  173. #define FAX_MAX_SCANLINE 256
  174. typedef struct {
  175. __u8 PrevObject;
  176. __u8 NextObject;
  177. __u8 abLine[FAX_MAX_SCANLINE];
  178. __u8 abFrame[FAX_MAX_SCANLINE];
  179. unsigned int LineLen;
  180. unsigned int LineDataLen;
  181. __u32 LineData;
  182. unsigned int NullBytesPos;
  183. __u8 NullByteExist;
  184. int PageCount;
  185. __u8 Dle;
  186. __u8 Eop;
  187. } eicon_ch_fax_buf;
  188. typedef struct {
  189. int        No;  /* Channel Number         */
  190. unsigned short fsm_state;        /* Current D-Channel state     */
  191. unsigned short statectrl;  /* State controling bits */
  192. unsigned short eazmask;          /* EAZ-Mask for this Channel   */
  193. int queued;          /* User-Data Bytes in TX queue */
  194. int pqueued;         /* User-Data Packets in TX queue */
  195. int waitq;           /* User-Data Bytes in wait queue */
  196. int waitpq;          /* User-Data Bytes in packet queue */
  197. struct sk_buff *tskb1;           /* temp skb 1 */
  198. struct sk_buff *tskb2;           /* temp skb 2 */
  199. unsigned char  l2prot;           /* Layer 2 protocol            */
  200. unsigned char  l3prot;           /* Layer 3 protocol            */
  201. #ifdef CONFIG_ISDN_TTY_FAX
  202. T30_s *fax;  /* pointer to fax data in LL */
  203. eicon_ch_fax_buf fax2;  /* fax related struct */
  204. #endif
  205. entity e;  /* Native Entity */
  206. ENTITY de;  /* Divas D Entity  */
  207. ENTITY be;  /* Divas B Entity  */
  208. char cpn[32];  /* remember cpn */
  209. char oad[32];  /* remember oad */
  210. char dsa[32];  /* remember dsa */
  211. char osa[32];  /* remember osa */
  212. unsigned char   cause[2];  /* Last Cause */
  213. unsigned char si1;
  214. unsigned char si2;
  215. unsigned char plan;
  216. unsigned char screen;
  217. } eicon_chan;
  218. typedef struct {
  219. eicon_chan *ptr;
  220. } eicon_chan_ptr;
  221. #include "eicon_pci.h"
  222. #define EICON_FLAGS_RUNNING  1 /* Cards driver activated */
  223. #define EICON_FLAGS_PVALID   2 /* Cards port is valid    */
  224. #define EICON_FLAGS_IVALID   4 /* Cards irq is valid     */
  225. #define EICON_FLAGS_MVALID   8 /* Cards membase is valid */
  226. #define EICON_FLAGS_LOADED   8 /* Firmware loaded        */
  227. /* D-Channel states */
  228. #define EICON_STATE_NULL     0
  229. #define EICON_STATE_ICALL    1
  230. #define EICON_STATE_OCALL    2
  231. #define EICON_STATE_IWAIT    3
  232. #define EICON_STATE_OWAIT    4
  233. #define EICON_STATE_IBWAIT   5
  234. #define EICON_STATE_OBWAIT   6
  235. #define EICON_STATE_BWAIT    7
  236. #define EICON_STATE_BHWAIT   8
  237. #define EICON_STATE_BHWAIT2  9
  238. #define EICON_STATE_DHWAIT  10
  239. #define EICON_STATE_DHWAIT2 11
  240. #define EICON_STATE_BSETUP  12
  241. #define EICON_STATE_ACTIVE  13
  242. #define EICON_STATE_ICALLW  14
  243. #define EICON_STATE_LISTEN  15
  244. #define EICON_STATE_WMCONN  16
  245. #define EICON_MAX_QUEUE  2138
  246. typedef union {
  247. eicon_isa_card isa;
  248. eicon_pci_card pci;
  249. eicon_isa_card mca;
  250. } eicon_hwif;
  251. typedef struct {
  252. __u8 ret;
  253. __u8 id;
  254. __u8 ch;
  255. } eicon_ack;
  256. typedef struct {
  257. __u8 code;
  258. __u8 id;
  259. __u8 ch;
  260. } eicon_req;
  261. typedef struct {
  262. __u8 ret;
  263. __u8 id;
  264. __u8 ch;
  265. __u8 more;
  266. } eicon_indhdr;
  267. /*
  268.  * Per card driver data
  269.  */
  270. typedef struct eicon_card {
  271. eicon_hwif hwif;                 /* Hardware dependant interface     */
  272. DESCRIPTOR *d;  /* IDI Descriptor      */
  273.         u_char ptype;                    /* Protocol type (1TR6 or Euro)     */
  274.         u_char bus;                      /* Bustype (ISA, MCA, PCI)          */
  275.         u_char type;                     /* Cardtype (EICON_CTYPE_...)       */
  276. struct eicon_card *qnext;    /* Pointer to next quadro adapter   */
  277.         int Feature;                     /* Protocol Feature Value           */
  278.         struct eicon_card *next;  /* Pointer to next device struct    */
  279.         int myid;                        /* Driver-Nr. assigned by linklevel */
  280.         unsigned long flags;             /* Statusflags                      */
  281. struct sk_buff_head rcvq;        /* Receive-Message queue            */
  282. struct sk_buff_head sndq;        /* Send-Message queue               */
  283. struct sk_buff_head rackq;       /* Req-Ack-Message queue            */
  284. struct sk_buff_head sackq;       /* Data-Ack-Message queue           */
  285. struct sk_buff_head statq;       /* Status-Message queue             */
  286. int statq_entries;
  287. struct tq_struct snd_tq;         /* Task struct for xmit bh          */
  288. struct tq_struct rcv_tq;         /* Task struct for rcv bh           */
  289. struct tq_struct ack_tq;         /* Task struct for ack bh           */
  290. eicon_chan* IdTable[256];  /* Table to find entity   */
  291. __u16  ref_in;
  292. __u16  ref_out;
  293. int    nchannels;                /* Number of B-Channels             */
  294. int    ReadyInt;  /* Ready Interrupt      */
  295. eicon_chan *bch;                 /* B-Channel status/control         */
  296. DBUFFER *dbuf;  /* Dbuffer for Diva Server      */
  297. BUFFERS *sbuf;  /* Buffer for Diva Server      */
  298. char *sbufp;  /* Data Buffer for Diva Server      */
  299.         isdn_if interface;               /* Interface to upper layer         */
  300.         char regname[35];                /* Drivers card name       */
  301. #ifdef CONFIG_MCA
  302.         int mca_slot;    /* # of cards MCA slot              */
  303. int mca_io;  /* MCA cards IO port      */
  304. #endif /* CONFIG_MCA */
  305. } eicon_card;
  306. #include "eicon_idi.h"
  307. extern eicon_card *cards;
  308. extern char *eicon_ctype_name[];
  309. static inline void eicon_schedule_tx(eicon_card *card)
  310. {
  311.         queue_task(&card->snd_tq, &tq_immediate);
  312.         mark_bh(IMMEDIATE_BH);
  313. }
  314. static inline void eicon_schedule_rx(eicon_card *card)
  315. {
  316.         queue_task(&card->rcv_tq, &tq_immediate);
  317.         mark_bh(IMMEDIATE_BH);
  318. }
  319. static inline void eicon_schedule_ack(eicon_card *card)
  320. {
  321.         queue_task(&card->ack_tq, &tq_immediate);
  322.         mark_bh(IMMEDIATE_BH);
  323. }
  324. extern int eicon_addcard(int, int, int, char *, int);
  325. extern void eicon_io_transmit(eicon_card *card);
  326. extern void eicon_irq(int irq, void *dev_id, struct pt_regs *regs);
  327. extern void eicon_io_rcv_dispatch(eicon_card *ccard);
  328. extern void eicon_io_ack_dispatch(eicon_card *ccard);
  329. #ifdef CONFIG_MCA
  330. extern int eicon_mca_find_card(int, int, int, char *);
  331. extern int eicon_mca_probe(int, int, int, int, char *);
  332. extern int eicon_info(char *, int , void *);
  333. #endif /* CONFIG_MCA */
  334. extern ulong DebugVar;
  335. extern void eicon_log(eicon_card * card, int level, const char *fmt, ...);
  336. extern void eicon_putstatus(eicon_card * card, char * buf);
  337. extern spinlock_t eicon_lock;
  338. #endif  /* __KERNEL__ */
  339. #endif /* eicon_h */