pcbit.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * PCBIT-D device driver definitions
  3. *
  4. * Copyright (C) 1996 Universidade de Lisboa
  5. *
  6. * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
  7. *
  8. * This software may be used and distributed according to the terms of
  9. * the GNU General Public License, incorporated herein by reference.
  10. */
  11. #ifndef PCBIT_H
  12. #define PCBIT_H
  13. #include <linux/workqueue.h>
  14. #define MAX_PCBIT_CARDS 4
  15. #define BLOCK_TIMER
  16. #ifdef __KERNEL__
  17. struct pcbit_chan {
  18. unsigned short id;
  19. unsigned short callref; /* Call Reference */
  20. unsigned char proto; /* layer2protocol */
  21. unsigned char queued; /* unacked data messages */
  22. unsigned char layer2link; /* used in TData */
  23. unsigned char snum; /* used in TData */
  24. unsigned short s_refnum;
  25. unsigned short r_refnum;
  26. unsigned short fsm_state;
  27. struct timer_list fsm_timer;
  28. #ifdef BLOCK_TIMER
  29. struct timer_list block_timer;
  30. #endif
  31. };
  32. struct msn_entry {
  33. char *msn;
  34. struct msn_entry *next;
  35. };
  36. struct pcbit_dev {
  37. /* board */
  38. volatile unsigned char __iomem *sh_mem; /* RDP address */
  39. unsigned long ph_mem;
  40. unsigned int irq;
  41. unsigned int id;
  42. unsigned int interrupt; /* set during interrupt
  43. processing */
  44. spinlock_t lock;
  45. /* isdn4linux */
  46. struct msn_entry *msn_list; /* ISDN address list */
  47. isdn_if *dev_if;
  48. ushort ll_hdrlen;
  49. ushort hl_hdrlen;
  50. /* link layer */
  51. unsigned char l2_state;
  52. struct frame_buf *read_queue;
  53. struct frame_buf *read_frame;
  54. struct frame_buf *write_queue;
  55. /* Protocol start */
  56. wait_queue_head_t set_running_wq;
  57. struct timer_list set_running_timer;
  58. struct timer_list error_recover_timer;
  59. struct work_struct qdelivery;
  60. u_char w_busy;
  61. u_char r_busy;
  62. volatile unsigned char __iomem *readptr;
  63. volatile unsigned char __iomem *writeptr;
  64. ushort loadptr;
  65. unsigned short fsize[8]; /* sent layer2 frames size */
  66. unsigned char send_seq;
  67. unsigned char rcv_seq;
  68. unsigned char unack_seq;
  69. unsigned short free;
  70. /* channels */
  71. struct pcbit_chan *b1;
  72. struct pcbit_chan *b2;
  73. };
  74. #define STATS_TIMER (10 * HZ)
  75. #define ERRTIME (HZ / 10)
  76. /* MRU */
  77. #define MAXBUFSIZE 1534
  78. #define MRU MAXBUFSIZE
  79. #define STATBUF_LEN 2048
  80. /*
  81. *
  82. */
  83. #endif /* __KERNEL__ */
  84. /* isdn_ctrl only allows a long sized argument */
  85. struct pcbit_ioctl {
  86. union {
  87. struct byte_op {
  88. ushort addr;
  89. ushort value;
  90. } rdp_byte;
  91. unsigned long l2_status;
  92. } info;
  93. };
  94. #define PCBIT_IOCTL_GETSTAT 0x01 /* layer2 status */
  95. #define PCBIT_IOCTL_LWMODE 0x02 /* linear write mode */
  96. #define PCBIT_IOCTL_STRLOAD 0x03 /* start load mode */
  97. #define PCBIT_IOCTL_ENDLOAD 0x04 /* end load mode */
  98. #define PCBIT_IOCTL_SETBYTE 0x05 /* set byte */
  99. #define PCBIT_IOCTL_GETBYTE 0x06 /* get byte */
  100. #define PCBIT_IOCTL_RUNNING 0x07 /* set protocol running */
  101. #define PCBIT_IOCTL_WATCH188 0x08 /* set watch 188 */
  102. #define PCBIT_IOCTL_PING188 0x09 /* ping 188 */
  103. #define PCBIT_IOCTL_FWMODE 0x0A /* firmware write mode */
  104. #define PCBIT_IOCTL_STOP 0x0B /* stop protocol */
  105. #define PCBIT_IOCTL_APION 0x0C /* issue API_ON */
  106. #ifndef __KERNEL__
  107. #define PCBIT_GETSTAT (PCBIT_IOCTL_GETSTAT + IIOCDRVCTL)
  108. #define PCBIT_LWMODE (PCBIT_IOCTL_LWMODE + IIOCDRVCTL)
  109. #define PCBIT_STRLOAD (PCBIT_IOCTL_STRLOAD + IIOCDRVCTL)
  110. #define PCBIT_ENDLOAD (PCBIT_IOCTL_ENDLOAD + IIOCDRVCTL)
  111. #define PCBIT_SETBYTE (PCBIT_IOCTL_SETBYTE + IIOCDRVCTL)
  112. #define PCBIT_GETBYTE (PCBIT_IOCTL_GETBYTE + IIOCDRVCTL)
  113. #define PCBIT_RUNNING (PCBIT_IOCTL_RUNNING + IIOCDRVCTL)
  114. #define PCBIT_WATCH188 (PCBIT_IOCTL_WATCH188 + IIOCDRVCTL)
  115. #define PCBIT_PING188 (PCBIT_IOCTL_PING188 + IIOCDRVCTL)
  116. #define PCBIT_FWMODE (PCBIT_IOCTL_FWMODE + IIOCDRVCTL)
  117. #define PCBIT_STOP (PCBIT_IOCTL_STOP + IIOCDRVCTL)
  118. #define PCBIT_APION (PCBIT_IOCTL_APION + IIOCDRVCTL)
  119. #define MAXSUPERLINE 3000
  120. #endif
  121. #define L2_DOWN 0
  122. #define L2_LOADING 1
  123. #define L2_LWMODE 2
  124. #define L2_FWMODE 3
  125. #define L2_STARTING 4
  126. #define L2_RUNNING 5
  127. #define L2_ERROR 6
  128. void pcbit_deliver(struct work_struct *work);
  129. int pcbit_init_dev(int board, int mem_base, int irq);
  130. void pcbit_terminate(int board);
  131. void pcbit_l3_receive(struct pcbit_dev *dev, ulong msg, struct sk_buff *skb,
  132. ushort hdr_len, ushort refnum);
  133. void pcbit_state_change(struct pcbit_dev *dev, struct pcbit_chan *chan,
  134. unsigned short i, unsigned short ev, unsigned short f);
  135. #endif