3 * Copyright (c) 2012-2014, ARM Limited. All rights reserved.
5 * SPDX-License-Identifier: BSD-2-Clause-Patent
9 #ifndef __LAN9118_DXE_H__
10 #define __LAN9118_DXE_H__
13 #include <Uefi/UefiSpec.h>
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>
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>
32 #include "Lan9118DxeUtil.h"
33 #include "Lan9118DxeHw.h"
35 #define LAN9118_STALL 2
37 #define LAN9118_DEFAULT_MAC_ADDRL 0x00F70200
38 #define LAN9118_DEFAULT_MAC_ADDRH 0x00009040
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
45 #define LAN9118_TX_RING_NUM_ENTRIES 32
47 /*------------------------------------------------------------------------------
48 LAN9118 Information Structure
49 ------------------------------------------------------------------------------*/
54 EFI_HANDLE ControllerHandle
;
56 // EFI SNP protocol instances
57 EFI_SIMPLE_NETWORK_PROTOCOL Snp
;
58 EFI_SIMPLE_NETWORK_MODE SnpMode
;
60 // EFI Snp statistics instance
61 EFI_NETWORK_STATISTICS Stats
;
63 // Saved transmitted buffers so we can notify consumers when packets have been sent.
65 VOID
*TxRing
[LAN9118_TX_RING_NUM_ENTRIES
];
68 #define LAN9118_SIGNATURE SIGNATURE_32('l', 'a', 'n', '9')
69 #define INSTANCE_FROM_SNP_THIS(a) CR(a, LAN9118_DRIVER, Snp, LAN9118_SIGNATURE)
72 /*---------------------------------------------------------------------------------------------------------------------
74 UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL
76 Refer to the Simple Network Protocol section (21.1) in the UEFI 2.3.1 Specification for related definitions
78 ---------------------------------------------------------------------------------------------------------------------*/
82 * UEFI Start() function
86 * @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.
90 * This function starts a network interface. If the network interface successfully starts, then
91 * EFI_SUCCESS will be returned.
96 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
100 * UEFI Stop() function
106 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
110 * UEFI Initialize() function
116 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
117 IN UINTN rx_buff_size
,
118 IN UINTN tx_buff_size
122 * UEFI Reset() function
128 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
133 * UEFI Shutdown() function
139 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
143 * UEFI ReceiveFilters() function
149 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
152 IN BOOLEAN reset_mfilter
,
153 IN UINTN num_mfilter
,
154 IN EFI_MAC_ADDRESS
*mfilter
158 * UEFI StationAddress() function
164 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
166 IN EFI_MAC_ADDRESS
*new_maddr
170 * UEFI Statistics() function
176 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
178 IN OUT UINTN
*stat_size
,
179 OUT EFI_NETWORK_STATISTICS
*stat_table
183 * UEFI MCastIPtoMAC() function
189 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
191 IN EFI_IP_ADDRESS
*ip_addr
,
192 OUT EFI_MAC_ADDRESS
*mac_addr
196 * UEFI NvData() function
202 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
203 IN BOOLEAN read_write
,
210 * UEFI GetStatus() function
216 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
217 OUT UINT32
*irq_stat OPTIONAL
,
218 OUT VOID
**tx_buff OPTIONAL
222 * UEFI Transmit() function
228 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
232 IN EFI_MAC_ADDRESS
*src_addr OPTIONAL
,
233 IN EFI_MAC_ADDRESS
*dest_addr OPTIONAL
,
234 IN UINT16
*protocol OPTIONAL
238 * UEFI Receive() function
244 IN EFI_SIMPLE_NETWORK_PROTOCOL
* Snp
,
245 OUT UINTN
*hdr_size OPTIONAL
,
246 IN OUT UINTN
*buff_size
,
248 OUT EFI_MAC_ADDRESS
*src_addr OPTIONAL
,
249 OUT EFI_MAC_ADDRESS
*dest_addr OPTIONAL
,
250 OUT UINT16
*protocol OPTIONAL
254 /*---------------------------------------------------------------------------------------------------------------------
256 UEFI-Compliant functions for EFI_COMPONENT_NAME2_PROTOCOL
258 Refer to the Component Name Protocol section (10.5) in the UEFI 2.3.1 Specification for related definitions
260 ---------------------------------------------------------------------------------------------------------------------*/
263 * UEFI GetDriverName() function
269 IN EFI_COMPONENT_NAME2_PROTOCOL
*Snp
,
271 OUT CHAR16
**DriverName
275 * UEFI GetControllerName() function
280 SnpGetControllerName (
281 IN EFI_COMPONENT_NAME2_PROTOCOL
*Cnp
,
282 IN EFI_HANDLE ControllerHandle
,
283 IN EFI_HANDLE ChildHandle OPTIONAL
,
285 OUT CHAR16
**ControllerName
288 /*------------------------------------------------------------------------------
290 ------------------------------------------------------------------------------*/
293 GetCurrentMacAddress (
297 #endif // __LAN9118_DXE_H__