if_esmc.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:10k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* if_esmc.h - SMC 91c9x network interface header */ 
  2. /* Copyright 1984-1996 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,09may96,hdn  written. 
  7. */
  8. #ifndef INCif_esmch
  9. #define INCif_esmch
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #define ESMC_BUFSIZE 1536 /* RX/TX buffer size in task level */
  14. #define ESMC_BUFSIZE_INT  (1536*6) /* RX buffer size in int level */
  15. #define ESMC_PACKETS 18 /* max number of packets */
  16. #define ESMC_INDEXES (18*6) /* max received packets in int level */
  17. #define ESMC_9190 3 /* SMC 91c90 */
  18. #define ESMC_9194 4 /* SMC 91c94 */
  19. #define ESMC_9195 5 /* SMC 91c95 */
  20. #define ESMC_91100 7 /* SMC 91c100 */
  21. #define ESMC_INTR_TIMEOUT 2 /* interrupt timeout */
  22. #define ESMC_ALLOC_TIMEOUT 8 /* mem allocation timeout */
  23. #define ESMC_BANK_SELECT 0x0E /* see chip mauual for details */
  24. #define ESMC_RXING 0x01 /* receving */
  25. #define ESMC_TXING 0x02 /* transmitting */
  26. typedef struct 
  27.     {
  28.     struct arpcom es_ac; /* ethernet common part */
  29. #define es_if     es_ac.ac_if
  30. #define es_enaddr es_ac.ac_enaddr
  31.     int    ioAddr; /* device I/O address */
  32.     int    intVec; /* interrupt vector */
  33.     int    intLevel; /* interrupt level */
  34.     int    config; /* 10BaseT or AUI */
  35.     int    mode; /* 10BaseT or AUI */
  36.     SEMAPHORE  esmcSyncSem; /* syncronization semaphore */
  37.     char * pBuft; /* pointer to rx/tx buffer */
  38.     char   buft[ESMC_BUFSIZE + 8]; /* rx/tx buffer + alignment pad */
  39.     char * pBufi; /* pointer to rx buffer */
  40.     char * bufi; /* rx buffer + alignment pad */
  41.     char * pStart; /* start pointer for rx buf */
  42.     char * pIn; /* input pointer for rx buf */
  43.     char * pOut; /* output pointer for rx buf */
  44.     char * pEnd; /* end pointer for rx buf */
  45.     char * packetAddr[ESMC_INDEXES]; /* packet address */
  46.     int    packetLen[ESMC_INDEXES]; /* packet length */
  47.     int    indexIn; /* index for interrupt */
  48.     int    indexOut; /* index for output */
  49.     int    nIndex; /* number of indexes */
  50.     u_int  interrupt; /* counter for interrupt */
  51.     u_int  intRcv; /* counter for interrupt */
  52.     u_int  intTx; /* counter for interrupt */
  53.     u_int  intTxempty; /* counter for interrupt */
  54.     u_int  intAlloc; /* counter for interrupt */
  55.     u_int  intOverrun; /* counter for interrupt */
  56.     u_int  intEph; /* counter for interrupt */
  57.     u_int  intErcv; /* counter for interrupt */
  58.     u_int  lostCarr; /* lost carr */
  59.     u_int  allocTimeout; /* allocation timeout */
  60.     u_int  allocFailed; /* allocation failed */
  61.     char   flags; /* misc control flags */
  62.     } ESMC_SOFTC;
  63. /* BANK 0 I/O Space mapping */
  64. #define ESMC_TCR  0x0 /* transmit control register */
  65. #define ESMC_EPH  0x2 /* EPH status register */
  66. #define ESMC_RCR 0x4 /* receive control register */
  67. #define ESMC_COUNTER     0x6 /* counter register */
  68. #define ESMC_MIR         0x8 /* memory information register */
  69. #define ESMC_MCR 0xA /* memory configuration register */
  70. /* Transmit Control Register */
  71. #define ESMC_TCR_EPH_LOOP 0x2000 /* internal loopback at EPH block */
  72. #define ESMC_TCR_STP_SQET 0x1000 /* stop trans on signal quality error */
  73. #define ESMC_TCR_FDUPLX 0x0800 /* enable full duplex */
  74. #define ESMC_TCR_MON_CNS 0x0400 /* monitors the carrier while trans */
  75. #define ESMC_TCR_NOCRC 0x0100 /* NOT append CRC to frame if set */
  76. #define ESMC_TCR_PAD 0x0080 /* pad short frames to 64 bytes */
  77. #define ESMC_TCR_FORCOL 0x0040 /* force collision, then auto resets */
  78. #define ESMC_TCR_LOOP 0x0020 /* internal loopback */
  79. #define ESMC_TCR_TXEN 0x0001 /* transmit enabled when set */ 
  80. #define ESMC_TCR_RESET 0x0000 /* Disable the transmitter */
  81. /* EPH Status Register - stores status of last transmitted frame */
  82. #define ESMC_TS_TXUNRN 0x8000 /* tramsmit under run */
  83. #define ESMC_TS_LINK_OK 0x4000 /* twisted pair link cond */  
  84. #define ESMC_TS_RX_OVRN 0x2000 /* on FIFO overrun... */
  85. #define ESMC_TS_CTR_ROL 0x1000 /* counter rollover */
  86. #define ESMC_TS_EXC_DEF 0x0800 /* excessive deferal */
  87. #define ESMC_TS_LOST_CARR 0x0400 /* ## lost carrier sense */
  88. #define ESMC_TS_LATCOL 0x0200 /* ## late collision */
  89. #define ESMC_TS_TX_DEFR 0x0080 /* transmit deferred - auot cleared */
  90. #define ESMC_TS_LTX_BRD 0x0040 /* last frame was broascast packet */
  91. #define ESMC_TS_SQET 0x0020 /* ## signal quality error test */
  92. #define ESMC_TS_16COL 0x0010 /* ## 16 collisions reached */
  93. #define ESMC_TS_LXT_MULT 0x0008 /* last frame was multicast */
  94. #define ESMC_TS_MULCOL 0x0004 /* multiple collision detected */
  95. #define ESMC_TS_SNGLCOL 0x0002 /* single collision detected */   
  96. #define ESMC_TS_TX_SUC 0x0001 /* last Transmit was successful */
  97.                                   /* ## indicates fatal error */
  98. /* Recieve control register */
  99. #define ESMC_RCR_EPH_RST 0x8000 /* software activated reset */
  100. #define ESMC_RCR_FILT_CAR 0x4000 /* filter carrier sense 12 bits */           
  101. #define ESMC_RCR_STRIP_CRC 0x0200 /* when set, strips CRC */
  102. #define ESMC_RCR_RXEN 0x0100 /* ENABLE reciever */
  103. #define ESMC_RCR_ALMUL 0x0004 /* receive all multicast packets */
  104. #define ESMC_RCR_PRMS 0x0002 /* enable promiscuous mode */
  105. #define ESMC_RCR_RX_ABORT 0x0001 /* set if reciever overrun */          
  106. #define ESMC_RCR_RESET 0x0 /* set it to a base state */
  107. /* Memory Information Register */
  108. #define ESMC_MIR_FREE MIR /* read at any time for free mem */
  109. #define ESMC_MIR_SIZE MIR+1 /* determine amount of onchip mem */
  110. /* BANK 1 I/O Space mapping */
  111. #define ESMC_CONFIG 0x0 /* configuration register */
  112. #define ESMC_BASE 0x2 /* base address register */
  113. #define ESMC_ADDR_0 0x4 /* individual address register 0 */
  114. #define ESMC_ADDR_1 0x6 /* individual address register 1 */
  115. #define ESMC_ADDR_2 0x8 /* individual address register 2 */
  116. #define ESMC_GENERAL 0xA /* general purpose register */
  117. #define ESMC_CONTROL 0xC /* control register */
  118. /* Configuration register */
  119. #define ESMC_CFG_NO_WAIT_ST 0x1000 /* when set */
  120. #define ESMC_CFG_FULL_STEP 0x0400 /* AUI, use full step signaling */
  121. #define ESMC_CFG_SET_SQLCH 0x0200 /* when set squelch level is 240mV */
  122. #define ESMC_CFG_AUI_SELECT 0x0100 /* when set use AUI */
  123. #define ESMC_CFG_16BIT 0x0080 /* usually auto set   16/8 selection */ 
  124. #define ESMC_CFG_DIS_LINK 0x0040 /* disables link test, TP only */
  125. #define ESMC_INT_INTR_ZERO 0xf9 /* mask to clear interrrupt setting */
  126. #define ESMC_INT_SEL_INTR0 0x0
  127. #define ESMC_INT_SEL_INTR1 0x2
  128. #define ESMC_INT_SEL_INTR2 0x4
  129. #define ESMC_INT_SEL_INTR3 0x6
  130. /* Control Register */
  131. #define ESMC_CTL_RCV_BAD 0x4000 /* when set bad CRC packets received */
  132. #define ESMC_CTL_PWEDN 0x2000 /* high puts chip in powerdown mode */
  133. #define ESMC_CTL_AUTO_RELEASE 0x0800 /* transmit memory auto released */
  134. #define ESMC_CTL_LE_ENABLE 0x0080 /* Link error enable */
  135. #define ESMC_CTL_CR_ENABLE 0x0040 /* counter rollover enable */
  136. #define ESMC_CTL_TE_ENABLE 0x0020 /* transmit error enable */
  137. #define ESMC_CTL_EPROM_SELECT 0x0004 /* EEprom access bit */
  138. /* BANK 2 I/O Space mapping */
  139. #define ESMC_MMU 0x0 /* MMU command register */
  140. #define ESMC_PNR 0x2 /* packet number register */
  141. #define ESMC_ARR 0x3 /* allocation result register */
  142. #define ESMC_FIFO 0x4 /* FIFO ports register */
  143. #define ESMC_PTR 0x6 /* pointer register */
  144. #define ESMC_DATA_1 0x8 /* data register 1 */
  145. #define ESMC_DATA_2 0xA /* data register 2 */
  146. #define ESMC_INT_STAT 0xC /* int status & acknowledge register */
  147. #define ESMC_INT_ACK 0xC /* int status & acknowledge register */
  148. #define ESMC_INT_MASK 0xD /* int mask register */
  149. /* MMU Command Register */
  150. #define ESMC_MMU_BUSY 0x0001 /* set if MMU busy */
  151. #define ESMC_MMU_ALLOC 0x0020 /* get memory from chip memory/256 */
  152. #define ESMC_MMU_NOP 0x0000
  153. #define ESMC_MMU_RESET 0x0040
  154. #define ESMC_MMU_RX_REMOVE 0x0060 /* remove current RX frame from FIFO */
  155. #define ESMC_MMU_RX_RELEASE 0x0080 /* also release memory associated */
  156. #define ESMC_MMU_TX_RELEASE 0x00A0 /* free packet memory in PNR register */
  157. #define ESMC_MMU_ENQUEUE 0x00C0 /* Enqueue the packet for transmit */
  158. #define ESMC_MMU_TX_RESET 0x00E0 /* reset TX FIFO's */
  159. /* Allocation Result Register */
  160. #define ESMC_ARR_FAILED 0x80
  161. /* FIFO Ports Register */
  162. #define ESMC_FP_RXEMPTY 0x8000 /* no rx packets queued in RX FIFO */
  163. #define ESMC_FP_TXEMPTY 0x0080 /* no tx packets queued in TX FIFO  */
  164. /* Pointer Register - address to be accessed in chip memory*/
  165. #define ESMC_PTR_RCV 0x8000 /* when set, refers to receive area */
  166. #define ESMC_PTR_READ 0x2000 /* type of access to follow */
  167. #define ESMC_PTR_AUTOINC 0x4000 /* auto incs. PTR correct amount */
  168. /* Interrupt Detail */
  169. #define ESMC_INT_EPH 0x20 /* Set when EPH handler fires */
  170. #define ESMC_INT_RX_OVRN 0x10 /* set when receiver overruns */
  171. #define ESMC_INT_ALLOC 0x08 /* set when MMU allocation is done */
  172. #define ESMC_INT_TX_EMPTY 0x04 /* set id TX_FIFO empty */
  173. #define ESMC_INT_TX 0x02 /* set when at least one packet sent */
  174. #define ESMC_INT_RCV 0x01
  175. #define ESMC_INT_ERCV 0x40 /* for other chip sets */
  176. /* Interrupts for chip to generate */
  177. #define ESMC_INTERRUPT_MASK   (ESMC_INT_EPH | ESMC_INT_RX_OVRN | ESMC_INT_RCV) 
  178. /* BANK 3 I/O Space mapping */
  179. #define ESMC_MULTICAST0 0x0 /* multicast table - WORD 0 */
  180. #define ESMC_MULTICAST2 0x2 /* multicast table - WORD 1 */
  181. #define ESMC_MULTICAST4 0x4 /* multicast table - WORD 2 */
  182. #define ESMC_MULTICAST6 0x6 /* multicast table - WORD 3 */
  183. #define ESMC_MGMT 0x8
  184. #define ESMC_REVISION 0xA /* chip set and revision encoded here */
  185. #define ESMC_ERCV 0xC /* early recieve register */
  186. /* Recieve frame status word - located at beginning of each received frame*/
  187. #define ESMC_RS_ALGNERR 0x8000 /* frame had alignment error */
  188. #define ESMC_RS_BRODCAST 0x4000 /* receive frame was broadcast */
  189. #define ESMC_RS_BADCRC 0x2000 /* CRC error */
  190. #define ESMC_RS_ODDFRM 0x1000 /* receive frame had odd byte */
  191. #define ESMC_RS_TOOLONG 0x0800 /* longer then 1518 bytes */
  192. #define ESMC_RS_TOOSHORT 0x0400 /* shorter then 64 bytes */
  193. #define ESMC_RS_MULTICAST 0x0001 /* receive frame was multicast */
  194. #define ESMC_RS_ERROR_MASK (ESMC_RS_ALGNERR | ESMC_RS_BADCRC | ESMC_RS_TOOLONG | ESMC_RS_TOOSHORT) 
  195. /* Switch bank - done often! */
  196. #define ESMC_SWITCH_BANK(x) { sysOutWord(ioaddr + ESMC_BANK_SELECT, x ); } 
  197. #ifdef __cplusplus
  198. }
  199. #endif
  200. #endif /* INCif_smc9.h */