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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: act2000.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
  2.  *
  3.  * ISDN lowlevel-module for the IBM ISDN-S0 Active 2000.
  4.  *
  5.  * Author       Fritz Elfert
  6.  * Copyright    by Fritz Elfert      <fritz@isdn4linux.de>
  7.  * 
  8.  * This software may be used and distributed according to the terms
  9.  * of the GNU General Public License, incorporated herein by reference.
  10.  *
  11.  * Thanks to Friedemann Baitinger and IBM Germany
  12.  *
  13.  */
  14. #ifndef act2000_h
  15. #define act2000_h
  16. #define ACT2000_IOCTL_SETPORT    1
  17. #define ACT2000_IOCTL_GETPORT    2
  18. #define ACT2000_IOCTL_SETIRQ     3
  19. #define ACT2000_IOCTL_GETIRQ     4
  20. #define ACT2000_IOCTL_SETBUS     5
  21. #define ACT2000_IOCTL_GETBUS     6
  22. #define ACT2000_IOCTL_SETPROTO   7
  23. #define ACT2000_IOCTL_GETPROTO   8
  24. #define ACT2000_IOCTL_SETMSN     9
  25. #define ACT2000_IOCTL_GETMSN    10
  26. #define ACT2000_IOCTL_LOADBOOT  11
  27. #define ACT2000_IOCTL_ADDCARD   12
  28. #define ACT2000_IOCTL_TEST      98
  29. #define ACT2000_IOCTL_DEBUGVAR  99
  30. #define ACT2000_BUS_ISA          1
  31. #define ACT2000_BUS_MCA          2
  32. #define ACT2000_BUS_PCMCIA       3
  33. /* Struct for adding new cards */
  34. typedef struct act2000_cdef {
  35. int bus;
  36.         int port;
  37.         int irq;
  38.         char id[10];
  39. } act2000_cdef;
  40. /* Struct for downloading firmware */
  41. typedef struct act2000_ddef {
  42.         int length;             /* Length of code */
  43.         char *buffer;           /* Ptr. to code   */
  44. } act2000_ddef;
  45. typedef struct act2000_fwid {
  46.         char isdn[4];
  47.         char revlen[2];
  48.         char revision[504];
  49. } act2000_fwid;
  50. #if defined(__KERNEL__) || defined(__DEBUGVAR__)
  51. #ifdef __KERNEL__
  52. /* Kernel includes */
  53. #include <linux/sched.h>
  54. #include <linux/string.h>
  55. #include <linux/tqueue.h>
  56. #include <linux/interrupt.h>
  57. #include <linux/skbuff.h>
  58. #include <linux/errno.h>
  59. #include <linux/fs.h>
  60. #include <linux/major.h>
  61. #include <asm/segment.h>
  62. #include <asm/io.h>
  63. #include <linux/kernel.h>
  64. #include <linux/signal.h>
  65. #include <linux/slab.h>
  66. #include <linux/mm.h>
  67. #include <linux/mman.h>
  68. #include <linux/ioport.h>
  69. #include <linux/timer.h>
  70. #include <linux/wait.h>
  71. #include <linux/delay.h>
  72. #include <linux/ctype.h>
  73. #include <linux/isdnif.h>
  74. #endif                           /* __KERNEL__ */
  75. #define ACT2000_PORTLEN        8
  76. #define ACT2000_FLAGS_RUNNING  1 /* Cards driver activated */
  77. #define ACT2000_FLAGS_PVALID   2 /* Cards port is valid    */
  78. #define ACT2000_FLAGS_IVALID   4 /* Cards irq is valid     */
  79. #define ACT2000_FLAGS_LOADED   8 /* Firmware loaded        */
  80. #define ACT2000_BCH            2 /* # of channels per card */
  81. /* D-Channel states */
  82. #define ACT2000_STATE_NULL     0
  83. #define ACT2000_STATE_ICALL    1
  84. #define ACT2000_STATE_OCALL    2
  85. #define ACT2000_STATE_IWAIT    3
  86. #define ACT2000_STATE_OWAIT    4
  87. #define ACT2000_STATE_IBWAIT   5
  88. #define ACT2000_STATE_OBWAIT   6
  89. #define ACT2000_STATE_BWAIT    7
  90. #define ACT2000_STATE_BHWAIT   8
  91. #define ACT2000_STATE_BHWAIT2  9
  92. #define ACT2000_STATE_DHWAIT  10
  93. #define ACT2000_STATE_DHWAIT2 11
  94. #define ACT2000_STATE_BSETUP  12
  95. #define ACT2000_STATE_ACTIVE  13
  96. #define ACT2000_MAX_QUEUED  8000 /* 2 * maxbuff */
  97. #define ACT2000_LOCK_TX 0
  98. #define ACT2000_LOCK_RX 1
  99. typedef struct act2000_chan {
  100. unsigned short callref;          /* Call Reference              */
  101. unsigned short fsm_state;        /* Current D-Channel state     */
  102. unsigned short eazmask;          /* EAZ-Mask for this Channel   */
  103. short queued;                    /* User-Data Bytes in TX queue */
  104. unsigned short plci;
  105. unsigned short ncci;
  106. unsigned char  l2prot;           /* Layer 2 protocol            */
  107. unsigned char  l3prot;           /* Layer 3 protocol            */
  108. } act2000_chan;
  109. typedef struct msn_entry {
  110. char eaz;
  111.         char msn[16];
  112.         struct msn_entry * next;
  113. } msn_entry;
  114. typedef struct irq_data_isa {
  115. __u8           *rcvptr;
  116. __u16           rcvidx;
  117. __u16           rcvlen;
  118. struct sk_buff *rcvskb;
  119. __u8            rcvignore;
  120. __u8            rcvhdr[8];
  121. } irq_data_isa;
  122. typedef union irq_data {
  123. irq_data_isa isa;
  124. } irq_data;
  125. /*
  126.  * Per card driver data
  127.  */
  128. typedef struct act2000_card {
  129.         unsigned short port;             /* Base-port-address                */
  130.         unsigned short irq;              /* Interrupt                        */
  131.         u_char ptype;                    /* Protocol type (1TR6 or Euro)     */
  132.         u_char bus;                      /* Cardtype (ISA, MCA, PCMCIA)      */
  133.         struct act2000_card *next;  /* Pointer to next device struct    */
  134.         int myid;                        /* Driver-Nr. assigned by linklevel */
  135.         unsigned long flags;             /* Statusflags                      */
  136.         unsigned long ilock;             /* Semaphores for IRQ-Routines      */
  137. struct sk_buff_head rcvq;        /* Receive-Message queue            */
  138. struct sk_buff_head sndq;        /* Send-Message queue               */
  139. struct sk_buff_head ackq;        /* Data-Ack-Message queue           */
  140. u_char *ack_msg;                 /* Ptr to User Data in User skb     */
  141. __u16 need_b3ack;                /* Flag: Need ACK for current skb   */
  142. struct sk_buff *sbuf;            /* skb which is currently sent      */
  143. struct timer_list ptimer;        /* Poll timer                       */
  144. struct tq_struct snd_tq;         /* Task struct for xmit bh          */
  145. struct tq_struct rcv_tq;         /* Task struct for rcv bh           */
  146. struct tq_struct poll_tq;        /* Task struct for polled rcv bh    */
  147. msn_entry *msn_list;
  148. unsigned short msgnum;           /* Message number fur sending       */
  149. act2000_chan bch[ACT2000_BCH];   /* B-Channel status/control         */
  150. char   status_buf[256];          /* Buffer for status messages       */
  151. char   *status_buf_read;
  152. char   *status_buf_write;
  153. char   *status_buf_end;
  154. irq_data idat;                   /* Data used for IRQ handler        */
  155.         isdn_if interface;               /* Interface to upper layer         */
  156.         char regname[35];                /* Name used for request_region     */
  157. } act2000_card;
  158. static inline void act2000_schedule_tx(act2000_card *card)
  159. {
  160.         queue_task(&card->snd_tq, &tq_immediate);
  161.         mark_bh(IMMEDIATE_BH);
  162. }
  163. static inline void act2000_schedule_rx(act2000_card *card)
  164. {
  165.         queue_task(&card->rcv_tq, &tq_immediate);
  166.         mark_bh(IMMEDIATE_BH);
  167. }
  168. static inline void act2000_schedule_poll(act2000_card *card)
  169. {
  170.         queue_task(&card->poll_tq, &tq_immediate);
  171.         mark_bh(IMMEDIATE_BH);
  172. }
  173. extern char *act2000_find_eaz(act2000_card *, char);
  174. #endif                          /* defined(__KERNEL__) || defined(__DEBUGVAR__) */
  175. #endif                          /* act2000_h */