Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

smsc95xx.h 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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. /** Receive packet header */
  55. struct smsc95xx_rx_header {
  56. /** Command word */
  57. uint32_t command;
  58. } __attribute__ (( packed ));
  59. /** Runt frame */
  60. #define SMSC95XX_RX_RUNT 0x00004000UL
  61. /** Late collision */
  62. #define SMSC95XX_RX_LATE 0x00000040UL
  63. /** CRC error */
  64. #define SMSC95XX_RX_CRC 0x00000002UL
  65. /** Transmit packet header */
  66. struct smsc95xx_tx_header {
  67. /** Command word */
  68. uint32_t command;
  69. /** Frame length */
  70. uint32_t len;
  71. } __attribute__ (( packed ));
  72. /** First segment */
  73. #define SMSC95XX_TX_FIRST 0x00002000UL
  74. /** Last segment */
  75. #define SMSC95XX_TX_LAST 0x00001000UL
  76. /** Buffer size */
  77. #define SMSC95XX_TX_LEN(len) ( (len) << 0 )
  78. /** Receive statistics */
  79. struct smsc95xx_rx_statistics {
  80. /** Good frames */
  81. uint32_t good;
  82. /** CRC errors */
  83. uint32_t crc;
  84. /** Runt frame errors */
  85. uint32_t undersize;
  86. /** Alignment errors */
  87. uint32_t alignment;
  88. /** Frame too long errors */
  89. uint32_t oversize;
  90. /** Later collision errors */
  91. uint32_t late;
  92. /** Bad frames */
  93. uint32_t bad;
  94. /** Dropped frames */
  95. uint32_t dropped;
  96. } __attribute__ (( packed ));
  97. /** Receive statistics */
  98. #define SMSC95XX_RX_STATISTICS 0
  99. /** Transmit statistics */
  100. struct smsc95xx_tx_statistics {
  101. /** Good frames */
  102. uint32_t good;
  103. /** Pause frames */
  104. uint32_t pause;
  105. /** Single collisions */
  106. uint32_t single;
  107. /** Multiple collisions */
  108. uint32_t multiple;
  109. /** Excessive collisions */
  110. uint32_t excessive;
  111. /** Late collisions */
  112. uint32_t late;
  113. /** Buffer underruns */
  114. uint32_t underrun;
  115. /** Excessive deferrals */
  116. uint32_t deferred;
  117. /** Carrier errors */
  118. uint32_t carrier;
  119. /** Bad frames */
  120. uint32_t bad;
  121. } __attribute__ (( packed ));
  122. /** Transmit statistics */
  123. #define SMSC95XX_TX_STATISTICS 1
  124. /** Reset delay (in microseconds) */
  125. #define SMSC95XX_RESET_DELAY_US 2
  126. /** Bulk IN maximum fill level
  127. *
  128. * This is a policy decision.
  129. */
  130. #define SMSC95XX_IN_MAX_FILL 8
  131. /** Bulk IN buffer size */
  132. #define SMSC95XX_IN_MTU \
  133. ( sizeof ( struct smsc95xx_rx_header ) + \
  134. ETH_FRAME_LEN + 4 /* possible VLAN header */ \
  135. + 4 /* CRC */ )
  136. /** Honeywell VM3 MAC address OEM string index */
  137. #define SMSC95XX_VM3_OEM_STRING_MAC 2
  138. #endif /* _SMSC95XX_H */