You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

smsc75xx.h 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #ifndef _SMSC75XX_H
  2. #define _SMSC75XX_H
  3. /** @file
  4. *
  5. * SMSC LAN75xx USB Ethernet driver
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  9. #include "smscusb.h"
  10. /** Interrupt status register */
  11. #define SMSC75XX_INT_STS 0x00c
  12. #define SMSC75XX_INT_STS_RDFO_INT 0x00400000UL /**< RX FIFO overflow */
  13. #define SMSC75XX_INT_STS_PHY_INT 0x00020000UL /**< PHY interrupt */
  14. /** Hardware configuration register */
  15. #define SMSC75XX_HW_CFG 0x010
  16. #define SMSC75XX_HW_CFG_BIR 0x00000080UL /**< Bulk IN use NAK */
  17. #define SMSC75XX_HW_CFG_LRST 0x00000002UL /**< Soft lite reset */
  18. /** Interrupt endpoint control register */
  19. #define SMSC75XX_INT_EP_CTL 0x038
  20. #define SMSC75XX_INT_EP_CTL_RDFO_EN 0x00400000UL /**< RX FIFO overflow */
  21. #define SMSC75XX_INT_EP_CTL_PHY_EN 0x00020000UL /**< PHY interrupt */
  22. /** Bulk IN delay register */
  23. #define SMSC75XX_BULK_IN_DLY 0x03c
  24. #define SMSC75XX_BULK_IN_DLY_SET(ticks) ( (ticks) << 0 ) /**< Delay / 16.7ns */
  25. /** EEPROM register base */
  26. #define SMSC75XX_E2P_BASE 0x040
  27. /** Receive filtering engine control register */
  28. #define SMSC75XX_RFE_CTL 0x060
  29. #define SMSC75XX_RFE_CTL_AB 0x00000400UL /**< Accept broadcast */
  30. #define SMSC75XX_RFE_CTL_AM 0x00000200UL /**< Accept multicast */
  31. #define SMSC75XX_RFE_CTL_AU 0x00000100UL /**< Accept unicast */
  32. /** FIFO controller RX FIFO control register */
  33. #define SMSC75XX_FCT_RX_CTL 0x090
  34. #define SMSC75XX_FCT_RX_CTL_EN 0x80000000UL /**< FCT RX enable */
  35. #define SMSC75XX_FCT_RX_CTL_BAD 0x02000000UL /**< Store bad frames */
  36. /** FIFO controller TX FIFO control register */
  37. #define SMSC75XX_FCT_TX_CTL 0x094
  38. #define SMSC75XX_FCT_TX_CTL_EN 0x80000000UL /**< FCT TX enable */
  39. /** MAC receive register */
  40. #define SMSC75XX_MAC_RX 0x104
  41. #define SMSC75XX_MAC_RX_MAX_SIZE(mtu) ( (mtu) << 16 ) /**< Max frame size */
  42. #define SMSC75XX_MAC_RX_MAX_SIZE_DEFAULT \
  43. SMSC75XX_MAC_RX_MAX_SIZE ( ETH_FRAME_LEN + 4 /* VLAN */ + 4 /* CRC */ )
  44. #define SMSC75XX_MAC_RX_FCS 0x00000010UL /**< FCS stripping */
  45. #define SMSC75XX_MAC_RX_EN 0x00000001UL /**< RX enable */
  46. /** MAC transmit register */
  47. #define SMSC75XX_MAC_TX 0x108
  48. #define SMSC75XX_MAC_TX_EN 0x00000001UL /**< TX enable */
  49. /** MAC receive address register base */
  50. #define SMSC75XX_RX_ADDR_BASE 0x118
  51. /** MII register base */
  52. #define SMSC75XX_MII_BASE 0x120
  53. /** PHY interrupt source MII register */
  54. #define SMSC75XX_MII_PHY_INTR_SOURCE 29
  55. /** PHY interrupt mask MII register */
  56. #define SMSC75XX_MII_PHY_INTR_MASK 30
  57. /** PHY interrupt: auto-negotiation complete */
  58. #define SMSC75XX_PHY_INTR_ANEG_DONE 0x0040
  59. /** PHY interrupt: link down */
  60. #define SMSC75XX_PHY_INTR_LINK_DOWN 0x0010
  61. /** MAC address perfect filter register base */
  62. #define SMSC75XX_ADDR_FILT_BASE 0x300
  63. /** Receive packet header */
  64. struct smsc75xx_rx_header {
  65. /** RX command word */
  66. uint32_t command;
  67. /** VLAN tag */
  68. uint16_t vtag;
  69. /** Checksum */
  70. uint16_t csum;
  71. /** Two-byte padding used to align Ethernet payload */
  72. uint16_t pad;
  73. } __attribute__ (( packed ));
  74. /** Receive error detected */
  75. #define SMSC75XX_RX_RED 0x00400000UL
  76. /** Transmit packet header */
  77. struct smsc75xx_tx_header {
  78. /** TX command word */
  79. uint32_t command;
  80. /** VLAN tag */
  81. uint16_t tag;
  82. /** Maximum segment size */
  83. uint16_t mss;
  84. } __attribute__ (( packed ));
  85. /** Insert frame checksum and pad */
  86. #define SMSC75XX_TX_FCS 0x00400000UL
  87. /** Byte count statistics */
  88. struct smsc75xx_byte_statistics {
  89. /** Unicast byte count */
  90. uint32_t unicast;
  91. /** Broadcast byte count */
  92. uint32_t broadcast;
  93. /** Multicast byte count */
  94. uint32_t multicast;
  95. } __attribute__ (( packed ));
  96. /** Frame count statistics */
  97. struct smsc75xx_frame_statistics {
  98. /** Unicast frames */
  99. uint32_t unicast;
  100. /** Broadcast frames */
  101. uint32_t broadcast;
  102. /** Multicast frames */
  103. uint32_t multicast;
  104. /** Pause frames */
  105. uint32_t pause;
  106. /** Frames by length category */
  107. uint32_t len[7];
  108. } __attribute__ (( packed ));
  109. /** Receive error statistics */
  110. struct smsc75xx_rx_error_statistics {
  111. /** FCS errors */
  112. uint32_t fcs;
  113. /** Alignment errors */
  114. uint32_t alignment;
  115. /** Fragment errors */
  116. uint32_t fragment;
  117. /** Jabber errors */
  118. uint32_t jabber;
  119. /** Undersize frame errors */
  120. uint32_t undersize;
  121. /** Oversize frame errors */
  122. uint32_t oversize;
  123. /** Dropped frame errors */
  124. uint32_t dropped;
  125. } __attribute__ (( packed ));
  126. /** Receive statistics */
  127. struct smsc75xx_rx_statistics {
  128. /** Error statistics */
  129. struct smsc75xx_rx_error_statistics err;
  130. /** Byte count statistics */
  131. struct smsc75xx_byte_statistics byte;
  132. /** Frame count statistics */
  133. struct smsc75xx_frame_statistics frame;
  134. } __attribute__ (( packed ));
  135. /** Transmit error statistics */
  136. struct smsc75xx_tx_error_statistics {
  137. /** FCS errors */
  138. uint32_t fcs;
  139. /** Excess deferral errors */
  140. uint32_t deferral;
  141. /** Carrier errors */
  142. uint32_t carrier;
  143. /** Bad byte count */
  144. uint32_t count;
  145. /** Single collisions */
  146. uint32_t single;
  147. /** Multiple collisions */
  148. uint32_t multiple;
  149. /** Excession collisions */
  150. uint32_t excessive;
  151. /** Late collisions */
  152. uint32_t late;
  153. } __attribute__ (( packed ));
  154. /** Transmit statistics */
  155. struct smsc75xx_tx_statistics {
  156. /** Error statistics */
  157. struct smsc75xx_tx_error_statistics err;
  158. /** Byte count statistics */
  159. struct smsc75xx_byte_statistics byte;
  160. /** Frame count statistics */
  161. struct smsc75xx_frame_statistics frame;
  162. } __attribute__ (( packed ));
  163. /** Statistics */
  164. struct smsc75xx_statistics {
  165. /** Receive statistics */
  166. struct smsc75xx_rx_statistics rx;
  167. /** Transmit statistics */
  168. struct smsc75xx_tx_statistics tx;
  169. } __attribute__ (( packed ));
  170. /** Maximum time to wait for reset (in milliseconds) */
  171. #define SMSC75XX_RESET_MAX_WAIT_MS 100
  172. /** Bulk IN maximum fill level
  173. *
  174. * This is a policy decision.
  175. */
  176. #define SMSC75XX_IN_MAX_FILL 8
  177. /** Bulk IN buffer size */
  178. #define SMSC75XX_IN_MTU \
  179. ( sizeof ( struct smsc75xx_rx_header ) + \
  180. ETH_FRAME_LEN + 4 /* possible VLAN header */ )
  181. extern struct usb_endpoint_driver_operations smsc75xx_in_operations;
  182. extern int smsc75xx_dump_statistics ( struct smscusb_device *smscusb );
  183. extern int smsc75xx_transmit ( struct net_device *netdev,
  184. struct io_buffer *iobuf );
  185. extern void smsc75xx_poll ( struct net_device *netdev );
  186. #endif /* _SMSC75XX_H */