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