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

VxWorks

开发平台:

C/C++

  1. /* if_es.h - Dynatem etherstar interface header */
  2. /* Copyright (c) 1988 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,15oct90,phf  written.
  7. */
  8. #ifndef __INCif_esh
  9. #define __INCif_esh
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #define INET
  14. #define ES_MIN_FIRST_DATA_CHAIN 96 /* min size of 1st buf in data-chain */
  15. #define ES_MAX_MDS 128 /* max number of [r|t]md's */
  16. typedef struct {
  17.     u_char dlcr0; /* $00 */
  18. #define es_tmt_ok 0x80
  19. #define es_net_bsy 0x40
  20. #define es_16_col 0x02
  21.     u_char dlcr1; /* $01  */
  22. #define ES_TMT_MASK 0x82
  23.     u_char dlcr2; /* $02 */
  24. #define es_pkt_rdy 0x80
  25. #define es_bus_rd_err 0x40
  26.     u_char dlcr3; /* $03 */
  27. #define ES_RCV_MASK 0x80
  28.     u_char dlcr4; /* $04 */
  29. #define es_lbc 0x02
  30. #define es_tm 0x04
  31.     u_char dlcr5; /* $05 */
  32. #define es_buf_emp 0x40
  33.     u_char dlcr6; /* $06 */
  34. #define es_ena_dlc 0x80
  35.     u_char dlcr7; /* $07 */
  36.     u_char dlcr8; /* $08 */
  37.     u_char dlcr9; /* $09 */
  38.     u_char dlcr10; /* $0a */
  39.     u_char dlcr11; /* $0b */
  40.     u_char dlcr12; /* $0c */
  41.     u_char dlcr13; /* $0d */
  42.     u_char dlcr14; /* $0e */
  43.     u_char dlcr15; /* $0f */
  44. u_short bmpr0; /* $10 */
  45. /*ccc u_short bmpr1; */
  46. u_short bmpr2; /* $12 */
  47. /*XXX   u_short bmpr3; */
  48.     u_char bmpr4; /* $14 */
  49. u_char extra15;
  50. u_char extra16;
  51. u_char extra17;
  52. u_char extra18;
  53. u_char extra19;
  54. u_char extra1a;
  55. u_char extra1b;
  56. u_char extra1c;
  57. u_char extra1d;
  58. u_char extra1e;
  59. u_char extra1f;
  60. u_char ROM_IDa;
  61. u_char eth_vector; /* $21 */
  62. u_char ROM_IDb;
  63. u_char eth_vector1;
  64. u_char ROM_IDc;
  65. u_char eth_vector2;
  66. u_char ROM_IDd;
  67. u_char eth_vector3;
  68. u_char ROM_IDe;
  69. u_char eth_vector4;
  70. u_char ROM_IDf;
  71. u_char eth_vector5;
  72.      } ES_DEVICE;
  73. #define ls_if ls_ac.ac_if /* network-visible interface */
  74. #define ls_enaddr  ls_ac.ac_enaddr /* hardware ethernet address */
  75. /*
  76.  * Initialization Block.
  77.  * Specifies addresses of receive and transmit descriptor rings.
  78.  */
  79. typedef struct esIB
  80.     {
  81.     u_short esIBMode; /* mode register */
  82.     char esIBPadr [6]; /* PADR: byte swapped ethernet physical address */
  83. /* LADRF: logical address filter */
  84.     u_short esIBLadrfLow; /* least significant word */
  85.     u_short esIBLadrfMidLow; /* low middle word */
  86.     u_short esIBLadrfMidHigh;   /* high middle word */
  87.     u_short esIBLadrfHigh; /* most significant word */
  88. /* RDRA: read ring address */
  89.     u_short esIBRdraLow; /* low word */
  90.     u_short esIBRdraHigh; /* high word */
  91. /* TDRA: transmit ring address */
  92.     u_short esIBTdraLow; /* low word */
  93.     u_short esIBTdraHigh; /* high word */
  94.     } es_ib;
  95. /*
  96.  * Receive Message Descriptor Entry.
  97.  * Four words per entry.  Number of entries must be a power of two.
  98.  */
  99. typedef struct esRMD
  100.     {
  101.     u_short esRMD0; /* bits 15:00 of receive buffer address */
  102.     union
  103. {
  104.         u_short     esRMD1; /* bits 23:16 of receive buffer address */
  105. u_short     es_rmd1b;
  106.         } es_rmd1;
  107.     u_short esRMD2; /* buffer byte count (negative) */
  108.     u_short esRMD3; /* message byte count */
  109.     } es_rmd;
  110. #define esrmd1_OWN 0x8000 /* Own */
  111. #define esrmd1_ERR      0x4000          /* Error */
  112. #define esrmd1_FRAM     0x2000          /* Framming Error */
  113. #define esrmd1_OFLO     0x1000          /* Overflow */
  114. #define esrmd1_CRC      0x0800          /* CRC */
  115. #define esrmd1_BUFF     0x0400          /* Buffer Error */
  116. #define esrmd1_STP      0x0200          /* Start of Packet */
  117. #define esrmd1_ENP      0x0100          /* End of Packet */
  118. #define esrmd1_HADR     0x00FF          /* High Address */
  119. #define RMD_ERR 0x6000
  120. #define rbuf_ladr esRMD0
  121. #define rbuf_rmd1 es_rmd1.esRMD1
  122. #define rbuf_bcnt esRMD2
  123. #define rbuf_mcnt esRMD3
  124. /*
  125.  * Transmit Message Descriptor Entry.
  126.  * Four words per entry.  Number of entries must be a power of two.
  127.  */
  128. typedef struct esTMD
  129.     {
  130.     u_short esTMD0; /* bits 15:00 of transmit buffer address */
  131.     union
  132. {
  133.         u_short     esTMD1; /* bits 23:16 of transmit buffer address */
  134. u_short     es_tmd1b;
  135. } es_tmd1;
  136.     u_short esTMD2; /* message byte count */
  137.     union
  138. {
  139. u_short     esTMD3; /* errors */
  140. u_short     es_tmd3b;
  141.         } es_tmd3;
  142.     } es_tmd;
  143. #define estmd1_OWN      0x8000          /* Own */
  144. #define estmd1_ERR      0x4000          /* Error */
  145. #define estmd1_MORE     0x1000          /* More than One Retry */
  146. #define estmd1_ONE      0x0800          /* One Retry */
  147. #define estmd1_DEF      0x0400          /* Deferred */
  148. #define estmd1_STP      0x0200          /* Start of Packet */
  149. #define estmd1_ENP      0x0100          /* End of Packet */
  150. #define estmd1_HADR     0x00FF          /* High Address */
  151. #define estmd3_BUFF     0x8000          /* Buffer Error */
  152. #define estmd3_UFLO     0x4000          /* Underflow Error */
  153. #define estmd3_LCOL     0x1000          /* Late Collision */
  154. #define estmd3_LCAR     0x0800          /* Lost Carrier */
  155. #define estmd3_RTRY     0x0400          /* Retry Error */
  156. #define estmd3_TDR      0x03FF          /* Time Domain Reflectometry */
  157. #define TMD_OWN 0x8000
  158. #define TMD_ERR 0x6000
  159. #define TMD_BUFF 0x8000
  160. #define TMD_UFLO 0x4000
  161. #define TMD_LCAR 0x0800
  162. #define tbuf_ladr esTMD0
  163. #define tbuf_tmd1 es_tmd1.esTMD1
  164. #define tbuf_bcnt esTMD2
  165. #define tbuf_tmd3 es_tmd3.esTMD3
  166. #define ES_BUFSIZE (ETHERMTU + sizeof (struct ether_header) + 6)
  167. #define ES_RMD_RLEN 5 /* ring size as a power of 2 -- 32 RMD's */
  168. #define ES_TMD_TLEN 5 /* same for transmit ring    -- 32 TMD's */
  169. #define ES_NUM_RESERVES 8 /* have up to 8 reserved RMD's for loans */
  170. /* Ethernet software status per interface.
  171.  *
  172.  * Each interface is referenced by a network interface structure,
  173.  * ls_if, which the routing code uses to locate the interface.
  174.  * This structure contains the output queue for the interface,
  175.  * its address, etc.
  176.  */
  177. struct ls_softc
  178.     {
  179.     struct arpcom  ls_ac; /* ethernet common part */
  180.     es_ib   *ib; /* Initialization Block */
  181.     struct
  182. {
  183.         int r_po2; /* RMD ring size as a power of 2! */
  184. int r_size; /* RMD ring size (power of 2!) */
  185. int r_index; /* index into RMD ring */
  186. es_rmd *r_ring; /* RMD ring */
  187. char *r_bufs; /* receive buffers base */
  188.         } rmd_ring;
  189.     struct 
  190. {
  191.         int t_po2; /* TMD ring size as a power of 2! */
  192. int t_size; /* TMD ring size (power of 2!) */
  193. int t_index; /* index into TMD ring */
  194. int d_index; /* index into TMD ring */
  195. es_tmd *t_ring; /* TMD ring */
  196. char *t_bufs; /* transmit buffers base */
  197.         } tmd_ring;
  198.     u_char ls_flags; /* misc control flags */
  199.     int ivec; /* interrupt vector */
  200.     int ilevel; /* interrupt level */
  201.     ES_DEVICE *devAdrs; /* device structure address */
  202.     char *memBase; /* LANCE memory pool base */
  203.     int    memWidth; /* width of data port */
  204.     int csr0Errs; /* count of csr0 errors */
  205.     int bufSize; /* size of buffer in the LANCE ring */
  206.     BOOL canLoanRmds; /* can we loan out rmd's as clusters? */
  207.     char *freeBufs[ES_NUM_RESERVES]; /* available reserve buffers */
  208.     int nFree; /* number of free reserve buffers */
  209.     u_char loanRefCnt[ES_MAX_MDS]; /* reference counts for loaned RMD's */
  210.     };
  211. #define LS_PROMISCUOUS_FLAG 0x1
  212. #define LS_MEM_ALLOC_FLAG 0x2
  213. #define LS_PAD_USED_FLAG 0x4
  214. #define LS_RCV_HANDLING_FLAG 0x8
  215. #define LS_START_OUTPUT_FLAG 0x10
  216. #define ls_if ls_ac.ac_if /* network-visible interface */
  217. #define ls_enaddr  ls_ac.ac_enaddr /* hardware ethernet address */
  218. #define ls_rpo2 rmd_ring.r_po2
  219. #define ls_rsize rmd_ring.r_size
  220. #define ls_rindex rmd_ring.r_index
  221. #define ls_rring rmd_ring.r_ring
  222. #define ls_tpo2 tmd_ring.t_po2
  223. #define ls_tsize tmd_ring.t_size
  224. #define ls_tindex tmd_ring.t_index
  225. #define ls_dindex tmd_ring.d_index
  226. #define ls_tring tmd_ring.t_ring
  227. #ifdef __cplusplus
  228. }
  229. #endif
  230. #endif /* __INCif_esh */