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.

smsc95xx.h 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. #ifndef _SMSC95XX_H
  2. #define _SMSC95XX_H
  3. /** @file
  4. *
  5. * SMSC LAN95xx USB Ethernet driver
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  9. #include <ipxe/usb.h>
  10. #include <ipxe/usbnet.h>
  11. #include <ipxe/if_ether.h>
  12. #include <ipxe/mii.h>
  13. /** Register write command */
  14. #define SMSC95XX_REGISTER_WRITE \
  15. ( USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
  16. USB_REQUEST_TYPE ( 0xa0 ) )
  17. /** Register read command */
  18. #define SMSC95XX_REGISTER_READ \
  19. ( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
  20. USB_REQUEST_TYPE ( 0xa1 ) )
  21. /** Get statistics command */
  22. #define SMSC95XX_GET_STATISTICS \
  23. ( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
  24. USB_REQUEST_TYPE ( 0xa2 ) )
  25. /** Interrupt status register */
  26. #define SMSC95XX_INT_STS 0x008
  27. #define SMSC95XX_INT_STS_RXDF_INT 0x00000800UL /**< RX FIFO overflow */
  28. #define SMSC95XX_INT_STS_PHY_INT 0x00008000UL /**< PHY interrupt */
  29. /** Transmit configuration register */
  30. #define SMSC95XX_TX_CFG 0x010
  31. #define SMSC95XX_TX_CFG_ON 0x00000004UL /**< TX enable */
  32. /** Hardware configuration register */
  33. #define SMSC95XX_HW_CFG 0x014
  34. #define SMSC95XX_HW_CFG_BIR 0x00001000UL /**< Bulk IN use NAK */
  35. #define SMSC95XX_HW_CFG_LRST 0x00000008UL /**< Soft lite reset */
  36. /** EEPROM command register */
  37. #define SMSC95XX_E2P_CMD 0x030
  38. #define SMSC95XX_E2P_CMD_EPC_BSY 0x80000000UL /**< EPC busy */
  39. #define SMSC95XX_E2P_CMD_EPC_CMD_READ 0x00000000UL /**< READ command */
  40. #define SMSC95XX_E2P_CMD_EPC_ADDR(addr) ( (addr) << 0 ) /**< EPC address */
  41. /** EEPROM data register */
  42. #define SMSC95XX_E2P_DATA 0x034
  43. #define SMSC95XX_E2P_DATA_GET(e2p_data) \
  44. ( ( (e2p_data) >> 0 ) & 0xff ) /**< EEPROM data */
  45. /** MAC address EEPROM address */
  46. #define SMSC95XX_EEPROM_MAC 0x01
  47. /** Interrupt endpoint control register */
  48. #define SMSC95XX_INT_EP_CTL 0x068
  49. #define SMSC95XX_INT_EP_CTL_RXDF_EN 0x00000800UL /**< RX FIFO overflow */
  50. #define SMSC95XX_INT_EP_CTL_PHY_EN 0x00008000UL /**< PHY interrupt */
  51. /** Bulk IN delay register */
  52. #define SMSC95XX_BULK_IN_DLY 0x06c
  53. #define SMSC95XX_BULK_IN_DLY_SET(ticks) ( (ticks) << 0 ) /**< Delay / 16.7ns */
  54. /** MAC control register */
  55. #define SMSC95XX_MAC_CR 0x100
  56. #define SMSC95XX_MAC_CR_RXALL 0x80000000UL /**< Receive all */
  57. #define SMSC95XX_MAC_CR_FDPX 0x00100000UL /**< Full duplex */
  58. #define SMSC95XX_MAC_CR_MCPAS 0x00080000UL /**< All multicast */
  59. #define SMSC95XX_MAC_CR_PRMS 0x00040000UL /**< Promiscuous */
  60. #define SMSC95XX_MAC_CR_PASSBAD 0x00010000UL /**< Pass bad frames */
  61. #define SMSC95XX_MAC_CR_TXEN 0x00000008UL /**< TX enabled */
  62. #define SMSC95XX_MAC_CR_RXEN 0x00000004UL /**< RX enabled */
  63. /** MAC address high register */
  64. #define SMSC95XX_ADDRH 0x104
  65. /** MAC address low register */
  66. #define SMSC95XX_ADDRL 0x108
  67. /** MII access register */
  68. #define SMSC95XX_MII_ACCESS 0x114
  69. #define SMSC95XX_MII_ACCESS_PHY_ADDRESS 0x00000800UL /**< PHY address */
  70. #define SMSC95XX_MII_ACCESS_MIIRINDA(addr) ( (addr) << 6 ) /**< MII register */
  71. #define SMSC95XX_MII_ACCESS_MIIWNR 0x00000002UL /**< MII write */
  72. #define SMSC95XX_MII_ACCESS_MIIBZY 0x00000001UL /**< MII busy */
  73. /** MII data register */
  74. #define SMSC95XX_MII_DATA 0x118
  75. #define SMSC95XX_MII_DATA_SET(data) ( (data) << 0 ) /**< Set data */
  76. #define SMSC95XX_MII_DATA_GET(mii_data) \
  77. ( ( (mii_data) >> 0 ) & 0xffff ) /**< Get data */
  78. /** PHY interrupt source MII register */
  79. #define SMSC95XX_MII_PHY_INTR_SOURCE 29
  80. /** PHY interrupt mask MII register */
  81. #define SMSC95XX_MII_PHY_INTR_MASK 30
  82. /** PHY interrupt: auto-negotiation complete */
  83. #define SMSC95XX_PHY_INTR_ANEG_DONE 0x0040
  84. /** PHY interrupt: link down */
  85. #define SMSC95XX_PHY_INTR_LINK_DOWN 0x0010
  86. /** MAC address */
  87. union smsc95xx_mac {
  88. /** MAC receive address registers */
  89. struct {
  90. /** MAC receive address low register */
  91. uint32_t l;
  92. /** MAC receive address high register */
  93. uint32_t h;
  94. } __attribute__ (( packed )) addr;
  95. /** Raw MAC address */
  96. uint8_t raw[ETH_ALEN];
  97. };
  98. /** Receive packet header */
  99. struct smsc95xx_rx_header {
  100. /** Command word */
  101. uint32_t command;
  102. } __attribute__ (( packed ));
  103. /** Runt frame */
  104. #define SMSC95XX_RX_RUNT 0x00004000UL
  105. /** Late collision */
  106. #define SMSC95XX_RX_LATE 0x00000040UL
  107. /** CRC error */
  108. #define SMSC95XX_RX_CRC 0x00000002UL
  109. /** Transmit packet header */
  110. struct smsc95xx_tx_header {
  111. /** Command word */
  112. uint32_t command;
  113. /** Frame length */
  114. uint32_t len;
  115. } __attribute__ (( packed ));
  116. /** First segment */
  117. #define SMSC95XX_TX_FIRST 0x00002000UL
  118. /** Last segment */
  119. #define SMSC95XX_TX_LAST 0x00001000UL
  120. /** Buffer size */
  121. #define SMSC95XX_TX_LEN(len) ( (len) << 0 )
  122. /** Interrupt packet format */
  123. struct smsc95xx_interrupt {
  124. /** Current value of INT_STS register */
  125. uint32_t int_sts;
  126. } __attribute__ (( packed ));
  127. /** Receive statistics */
  128. struct smsc95xx_rx_statistics {
  129. /** Good frames */
  130. uint32_t good;
  131. /** CRC errors */
  132. uint32_t crc;
  133. /** Runt frame errors */
  134. uint32_t undersize;
  135. /** Alignment errors */
  136. uint32_t alignment;
  137. /** Frame too long errors */
  138. uint32_t oversize;
  139. /** Later collision errors */
  140. uint32_t late;
  141. /** Bad frames */
  142. uint32_t bad;
  143. /** Dropped frames */
  144. uint32_t dropped;
  145. } __attribute__ (( packed ));
  146. /** Receive statistics */
  147. #define SMSC95XX_RX_STATISTICS 0
  148. /** Transmit statistics */
  149. struct smsc95xx_tx_statistics {
  150. /** Good frames */
  151. uint32_t good;
  152. /** Pause frames */
  153. uint32_t pause;
  154. /** Single collisions */
  155. uint32_t single;
  156. /** Multiple collisions */
  157. uint32_t multiple;
  158. /** Excessive collisions */
  159. uint32_t excessive;
  160. /** Late collisions */
  161. uint32_t late;
  162. /** Buffer underruns */
  163. uint32_t underrun;
  164. /** Excessive deferrals */
  165. uint32_t deferred;
  166. /** Carrier errors */
  167. uint32_t carrier;
  168. /** Bad frames */
  169. uint32_t bad;
  170. } __attribute__ (( packed ));
  171. /** Transmit statistics */
  172. #define SMSC95XX_TX_STATISTICS 1
  173. /** A SMSC95xx network device */
  174. struct smsc95xx_device {
  175. /** USB device */
  176. struct usb_device *usb;
  177. /** USB bus */
  178. struct usb_bus *bus;
  179. /** Network device */
  180. struct net_device *netdev;
  181. /** USB network device */
  182. struct usbnet_device usbnet;
  183. /** MII interface */
  184. struct mii_interface mii;
  185. /** Interrupt status */
  186. uint32_t int_sts;
  187. };
  188. /** Reset delay (in microseconds) */
  189. #define SMSC95XX_RESET_DELAY_US 2
  190. /** Maximum time to wait for EEPROM (in milliseconds) */
  191. #define SMSC95XX_EEPROM_MAX_WAIT_MS 100
  192. /** Maximum time to wait for MII (in milliseconds) */
  193. #define SMSC95XX_MII_MAX_WAIT_MS 100
  194. /** Interrupt maximum fill level
  195. *
  196. * This is a policy decision.
  197. */
  198. #define SMSC95XX_INTR_MAX_FILL 2
  199. /** Bulk IN maximum fill level
  200. *
  201. * This is a policy decision.
  202. */
  203. #define SMSC95XX_IN_MAX_FILL 8
  204. /** Bulk IN buffer size */
  205. #define SMSC95XX_IN_MTU \
  206. ( sizeof ( struct smsc95xx_rx_header ) + \
  207. ETH_FRAME_LEN + 4 /* possible VLAN header */ \
  208. + 4 /* CRC */ )
  209. #endif /* _SMSC95XX_H */