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

VxWorks

开发平台:

C/C++

  1. /* mb86960End.h -  Fujitsu MB86960 Ethernet Controller interface header */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,20sep01,dat  Removing ANSI errors for diab compiler
  7. 01a,27feb99,db  created from target/h/drv/netif/if_fn.h
  8. */
  9. #ifndef __INCmb86960h
  10. #define __INCmb86960h
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. /* includes */
  15. #include "end.h"
  16. #include "netinet/if_ether.h"
  17. /* defines */
  18. #define FN_DEV_NAME "fn"
  19. #define FN_DEV_NAME_LEN 3
  20. #define ENET_ADDR_LEN 6
  21. /* Pre-defined interrupt masks */
  22. #define NORM_INTRMASK    (DLCR3_RX_PKT | DLCR3_OVR_FLO) 
  23. #define NO_RX_INTRMASK   (DLCR3_OVR_FLO)
  24. #define MB86960_CRC_POLY 0xedb88320
  25. /* Start transmission */
  26. #define KICK_TRANSMIT (BMR10_TMST | BMR11_MASK16 | BMR11_RST_TX16 
  27.  | BMR11_OPT_16_COLL | 0x0100) 
  28. /* Configuration items */
  29. #define MB86960_SPEED       10000000 /* 10BASE-T speed in bits/sec */
  30. /* SECTION: Data Structures */
  31. typedef struct rx_hdr                   /* received packet header */
  32.     {
  33.     unsigned short status;              /* only upper byte used */
  34.     unsigned short len;                 /* pkt length in little endian order */
  35.     } MB86960_RX_HDR;
  36. #define MB86960_RX_HDR_SIZ  sizeof(MB86960_RX_HDR)
  37. #define MB86960_DATA_OFFSET (sizeof(u_short) + MB86960_RX_HDR_SIZ) 
  38. typedef struct rx_frame 
  39.     {
  40.     u_short pad1;
  41.     MB86960_RX_HDR  rxHdr; /* header provided by chip */
  42.     struct  ether_header enetHdr;        /* the Ethernet header */
  43.     char data [ETHERMTU];               /* the data field */
  44.     } MB86960_RX_FRAME;
  45. #define MB86960_BUFSIZ (sizeof(struct rx_frame))
  46. #define MB86960_FRAME_DATA_ADDR_GET(pFrame) 
  47. (pFrame = ((char *)(pFrame) + sizeof(UINT16) 
  48. + sizeof(MB86960_RX_HDR)))
  49. /* The definition of the driver control structure */
  50. typedef struct mb86960_end_ctrl
  51.     {
  52.     END_OBJ     end;            /* The class we inherit from. */
  53.     int         unit;           /* unit number */
  54.     int         vector;         /* interrupt vector */
  55.     long        flags;          /* Our local flags. */
  56.     char *      devBaseAddr;    /* Base address of the device register set */
  57.     SEM_ID txSem; /* transmitter semaphore */
  58.     UCHAR       enetAddr[6];    /* ethernet address */
  59.     CL_POOL_ID  pClPoolId;      /* Cluster Pool Id */
  60.     } MB86960_END_CTRL;
  61. #define MB86960_END_CTRL_SIZE sizeof(MB86960_END_CTRL)
  62. /* SECTION: Register Addresses  */
  63. /* NICE registers, defined as offsets from base addr */
  64.     /* The statically mapped registers.  This group of registers is
  65.      * always available to the CPU.
  66.      * This first group are the data link control registers 0-7.
  67.      */
  68. #define NICE_STATUS     0x02            /* DLC0,1: Tx and Rx status */
  69. #define NICE_INTRMASK   0x06            /* DLC2,3: Tx and Rx intr masks */
  70. #define NICE_MODE       0x0a            /* DLC4,5: Tx and Rx modes */
  71. #define NICE_CONFIG     0x0e            /* DLC6,7: configuration bits */
  72.     /* The selectable mapped registers.  These groups can be mapped in
  73.      * or out of the overall register set.  The selection of which group
  74.      * is currently mapped in is done via control register 2 (DLCR7) in
  75.      * the statically mapped register group above.
  76.      */
  77.     /* the secondary data link control regs */
  78. #define NICE_ADDR1      0x12            /* DLC8,9: node addr high word */
  79. #define NICE_ADDR2      0x16            /* DLC10,11: node addr mid word */
  80. #define NICE_ADDR3      0x1a            /* DLC12,13: node addr low word */
  81. #define NICE_TDR        0x1e            /* DLC14,15: time domain counter */
  82.     /* the hash table registers */
  83. #define NICE_HASH1      0x12
  84. #define NICE_HASH2      0x16
  85. #define NICE_HASH3      0x1a
  86. #define NICE_HASH4      0x1e
  87.     /* the buffer memory registers */
  88. #define NICE_PORT       0x12            /* BMR8: access port to buffer */
  89. #define NICE_TRANSMIT   0x16            /* BMR10,11: Tx cmd & coll ctrl */
  90. #define NICE_DMA        0x1a            /* BMR12,13: DMA control */
  91. #define NICE_STUFF      0x1e
  92. /* SECTION: bit defines for the device registers and receive header status */
  93. /* The status field of the receive header (RX_HDR above) */
  94. #define RX_HDR_STAT_BIT_7       0x8000      /* unused; should read as 0 */
  95. #define RX_HDR_STAT_BIT_6       0x4000      /* unused; should read as 0 */
  96. #define RX_HDR_STAT_GOOD        0x2000      /* packet is good */
  97. #define RX_HDR_STAT_RMT_RST     0x1000      /* packet type = 0x0900 */
  98. #define RX_HDR_STAT_SHRT_ERR    0x0800      /* short packet error */
  99. #define RX_HDR_STAT_ALGN_ERR    0x0400      /* alignment error */
  100. #define RX_HDR_STAT_CRC_ERR     0x0200      /* CRC error */
  101. #define RX_HDR_STAT_OVR_FLO     0x0100      /* overflow error */
  102.     /* Note that the short error bit has been observed to be set sporadically
  103.      * and is therefore not usable.  The overflow bit should never be set,
  104.      * since the receiver should not be giving us incomplete packets!  The
  105.      * lower byte of the status field is currently unused, but has been seen
  106.      * to have various bits set.  It is probably wise to simply mask this
  107.      * byte off to avoid any confusion.
  108.      */
  109. /* DLCR0,1 -- the receive and transmit status register */
  110. #define DLCR0_TX_DONE       0x8000      /* transmit OK */
  111. #define DLCR0_NET_BSY       0x4000      /* network is busy, carrier present */
  112. #define DLCR0_TX_RX         0x2000      /* transmit received good */
  113. #define DLCR0_CR_LOST       0x1000      /* short packet */
  114. #define DLCR0_BIT_3         0x0800      /* unused bit; write 0 */
  115. #define DLCR0_COL           0x0400      /* a collision occurred */
  116. #define DLCR0_16_COL        0x0200      /* 16 collisions occurred */
  117. #define DLCR0_BUS_WR_ERR    0x0100      /* buss write error */
  118. #define DLCR1_RX_PKT        0x0080      /* received packet ready */
  119. #define DLCR1_BUS_RD_ERR    0x0040      /* buss read error */
  120. #define DLCR1_DMA_EOP       0x0020      /* DMA end operation interrupt status */
  121. #define DLCR1_RMT_RST       0x0010      /* received a remote reset packet */
  122. #define DLCR1_SHRT_ERR      0x0008      /* short packet error */
  123. #define DLCR1_ALGN_ERR      0x0004      /* alignment error */
  124. #define DLCR1_CRC_ERR       0x0002      /* CRC error, CRC does not match FCS */
  125. #define DLCR1_OVR_FLO       0x0001      /* overflow, no space available */
  126. /* DLCR2,3 -- interrupt masks for receive and transmit status register */
  127. #define DLCR2_TX_DONE       0x8000      /* transmit OK intr mask */
  128. #define DLCR2_BIT_6         0x4000      /* unused; write 0 */
  129. #define DLCR2_TX_RX         0x2000      /* transmission received good mask */
  130. #define DLCR2_BIT_4         0x1000      /* unused; write 0 */
  131. #define DLCR2_BIT_3         0x0800      /* unused; write 0 */
  132. #define DLCR2_COL           0x0400      /* collision intr mask */
  133. #define DLCR2_16_COL        0x0200      /* 16 collisions intr mask */
  134. #define DLCR2_BUS_WR_ERR    0x0100      /* buss write error intr mask */
  135. #define DLCR3_RX_PKT        0x0080      /* received packet ready intr mask */
  136. #define DLCR3_BUS_RD_ERR    0x0040      /* buss read error intr mask */
  137. #define DLCR3_DMA_EOP       0x0020      /* DMA end operation intr mask */
  138. #define DLCR3_RMT_RST       0x0010      /* remote reset intr mask */
  139. #define DLCR3_SHRT_ERR      0x0008      /* short packet error intr mask */
  140. #define DLCR3_ALGN_ERR      0x0004      /* alignment error intr mask */
  141. #define DLCR3_CRC_ERR       0x0002      /* CRC error intr mask */
  142. #define DLCR3_OVR_FLO       0x0001      /* overflow error intr mask */
  143. /* DLCR4,5 -- receiver and transmitter modes register */
  144. #define DLCR4_COL_CTR       0xf000      /* collision counter, 4 bits */
  145. #define DLCR4_BIT_3         0x0800      /* unused; write 0 */
  146. #define DLCR4_CNTRL         0x0400      /* drives the CNTRL pin; pin 95 */
  147. #define DLCR4_LBC           0x0200      /* endec loopback; 0 selects */
  148. #define DLCR4_TX_NO_DEFER   0x0100      /* disable carrier detect on Tx */
  149. #define DLCR5_BIT_7         0x0080      /* unused; write 0 */
  150. #define DLCR5_BUF_EMPTY     0x0040      /* buffer empty */
  151. #define DLCR5_ACPT_BAD      0x0020      /* accept bad packets */
  152. #define DLCR5_SHRT_ADD      0x0010      /* use short address, 5 bytes */
  153. #define DLCR5_ENA_SHRT_PKT  0x0008      /* enable receipt of short packets */
  154. #define DLCR5_BIT_2         0x0004      /* unused; write 1 */
  155. #define DLCR5_AF1           0x0002      /* addr filter mode, bit 1 */
  156. #define DLCR5_AF0           0x0001      /* addr filter mode, bit 0 */
  157. /* DLCR6,7 -- configuration register */
  158. #define DLCR6_DISABLE_DLC   0x8000      /* disable data link controller */
  159. #define DLCR6_BIT_6         0x4000      /* unused; write 1 */
  160. #define DLCR6_SYS_BUS       0x2000      /* selects width of system bus */
  161. #define DLCR6_SYS_BUS_8     0x2000      /*   system bus is 8 bit */
  162. #define DLCR6_SYS_BUS_16    0x0000      /*   system bus is 16 bit */
  163. #define DLCR6_BUF_BUS       0x1000      /* selects width of buffer bus */
  164. #define DLCR6_BUF_BUS_8     0x1000      /*   buffer bus is 8 bits */
  165. #define DLCR6_BUF_BUS_16    0x0000      /*   buffer bus is 16 bits */
  166. #define DLCR6_TBS           0x0c00      /* selects Tx buffer size, 2 bits */
  167. #define DLCR6_TBS_2KB       0x0000      /*   Tx buffer size is 2 KB */
  168. #define DLCR6_TBS_4KB       0x0400      /*   Tx buffer size is 4 KB */
  169. #define DLCR6_TBS_8KB       0x0800      /*   Tx buffer size is 8 KB */
  170. #define DLCR6_TBS_16KB      0x0c00      /*   Tx buffer size is 16 KB */
  171. #define DLCR6_BS            0x0300      /* selects SRAM buffer size, 2 bits */
  172. #define DLCR6_BS_8KB        0x0000      /*   SRAM buffer size is 8 KB */
  173. #define DLCR6_BS_16KB       0x0100      /*   SRAM buffer size is 16 KB */
  174. #define DLCR6_BS_32KB       0x0200      /*   SRAM buffer size is 32 KB */
  175. #define DLCR6_BS_64KB       0x0300      /*   SRAM buffer size is 64 KB */
  176. #define DLCR7_CNF           0x00c0      /* selects chip config, 2 bits */
  177. #define DLCR7_CNF_NICE      0x0000      /*   normal NICE mode */
  178. #define DLCR7_CNF_MONITOR   0x0040      /*   add monitor function */
  179. #define DLCR7_CNF_BYPASS    0x0080      /*   bypass ENDEC */
  180. #define DLCR7_CNF_TEST      0x00c0      /*   test ENDEC */
  181. #define DLCR7_PWRDN         0x0020      /* selects standby power  mode */
  182. #define DLCR7_PWRDN_ON      0x0000      /*   standby mode on */
  183. #define DLCR7_PWRDN_OFF     0x0020      /*   standby mode off */
  184. #define DLCR7_BIT_4         0x0010      /* unused; write 1 */
  185. #define DLCR7_REG_BNK       0x000c      /* selects register bank, 2 bits */
  186. #define DLCR7_REG_BNK_DLC   0x0000      /*   DLC group 00 is mapped in */
  187. #define DLCR7_REG_BNK_HASH  0x0004      /*   HASH group 01 is mapped in */
  188. #define DLCR7_REG_BNK_BMR   0x000c      /*   BMR group 10 is mapped in */
  189. #define DLCR7_EOP_POL       0x0002      /* selects polarity of EOP pin */
  190. #define DLCR7_ENDIAN        0x0001      /* selects endian mode of system bus */
  191. #define DLCR7_ENDIAN_LITTLE 0x0000      /*   endian mode is little */
  192. #define DLCR7_ENDIAN_BIG    0x0001      /*   endian mode is big */
  193. /*
  194.  * DLCR8-DLCR13 are the node ID registers when register group 00 is mapped in.
  195.  * There are no bit defines for these registers.  Given an Ethernet address
  196.  * of 11:22:33:44:55:66, the following shows the relationship to these
  197.  * registers.
  198.  *   dlcr8  = 0x11;
  199.  *   dlcr9  = 0x22;
  200.  *       .....
  201.  *   dlcr13 = 0x66;
  202.  */
  203. /* 
  204.  * DLCR14,DLCR15 are the time domain reflectometer registers when register
  205.  * group 00 is mapped in.  There are no bit defines for these registers.
  206.  * R14 holds the LSB, R15 the MSB, both are read only.
  207.  */
  208. /* BMR8 -- buffer memory port.  There are no bit defines for this register. */
  209. /* BMR10,11 -- transmit collision control and start command register */
  210. #define BMR10_TMST          0x8000      /* transmit start command */
  211. #define BMR10_PKTS          0x7f00      /* number of packets to transmit */
  212. #define BMR11_BIT7          0x0080      /* unused, write with 0 */
  213. #define BMR11_BIT6          0x0040      /* unused, write with 0 */
  214. #define BMR11_BIT5          0x0020      /* unused, write with 0 */
  215. #define BMR11_BIT4          0x0010      /* unused, write with 0 */
  216. #define BMR11_BIT3          0x0008      /* unused, write with 0 */
  217. #define BMR11_MASK16        0x0004      /* something to do with 16 colls */
  218. #define BMR11_RST_TX16      0x0002      /*    "  */
  219. #define BMR11_OPT_16_COLL   0x0001      /*    "  */
  220. /* BMR12,13 -- DMA control register */
  221. #define BMR12_BIT7          0x8000      /* unused, write with 0 */
  222. #define BMR12_BIT6          0x4000      /* unused, write with 0 */
  223. #define BMR12_BIT5          0x2000      /* unused, write with 0 */
  224. #define BMR12_BIT4          0x1000      /* unused, write with 0 */
  225. #define BMR12_BIT3          0x0800      /* unused, write with 0 */
  226. #define BMR12_BIT2          0x0400      /* unused, write with 0 */
  227. #define BMR12_DMA_RENA      0x0200      /* DMA read enable */
  228. #define BMR12_DMA_TENA      0x0100      /* DMA write enable */
  229. /* BMR14 -- to be done */
  230. /* BMR15 -- currently no function */
  231. #ifdef __cplusplus
  232. }
  233. #endif
  234. #endif /* __INCmb86960h */