m68360_enet.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /***********************************
  2. * $Id: m68360_enet.h,v 1.1 2002/03/02 15:01:07 gerg Exp $
  3. ***********************************
  4. *
  5. ***************************************
  6. * Definitions for the ETHERNET controllers
  7. ***************************************
  8. */
  9. #ifndef __ETHER_H
  10. #define __ETHER_H
  11. #include "quicc_simple.h"
  12. /*
  13. * transmit BD's
  14. */
  15. #define T_R 0x8000 /* ready bit */
  16. #define E_T_PAD 0x4000 /* short frame padding */
  17. #define T_W 0x2000 /* wrap bit */
  18. #define T_I 0x1000 /* interrupt on completion */
  19. #define T_L 0x0800 /* last in frame */
  20. #define T_TC 0x0400 /* transmit CRC (when last) */
  21. #define T_DEF 0x0200 /* defer indication */
  22. #define T_HB 0x0100 /* heartbeat */
  23. #define T_LC 0x0080 /* error: late collision */
  24. #define T_RL 0x0040 /* error: retransmission limit */
  25. #define T_RC 0x003c /* retry count */
  26. #define T_UN 0x0002 /* error: underrun */
  27. #define T_CSL 0x0001 /* carier sense lost */
  28. #define T_ERROR (T_HB | T_LC | T_RL | T_UN | T_CSL)
  29. /*
  30. * receive BD's
  31. */
  32. #define R_E 0x8000 /* buffer empty */
  33. #define R_W 0x2000 /* wrap bit */
  34. #define R_I 0x1000 /* interrupt on reception */
  35. #define R_L 0x0800 /* last BD in frame */
  36. #define R_F 0x0400 /* first BD in frame */
  37. #define R_M 0x0100 /* received because of promisc. mode */
  38. #define R_LG 0x0020 /* frame too long */
  39. #define R_NO 0x0010 /* non-octet aligned */
  40. #define R_SH 0x0008 /* short frame */
  41. #define R_CR 0x0004 /* receive CRC error */
  42. #define R_OV 0x0002 /* receive overrun */
  43. #define R_CL 0x0001 /* collision */
  44. #define ETHER_R_ERROR (R_LG | R_NO | R_SH | R_CR | R_OV | R_CL)
  45. /*
  46. * ethernet interrupts
  47. */
  48. #define ETHERNET_GRA 0x0080 /* graceful stop complete */
  49. #define ETHERNET_TXE 0x0010 /* transmit error */
  50. #define ETHERNET_RXF 0x0008 /* receive frame */
  51. #define ETHERNET_BSY 0x0004 /* busy condition */
  52. #define ETHERNET_TXB 0x0002 /* transmit buffer */
  53. #define ETHERNET_RXB 0x0001 /* receive buffer */
  54. /*
  55. * ethernet protocol specific mode register (PSMR)
  56. */
  57. #define ETHER_HBC 0x8000 /* heartbeat checking */
  58. #define ETHER_FC 0x4000 /* force collision */
  59. #define ETHER_RSH 0x2000 /* receive short frames */
  60. #define ETHER_IAM 0x1000 /* individual address mode */
  61. #define ETHER_CRC_32 (0x2<<10) /* Enable CRC */
  62. #define ETHER_PRO 0x0200 /* promiscuous */
  63. #define ETHER_BRO 0x0100 /* broadcast address */
  64. #define ETHER_SBT 0x0080 /* stop backoff timer */
  65. #define ETHER_LPB 0x0040 /* Loop Back Mode */
  66. #define ETHER_SIP 0x0020 /* sample input pins */
  67. #define ETHER_LCW 0x0010 /* late collision window */
  68. #define ETHER_NIB_13 (0x0<<1) /* # of ignored bits 13 */
  69. #define ETHER_NIB_14 (0x1<<1) /* # of ignored bits 14 */
  70. #define ETHER_NIB_15 (0x2<<1) /* # of ignored bits 15 */
  71. #define ETHER_NIB_16 (0x3<<1) /* # of ignored bits 16 */
  72. #define ETHER_NIB_21 (0x4<<1) /* # of ignored bits 21 */
  73. #define ETHER_NIB_22 (0x5<<1) /* # of ignored bits 22 */
  74. #define ETHER_NIB_23 (0x6<<1) /* # of ignored bits 23 */
  75. #define ETHER_NIB_24 (0x7<<1) /* # of ignored bits 24 */
  76. /*
  77. * ethernet specific parameters
  78. */
  79. #define CRC_WORD 4 /* Length in bytes of CRC */
  80. #define C_PRES 0xffffffff /* preform 32 bit CRC */
  81. #define C_MASK 0xdebb20e3 /* comply with 32 bit CRC */
  82. #define CRCEC 0x00000000
  83. #define ALEC 0x00000000
  84. #define DISFC 0x00000000
  85. #define PADS 0x00000000
  86. #define RET_LIM 0x000f /* retry 15 times to send a frame before interrupt */
  87. #define ETH_MFLR 0x05ee /* 1518 max frame size */
  88. #define MINFLR 0x0040 /* Minimum frame size 64 */
  89. #define MAXD1 0x05ee /* Max dma count 1518 */
  90. #define MAXD2 0x05ee
  91. #define GADDR1 0x00000000 /* Clear group address */
  92. #define GADDR2 0x00000000
  93. #define GADDR3 0x00000000
  94. #define GADDR4 0x00000000
  95. #define P_PER 0x00000000 /*not used */
  96. #define IADDR1 0x00000000 /* Individual hash table not used */
  97. #define IADDR2 0x00000000
  98. #define IADDR3 0x00000000
  99. #define IADDR4 0x00000000
  100. #define TADDR_H 0x00000000 /* clear this regs */
  101. #define TADDR_M 0x00000000
  102. #define TADDR_L 0x00000000
  103. /* SCC Parameter Ram */
  104. #define RFCR 0x18 /* normal operation */
  105. #define TFCR 0x18 /* normal operation */
  106. #define E_MRBLR 1518 /* Max ethernet frame length */
  107. /*
  108. * ethernet specific structure
  109. */
  110. typedef union {
  111. unsigned char b[6];
  112. struct {
  113. unsigned short high;
  114. unsigned short middl;
  115. unsigned short low;
  116. } w;
  117. } ETHER_ADDR;
  118. typedef struct {
  119. int max_frame_length;
  120. int promisc_mode;
  121. int reject_broadcast;
  122. ETHER_ADDR phys_adr;
  123. } ETHER_SPECIFIC;
  124. typedef struct {
  125. ETHER_ADDR dst_addr;
  126. ETHER_ADDR src_addr;
  127. unsigned short type_or_len;
  128. unsigned char data[1];
  129. } ETHER_FRAME;
  130. #define MAX_DATALEN 1500
  131. typedef struct {
  132. ETHER_ADDR dst_addr;
  133. ETHER_ADDR src_addr;
  134. unsigned short type_or_len;
  135. unsigned char data[MAX_DATALEN];
  136. unsigned char fcs[CRC_WORD];
  137. } ETHER_MAX_FRAME;
  138. /*
  139. * Internal ethernet function prototypes
  140. */
  141. void ether_interrupt(int scc_num);
  142. /* mleslie: debug */
  143. /* static void ethernet_rx_internal(int scc_num); */
  144. /* static void ethernet_tx_internal(int scc_num); */
  145. /*
  146. * User callable routines prototypes (ethernet specific)
  147. */
  148. void ethernet_init(int scc_number,
  149. alloc_routine *alloc_buffer,
  150. free_routine *free_buffer,
  151. store_rx_buffer_routine *store_rx_buffer,
  152. handle_tx_error_routine *handle_tx_error,
  153. handle_rx_error_routine *handle_rx_error,
  154. handle_lost_error_routine *handle_lost_error,
  155. ETHER_SPECIFIC *ether_spec);
  156. int ethernet_tx(int scc_number, void *buf, int length);
  157. #endif