Lan9118DxeUtil.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /** @file
  2. *
  3. * Copyright (c) 2012-2014, ARM Limited. All rights reserved.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause-Patent
  6. *
  7. **/
  8. #ifndef __LAN9118_DXE_UTIL_H__
  9. #define __LAN9118_DXE_UTIL_H__
  10. // Most common CRC32 Polynomial for little endian machines
  11. #define CRC_POLYNOMIAL 0xEDB88320
  12. /**
  13. This internal function reverses bits for 32bit data.
  14. @param Value The data to be reversed.
  15. @return Data reversed.
  16. **/
  17. UINT32
  18. ReverseBits (
  19. UINT32 Value
  20. );
  21. // Create an Ethernet CRC
  22. UINT32
  23. GenEtherCrc32 (
  24. IN EFI_MAC_ADDRESS *Mac,
  25. IN UINT32 AddrLen
  26. );
  27. UINT32
  28. Lan9118RawMmioRead32(
  29. UINTN Address,
  30. UINTN Delay
  31. );
  32. #define Lan9118MmioRead32(a) \
  33. Lan9118RawMmioRead32(a, a ## _RD_DELAY)
  34. UINT32
  35. Lan9118RawMmioWrite32(
  36. UINTN Address,
  37. UINT32 Value,
  38. UINTN Delay
  39. );
  40. #define Lan9118MmioWrite32(a, v) \
  41. Lan9118RawMmioWrite32(a, v, a ## _WR_DELAY)
  42. /* ------------------ MAC CSR Access ------------------- */
  43. // Read from MAC indirect registers
  44. UINT32
  45. IndirectMACRead32 (
  46. UINT32 Index
  47. );
  48. // Write to indirect registers
  49. UINT32
  50. IndirectMACWrite32 (
  51. UINT32 Index,
  52. UINT32 Value
  53. );
  54. /* --------------- PHY Registers Access ---------------- */
  55. // Read from MII register (PHY Access)
  56. UINT32
  57. IndirectPHYRead32(
  58. UINT32 Index
  59. );
  60. // Write to the MII register (PHY Access)
  61. UINT32
  62. IndirectPHYWrite32(
  63. UINT32 Index,
  64. UINT32 Value
  65. );
  66. /* ---------------- EEPROM Operations ------------------ */
  67. // Read from EEPROM memory
  68. UINT32
  69. IndirectEEPROMRead32 (
  70. UINT32 Index
  71. );
  72. // Write to EEPROM memory
  73. UINT32
  74. IndirectEEPROMWrite32 (
  75. UINT32 Index,
  76. UINT32 Value
  77. );
  78. /* ---------------- General Operations ----------------- */
  79. VOID
  80. Lan9118SetMacAddress (
  81. EFI_MAC_ADDRESS *Mac,
  82. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  83. );
  84. // Initialise the LAN9118
  85. EFI_STATUS
  86. Lan9118Initialize (
  87. IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  88. );
  89. // Flags for software reset
  90. #define SOFT_RESET_CHECK_MAC_ADDR_LOAD BIT0
  91. #define SOFT_RESET_CLEAR_INT BIT1
  92. #define SOFT_RESET_SELF_TEST BIT2
  93. // Perform software reset on the LAN9118
  94. EFI_STATUS
  95. SoftReset (
  96. UINT32 Flags,
  97. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  98. );
  99. // Flags for PHY reset
  100. #define PHY_RESET_PMT BIT0
  101. #define PHY_RESET_BCR BIT1
  102. #define PHY_SOFT_RESET_CLEAR_INT BIT2
  103. // Perform PHY software reset
  104. EFI_STATUS
  105. PhySoftReset (
  106. UINT32 Flags,
  107. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  108. );
  109. // Flags for Hardware configuration
  110. #define HW_CONF_USE_LEDS BIT0
  111. // Configure hardware for LAN9118
  112. EFI_STATUS
  113. ConfigureHardware (
  114. UINT32 Flags,
  115. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  116. );
  117. // Configure flow control
  118. EFI_STATUS
  119. ConfigureFlow (
  120. UINT32 Flags,
  121. UINT32 HighTrig,
  122. UINT32 LowTrig,
  123. UINT32 BPDuration,
  124. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  125. );
  126. // Flags for auto negotiation
  127. #define AUTO_NEGOTIATE_COLLISION_TEST BIT0
  128. #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1
  129. // Do auto-negotiation
  130. EFI_STATUS
  131. AutoNegotiate (
  132. UINT32 Flags,
  133. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  134. );
  135. // Check the Link Status and take appropriate action
  136. EFI_STATUS
  137. CheckLinkStatus (
  138. UINT32 Flags,
  139. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  140. );
  141. // Stop transmitter flags
  142. #define STOP_TX_MAC BIT0
  143. #define STOP_TX_CFG BIT1
  144. #define STOP_TX_CLEAR BIT2
  145. // Stop the transmitter
  146. EFI_STATUS
  147. StopTx (
  148. UINT32 Flags,
  149. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  150. );
  151. // Stop receiver flags
  152. #define STOP_RX_CLEAR BIT0
  153. // Stop the receiver
  154. EFI_STATUS
  155. StopRx (
  156. UINT32 Flags,
  157. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  158. );
  159. // Start transmitter flags
  160. #define START_TX_MAC BIT0
  161. #define START_TX_CFG BIT1
  162. #define START_TX_CLEAR BIT2
  163. // Start the transmitter
  164. EFI_STATUS
  165. StartTx (
  166. UINT32 Flags,
  167. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  168. );
  169. // Stop receiver flags
  170. #define START_RX_CLEAR BIT0
  171. // Start the receiver
  172. EFI_STATUS
  173. StartRx (
  174. UINT32 Flags,
  175. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  176. );
  177. // Check Tx Data available space
  178. UINT32
  179. TxDataFreeSpace (
  180. UINT32 Flags,
  181. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  182. );
  183. // Check Tx Status used space
  184. UINT32
  185. TxStatusUsedSpace (
  186. UINT32 Flags,
  187. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  188. );
  189. // Check Rx Data used space
  190. UINT32
  191. RxDataUsedSpace (
  192. UINT32 Flags,
  193. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  194. );
  195. // Check Rx Status used space
  196. UINT32
  197. RxStatusUsedSpace (
  198. UINT32 Flags,
  199. EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  200. );
  201. // Flags for FIFO allocation
  202. #define ALLOC_USE_DEFAULT BIT0
  203. #define ALLOC_USE_FIFOS BIT1
  204. #define ALLOC_USE_DMA BIT2
  205. // FIFO min and max sizes
  206. #define TX_FIFO_MIN_SIZE 0x00000600
  207. #define TX_FIFO_MAX_SIZE 0x00003600
  208. //#define RX_FIFO_MIN_SIZE
  209. //#define RX_FIFO_MAX_SIZE
  210. // Change the allocation of FIFOs
  211. EFI_STATUS
  212. ChangeFifoAllocation (
  213. IN UINT32 Flags,
  214. IN OUT UINTN *TxDataSize OPTIONAL,
  215. IN OUT UINTN *RxDataSize OPTIONAL,
  216. IN OUT UINT32 *TxStatusSize OPTIONAL,
  217. IN OUT UINT32 *RxStatusSize OPTIONAL,
  218. IN OUT EFI_SIMPLE_NETWORK_PROTOCOL *Snp
  219. );
  220. VOID
  221. Lan9118ReadMacAddress (
  222. OUT EFI_MAC_ADDRESS *Mac
  223. );
  224. #endif // __LAN9118_DXE_UTIL_H__