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__ 304