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