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 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 "smscusb.h"
  10. /** Interrupt status register */
  11. #define SMSC95XX_INT_STS 0x008
  12. #define SMSC95XX_INT_STS_RXDF_INT 0x00000800UL /**< RX FIFO overflow */
  13. #define SMSC95XX_INT_STS_PHY_INT 0x00008000UL /**< PHY interrupt */
  14. /** Transmit configuration register */
  15. #define SMSC95XX_TX_CFG 0x010
  16. #define SMSC95XX_TX_CFG_ON 0x00000004UL /**< TX enable */
  17. /** Hardware configuration register */
  18. #define SMSC95XX_HW_CFG 0x014
  19. #define SMSC95XX_HW_CFG_BIR 0x00001000UL /**< Bulk IN use NAK */
  20. #define SMSC95XX_HW_CFG_LRST 0x00000008UL /**< Soft lite reset */
  21. /** LED GPIO configuration register */
  22. #define SMSC95XX_LED_GPIO_CFG 0x024
  23. #define SMSC95XX_LED_GPIO_CFG_GPCTL2(x) ( (x) << 24 ) /**< GPIO 2 control */
  24. #define SMSC95XX_LED_GPIO_CFG_GPCTL2_NSPD_LED \
  25. SMSC95XX_LED_GPIO_CFG_GPCTL2 ( 1 ) /**< Link speed LED */
  26. #define SMSC95XX_LED_GPIO_CFG_GPCTL1(x) ( (x) << 20 ) /**< GPIO 1 control */
  27. #define SMSC95XX_LED_GPIO_CFG_GPCTL1_NLNKA_LED \
  28. SMSC95XX_LED_GPIO_CFG_GPCTL1 ( 1 ) /**< Activity LED */
  29. #define SMSC95XX_LED_GPIO_CFG_GPCTL0(x) ( (x) << 16 ) /**< GPIO 0 control */
  30. #define SMSC95XX_LED_GPIO_CFG_GPCTL0_NFDX_LED \
  31. SMSC95XX_LED_GPIO_CFG_GPCTL0 ( 1 ) /**< Full-duplex LED */
  32. /** EEPROM register base */
  33. #define SMSC95XX_E2P_BASE 0x030
  34. /** Interrupt endpoint control register */
  35. #define SMSC95XX_INT_EP_CTL 0x068
  36. #define SMSC95XX_INT_EP_CTL_RXDF_EN 0x00000800UL /**< RX FIFO overflow */
  37. #define SMSC95XX_INT_EP_CTL_PHY_EN 0x00008000UL /**< PHY interrupt */
  38. /** Bulk IN delay register */
  39. #define SMSC95XX_BULK_IN_DLY 0x06c
  40. #define SMSC95XX_BULK_IN_DLY_SET(ticks) ( (ticks) << 0 ) /**< Delay / 16.7ns */
  41. /** MAC control register */
  42. #define SMSC95XX_MAC_CR 0x100
  43. #define SMSC95XX_MAC_CR_RXALL 0x80000000UL /**< Receive all */
  44. #define SMSC95XX_MAC_CR_FDPX 0x00100000UL /**< Full duplex */
  45. #define SMSC95XX_MAC_CR_MCPAS 0x00080000UL /**< All multicast */
  46. #define SMSC95XX_MAC_CR_PRMS 0x00040000UL /**< Promiscuous */
  47. #define SMSC95XX_MAC_CR_PASSBAD 0x00010000UL /**< Pass bad frames */
  48. #define SMSC95XX_MAC_CR_TXEN 0x00000008UL /**< TX enabled */
  49. #define SMSC95XX_MAC_CR_RXEN 0x00000004UL /**< RX enabled */
  50. /** MAC address register base */
  51. #define SMSC95XX_ADDR_BASE 0x104
  52. /** MII register base */
  53. #define SMSC95XX_MII_BASE 0x0114
  54. /** PHY interrupt source MII register */
  55. #define SMSC95XX_MII_PHY_INTR_SOURCE 29
  56. /** PHY interrupt mask MII register */
  57. #define SMSC95XX_MII_PHY_INTR_MASK 30
  58. /** PHY interrupt: auto-negotiation complete */
  59. #define SMSC95XX_PHY_INTR_ANEG_DONE 0x0040
  60. /** PHY interrupt: link down */
  61. #define SMSC95XX_PHY_INTR_LINK_DOWN 0x0010
  62. /** Receive packet header */
  63. struct smsc95xx_rx_header {
  64. /** Command word */
  65. uint32_t command;
  66. } __attribute__ (( packed ));
  67. /** Runt frame */
  68. #define SMSC95XX_RX_RUNT 0x00004000UL
  69. /** Late collision */
  70. #define SMSC95XX_RX_LATE 0x00000040UL
  71. /** CRC error */
  72. #define SMSC95XX_RX_CRC 0x00000002UL
  73. /** Transmit packet header */
  74. struct smsc95xx_tx_header {
  75. /** Command word */
  76. uint32_t command;
  77. /** Frame length */
  78. uint32_t len;
  79. } __attribute__ (( packed ));
  80. /** First segment */
  81. #define SMSC95XX_TX_FIRST 0x00002000UL
  82. /** Last segment */
  83. #define SMSC95XX_TX_LAST 0x00001000UL
  84. /** Buffer size */
  85. #define SMSC95XX_TX_LEN(len) ( (len) << 0 )
  86. /** Receive statistics */
  87. struct smsc95xx_rx_statistics {
  88. /** Good frames */
  89. uint32_t good;
  90. /** CRC errors */
  91. uint32_t crc;
  92. /** Runt frame errors */
  93. uint32_t undersize;
  94. /** Alignment errors */
  95. uint32_t alignment;
  96. /** Frame too long errors */
  97. uint32_t oversize;
  98. /** Later collision errors */
  99. uint32_t late;
  100. /** Bad frames */
  101. uint32_t bad;
  102. /** Dropped frames */
  103. uint32_t dropped;
  104. } __attribute__ (( packed ));
  105. /** Receive statistics */
  106. #define SMSC95XX_RX_STATISTICS 0
  107. /** Transmit statistics */
  108. struct smsc95xx_tx_statistics {
  109. /** Good frames */
  110. uint32_t good;
  111. /** Pause frames */
  112. uint32_t pause;
  113. /** Single collisions */
  114. uint32_t single;
  115. /** Multiple collisions */
  116. uint32_t multiple;
  117. /** Excessive collisions */
  118. uint32_t excessive;
  119. /** Late collisions */
  120. uint32_t late;
  121. /** Buffer underruns */
  122. uint32_t underrun;
  123. /** Excessive deferrals */
  124. uint32_t deferred;
  125. /** Carrier errors */
  126. uint32_t carrier;
  127. /** Bad frames */
  128. uint32_t bad;
  129. } __attribute__ (( packed ));
  130. /** Transmit statistics */
  131. #define SMSC95XX_TX_STATISTICS 1
  132. /** Reset delay (in microseconds) */
  133. #define SMSC95XX_RESET_DELAY_US 2
  134. /** Bulk IN maximum fill level
  135. *
  136. * This is a policy decision.
  137. */
  138. #define SMSC95XX_IN_MAX_FILL 8
  139. /** Bulk IN buffer size */
  140. #define SMSC95XX_IN_MTU \
  141. ( sizeof ( struct smsc95xx_rx_header ) + \
  142. ETH_FRAME_LEN + 4 /* possible VLAN header */ \
  143. + 4 /* CRC */ )
  144. /** Honeywell VM3 MAC address OEM string index */
  145. #define SMSC95XX_VM3_OEM_STRING_MAC 2
  146. #endif /* _SMSC95XX_H */