Lan9118Dxe.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  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_H__
  9. #define __LAN9118_DXE_H__
  10. #include <Uefi.h>
  11. #include <Uefi/UefiSpec.h>
  12. #include <Base.h>
  13. // Protocols used by this driver
  14. #include <Protocol/SimpleNetwork.h>
  15. #include <Protocol/ComponentName2.h>
  16. #include <Protocol/PxeBaseCode.h>
  17. #include <Protocol/DevicePath.h>
  18. // Libraries used by this driver
  19. #include <Library/UefiLib.h>
  20. #include <Library/DebugLib.h>
  21. #include <Library/UefiBootServicesTableLib.h>
  22. #include <Library/MemoryAllocationLib.h>
  23. #include <Library/IoLib.h>
  24. #include <Library/PcdLib.h>
  25. #include <Library/NetLib.h>
  26. #include <Library/DevicePathLib.h>
  27. #include "Lan9118DxeUtil.h"
  28. #include "Lan9118DxeHw.h"
  29. #define LAN9118_STALL 2
  30. #define LAN9118_DEFAULT_MAC_ADDRL 0x00F70200
  31. #define LAN9118_DEFAULT_MAC_ADDRH 0x00009040
  32. #define LAN9118_TX_DATA_SIZE 4608
  33. #define LAN9118_TX_STATUS_SIZE 512
  34. #define LAN9118_RX_DATA_SIZE 10560
  35. #define LAN9118_RX_STATUS_SIZE 704
  36. #define LAN9118_TX_RING_NUM_ENTRIES 32
  37. /*------------------------------------------------------------------------------
  38. LAN9118 Information Structure
  39. ------------------------------------------------------------------------------*/
  40. typedef struct {
  41. // Driver signature
  42. UINT32 Signature;
  43. EFI_HANDLE ControllerHandle;
  44. // EFI SNP protocol instances
  45. EFI_SIMPLE_NETWORK_PROTOCOL Snp;
  46. EFI_SIMPLE_NETWORK_MODE SnpMode;
  47. // EFI Snp statistics instance
  48. EFI_NETWORK_STATISTICS Stats;
  49. // Saved transmitted buffers so we can notify consumers when packets have been sent.
  50. UINT16 NextPacketTag;
  51. VOID *TxRing[LAN9118_TX_RING_NUM_ENTRIES];
  52. } LAN9118_DRIVER;
  53. #define LAN9118_SIGNATURE SIGNATURE_32('l', 'a', 'n', '9')
  54. #define INSTANCE_FROM_SNP_THIS(a) CR(a, LAN9118_DRIVER, Snp, LAN9118_SIGNATURE)
  55. /*---------------------------------------------------------------------------------------------------------------------
  56. UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL
  57. Refer to the Simple Network Protocol section (21.1) in the UEFI 2.3.1 Specification for related definitions
  58. ---------------------------------------------------------------------------------------------------------------------*/
  59. /*
  60. * UEFI Start() function
  61. *
  62. * Parameters:
  63. *
  64. * @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.
  65. *
  66. * Description:
  67. *
  68. * This function starts a network interface. If the network interface successfully starts, then
  69. * EFI_SUCCESS will be returned.
  70. */
  71. EFI_STATUS
  72. EFIAPI
  73. SnpStart (
  74. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
  75. );
  76. /*
  77. * UEFI Stop() function
  78. *
  79. */
  80. EFI_STATUS
  81. EFIAPI
  82. SnpStop (
  83. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
  84. );
  85. /*
  86. * UEFI Initialize() function
  87. *
  88. */
  89. EFI_STATUS
  90. EFIAPI
  91. SnpInitialize (
  92. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  93. IN UINTN rx_buff_size,
  94. IN UINTN tx_buff_size
  95. );
  96. /*
  97. * UEFI Reset() function
  98. *
  99. */
  100. EFI_STATUS
  101. EFIAPI
  102. SnpReset (
  103. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  104. IN BOOLEAN ext_ver
  105. );
  106. /*
  107. * UEFI Shutdown() function
  108. *
  109. */
  110. EFI_STATUS
  111. EFIAPI
  112. SnpShutdown (
  113. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
  114. );
  115. /*
  116. * UEFI ReceiveFilters() function
  117. *
  118. */
  119. EFI_STATUS
  120. EFIAPI
  121. SnpReceiveFilters (
  122. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  123. IN UINT32 enable,
  124. IN UINT32 disable,
  125. IN BOOLEAN reset_mfilter,
  126. IN UINTN num_mfilter,
  127. IN EFI_MAC_ADDRESS *mfilter
  128. );
  129. /*
  130. * UEFI StationAddress() function
  131. *
  132. */
  133. EFI_STATUS
  134. EFIAPI
  135. SnpStationAddress (
  136. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  137. IN BOOLEAN reset,
  138. IN EFI_MAC_ADDRESS *new_maddr
  139. );
  140. /*
  141. * UEFI Statistics() function
  142. *
  143. */
  144. EFI_STATUS
  145. EFIAPI
  146. SnpStatistics (
  147. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  148. IN BOOLEAN reset,
  149. IN OUT UINTN *stat_size,
  150. OUT EFI_NETWORK_STATISTICS *stat_table
  151. );
  152. /*
  153. * UEFI MCastIPtoMAC() function
  154. *
  155. */
  156. EFI_STATUS
  157. EFIAPI
  158. SnpMcastIptoMac (
  159. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  160. IN BOOLEAN use_ipv6,
  161. IN EFI_IP_ADDRESS *ip_addr,
  162. OUT EFI_MAC_ADDRESS *mac_addr
  163. );
  164. /*
  165. * UEFI NvData() function
  166. *
  167. */
  168. EFI_STATUS
  169. EFIAPI
  170. SnpNvData (
  171. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  172. IN BOOLEAN read_write,
  173. IN UINTN offset,
  174. IN UINTN buff_size,
  175. IN OUT VOID *data
  176. );
  177. /*
  178. * UEFI GetStatus() function
  179. *
  180. */
  181. EFI_STATUS
  182. EFIAPI
  183. SnpGetStatus (
  184. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  185. OUT UINT32 *irq_stat OPTIONAL,
  186. OUT VOID **tx_buff OPTIONAL
  187. );
  188. /*
  189. * UEFI Transmit() function
  190. *
  191. */
  192. EFI_STATUS
  193. EFIAPI
  194. SnpTransmit (
  195. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  196. IN UINTN hdr_size,
  197. IN UINTN buff_size,
  198. IN VOID *data,
  199. IN EFI_MAC_ADDRESS *src_addr OPTIONAL,
  200. IN EFI_MAC_ADDRESS *dest_addr OPTIONAL,
  201. IN UINT16 *protocol OPTIONAL
  202. );
  203. /*
  204. * UEFI Receive() function
  205. *
  206. */
  207. EFI_STATUS
  208. EFIAPI
  209. SnpReceive (
  210. IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
  211. OUT UINTN *hdr_size OPTIONAL,
  212. IN OUT UINTN *buff_size,
  213. OUT VOID *data,
  214. OUT EFI_MAC_ADDRESS *src_addr OPTIONAL,
  215. OUT EFI_MAC_ADDRESS *dest_addr OPTIONAL,
  216. OUT UINT16 *protocol OPTIONAL
  217. );
  218. /*---------------------------------------------------------------------------------------------------------------------
  219. UEFI-Compliant functions for EFI_COMPONENT_NAME2_PROTOCOL
  220. Refer to the Component Name Protocol section (10.5) in the UEFI 2.3.1 Specification for related definitions
  221. ---------------------------------------------------------------------------------------------------------------------*/
  222. /*
  223. * UEFI GetDriverName() function
  224. *
  225. */
  226. EFI_STATUS
  227. EFIAPI
  228. SnpGetDriverName (
  229. IN EFI_COMPONENT_NAME2_PROTOCOL *Snp,
  230. IN CHAR8 *Lang,
  231. OUT CHAR16 **DriverName
  232. );
  233. /*
  234. * UEFI GetControllerName() function
  235. *
  236. */
  237. EFI_STATUS
  238. EFIAPI
  239. SnpGetControllerName (
  240. IN EFI_COMPONENT_NAME2_PROTOCOL *Cnp,
  241. IN EFI_HANDLE ControllerHandle,
  242. IN EFI_HANDLE ChildHandle OPTIONAL,
  243. IN CHAR8 *Lang,
  244. OUT CHAR16 **ControllerName
  245. );
  246. /*------------------------------------------------------------------------------
  247. Utility functions
  248. ------------------------------------------------------------------------------*/
  249. EFI_MAC_ADDRESS
  250. GetCurrentMacAddress (
  251. VOID
  252. );
  253. #endif // __LAN9118_DXE_H__