drsi.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:6k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _DRSI_H
  2. #define _DRSI_H
  3. /* Hardware-dependent routines for the DRSI card for the PC
  4.  * This card contains a Zilog 8530, ZILOG 8536 and a modem.
  5.  */
  6. #ifndef _GLOBAL_H
  7. #include "global.h"
  8. #endif
  9. #ifndef _MBUF_H
  10. #include "mbuf.h"
  11. #endif
  12. #ifndef _IFACE_H
  13. #include "iface.h"
  14. #endif
  15. #define DRMAX 1 /* One card max */
  16. #define AX_MTU 512
  17. #define INTMASK 0x21 /* Intel 8259 interrupt controller mask */
  18. struct DRTAB {
  19. /* Original interrupt vector contents */
  20. INTERRUPT (*oldvec)(void);
  21. uint16 addr; /* Base I/O address */
  22. uint16 vec; /* Vector */
  23. long ints; /* Interrupt count */
  24. uint8 chain; /* Interrupt chaining enable */
  25. };
  26. extern struct DRTAB Drsi[];
  27. extern uint16 Drnbr;
  28. /* Register offset info, specific to the DRSI
  29.  * E.g., to read the data port on channel A, use
  30.  * inportb(drchan[dev].base + CHANA + DATA)
  31.  */
  32. #define CHANB 0 /* Base of channel B regs */
  33. #define CHANA 2 /* Base of channel A regs */
  34. /* 8530 ports on each channel */
  35. #define CTL 0
  36. #define DATA 1
  37. #define DMACTRL  4 /* Base of channel + 4 */
  38. /* 8536 ports */
  39. #define Z8536_MASTER 7 /* 8536 master register offset from BASE */
  40. /* Struct used to contain wakeup data */
  41. struct dr_wakeup {
  42.     void (*wcall)(struct drchan *hp);
  43.     int wakecnt;
  44. };
  45. #define RX 0 /* Index into wake array */
  46. #define TX 1 /* ----------""--------- */
  47. struct drchan {
  48. long rxints; /* Receiver interrupts */
  49. long txints; /* Transmitter interrupts */
  50. long exints; /* External/status interrupts */
  51. long spints; /* Special receiver interrupts */
  52. long enqueued; /* Packets actually forwarded */
  53. long rxframes; /* Number of Frames Actally Received */
  54. long toobig; /* Giant receiver packets */
  55. long crcerr; /* CRC Errors */
  56. long aborts; /* Receiver aborts */
  57. long rovers; /* Receiver Overruns */
  58. long txdefers; /* Number of defered transmit attempts */
  59. long txppersist; /* Tx attempts defered due to p-persist */
  60. long nomem; /* No TX buffer available for local buffer */
  61. uint8 status; /* Copy of R0 at last external interrupt */
  62. struct mbuf *rcvbuf; /* Buffer for current rx packet */
  63. uint16 bufsiz; /* Size of rcvbuf */
  64. uint8 *rcp; /* Pointer into rcvbuf */
  65. struct mbuf *sndq; /* Packets awaiting transmission */
  66. uint16 sndcnt; /* Number of packets on sndq */
  67. struct mbuf *sndbuf; /* Current buffer being transmitted */
  68. uint16 drtx_cnt; /* Number of chars left in local buffer */
  69. uint8 *drtx_buffer; /* Local Tx buffer (copy of data buffer) */
  70. uint8 *drtx_tcp; /* Pointer into local buffer */
  71. struct dr_wakeup w[2]; /* One wakeup for Rx and one for Tx */
  72. /* Tx state machine - state processor */
  73. void (*tx_state)(struct drchan *hp);
  74. /* Rx state machine - state processor */
  75. void (*rx_state)(struct drchan *hp);
  76. uint8 tstate; /* Tranmsitter state */
  77. #define IDLE 0 /* Transmitter off, no data pending */
  78. #define ACTIVE 1 /* Transmitter on, sending data */
  79. #define UNDERRUN 2 /* Transmitter on, flushing CRC */
  80. #define FLAGOUT 3 /* CRC sent - attempt to start next frame */
  81. #define DEFER 4  /* Receive Active - DEFER Transmit */
  82. #define RRTS  5 /* Raise RTS */
  83. #define TFIRST 6 /* Transmit first character */
  84. #define DOWNTX 7 /* Return to receive after ENDDELAY */
  85. uint8 rstate; /* Set when !DCD goes to 0 (TRUE) */
  86. /* Normal state is ACTIVE if Receive enabled */
  87. #define RXERROR 2 /* Error -- Aborting current Frame */
  88. #define RXABORT 3 /* ABORT sequence detected */
  89. #define TOOBIG 4 /* too large a frame to store */
  90. #define ENABLE 5 /* Enable RX */
  91. uint16 dev; /* Device number */
  92. uint16 base; /* Base of I/O registers */
  93. uint16 stata; /* address of Channel A status regs */
  94. uint16 statb; /* address of Channel B status regs */
  95. uint16 dmactrl; /* address of DMA/INTERRUPT reg on card */
  96. uint16 speed; /* Line speed, bps */
  97. int txdelay; /* Transmit Delay 10 ms/cnt */
  98. int persist; /* Persistence (0-255) as a % */
  99. int slotime; /* Delay to wait on persistence hit */
  100. int squeldelay; /* Delay after XMTR OFF for seuelch tail */
  101. int enddelay; /* Hold up after sending last char in frame */
  102. struct iface *iface; /* Associated interface */
  103. };
  104. extern struct drchan drchan[];
  105. /* In drsi.c: */
  106. INTERRUPT (far *(drint)(int dev))();
  107. /* Interrupt vector handlers (assembler) in drsivec.asm */
  108. INTERRUPT dr0vec(void);
  109. #define OFF 0
  110. #define ON 1
  111. #define INIT 2
  112. /* 8530 clock speed */
  113. #define XTAL ((long) 4915200/2)  /* 32X clock constant */
  114. /*************************************************************/
  115. /* TEMP FOR DEBUG ONLY - eliminates Divide by zero interrupt */
  116. /*        - preset for 1200 BAUD !!!!!!!!!!!!!! */
  117. /*************************************************************/
  118. #define TXCONST 2046 /* (XTAL/1200L)-2 */
  119. #define RXCONST 62 /* ((XTAL/32)/1200L)-2 */
  120. /* Baud rate generator definitions */
  121. struct baudrate {
  122. uint16 speed;
  123. uint8 val;
  124. };
  125. /* 8536 register definitions */
  126. #define Z8536_MICR  0x00    /* Master interrupt control register */
  127. #define Z8536_MCCR  0x01    /* Master configuration control register */
  128. #define Z8536_CTMS1 0x1c    /* Counter/timer mode specification #1 */
  129. #define Z8536_CTMS2 0x1d    /* Counter/timer mode specification #2 */
  130. #define Z8536_CTMS3 0x1e    /* Counter/timer mode specification #3 */
  131. #define Z8536_IVR   0x04    /* Interrupt vector register */
  132. #define Z8536_CSR1  0x0a    /* Command and status register CTC #1 */
  133. #define Z8536_CSR2  0x0b    /* Command and status register CTC #2 */
  134. #define Z8536_CSR3  0x0c    /* Command and status register CTC #3 */
  135. #define Z8536_CC3LSB 0x15    /* CTC #3 Current count - LSB  */
  136. #define Z8536_CT1MSB 0x16    /* CTC #1 Timer constant - MSB */
  137. #define Z8536_CT1LSB 0x17    /* CTC #1 Timer constant - LSB */
  138. #define Z8536_CT2MSB 0x18    /* CTC #2 Timer constant - MSB */
  139. #define Z8536_CT2LSB 0x19    /* CTC #2 Timer constant - LSB */
  140. #define Z8536_CT3MSB 0x1a    /* CTC #3 Timer constant - MSB */
  141. #define Z8536_CT3LSB 0x1b    /* CTC #3 Timer constant - LSB */
  142. #define Z8536_PDCA   0x23    /* Port A data direction control */
  143. #define Z8536_PDCB   0x2b    /* Port B data direction control */
  144. #define Z_GCB     0x04    /* CTC Gate command bit */
  145. #define Z_TCB     0x02    /* CTC Trigger command bit */
  146. #define Z_IE     0xc0    /* CTC Interrupt enable (set) */
  147. #define Z_CIP     0x20    /* CTC Clear interrupt pending */
  148. #define Z_IP     0x20    /* CTC Interrupt pending */
  149. #endif /* _DRSI_H */