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_UTIL_H__ 16 #define __LAN9118_DXE_UTIL_H__ 17 18 // Most common CRC32 Polynomial for little endian machines 19 #define CRC_POLYNOMIAL 0xEDB88320 20 21 /** 22 This internal function reverses bits for 32bit data. 23 24 @param Value The data to be reversed. 25 26 @return Data reversed. 27 28 **/ 29 UINT32 30 ReverseBits ( 31 UINT32 Value 32 ); 33 34 // Create an Ethernet CRC 35 UINT32 36 GenEtherCrc32 ( 37 IN EFI_MAC_ADDRESS *Mac, 38 IN UINT32 AddrLen 39 ); 40 41 UINT32 42 Lan9118RawMmioRead32( 43 UINTN Address, 44 UINTN Delay 45 ); 46 #define Lan9118MmioRead32(a) \ 47 Lan9118RawMmioRead32(a, a ## _RD_DELAY) 48 49 UINT32 50 Lan9118RawMmioWrite32( 51 UINTN Address, 52 UINT32 Value, 53 UINTN Delay 54 ); 55 #define Lan9118MmioWrite32(a, v) \ 56 Lan9118RawMmioWrite32(a, v, a ## _WR_DELAY) 57 58 /* ------------------ MAC CSR Access ------------------- */ 59 60 // Read from MAC indirect registers 61 UINT32 62 IndirectMACRead32 ( 63 UINT32 Index 64 ); 65 66 67 // Write to indirect registers 68 UINT32 69 IndirectMACWrite32 ( 70 UINT32 Index, 71 UINT32 Value 72 ); 73 74 75 /* --------------- PHY Registers Access ---------------- */ 76 77 // Read from MII register (PHY Access) 78 UINT32 79 IndirectPHYRead32( 80 UINT32 Index 81 ); 82 83 84 // Write to the MII register (PHY Access) 85 UINT32 86 IndirectPHYWrite32( 87 UINT32 Index, 88 UINT32 Value 89 ); 90 91 /* ---------------- EEPROM Operations ------------------ */ 92 93 // Read from EEPROM memory 94 UINT32 95 IndirectEEPROMRead32 ( 96 UINT32 Index 97 ); 98 99 // Write to EEPROM memory 100 UINT32 101 IndirectEEPROMWrite32 ( 102 UINT32 Index, 103 UINT32 Value 104 ); 105 106 /* ---------------- General Operations ----------------- */ 107 108 VOID 109 Lan9118SetMacAddress ( 110 EFI_MAC_ADDRESS *Mac, 111 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 112 ); 113 114 // Initialise the LAN9118 115 EFI_STATUS 116 Lan9118Initialize ( 117 IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp 118 ); 119 120 // Flags for software reset 121 #define SOFT_RESET_CHECK_MAC_ADDR_LOAD BIT0 122 #define SOFT_RESET_CLEAR_INT BIT1 123 #define SOFT_RESET_SELF_TEST BIT2 124 125 // Perform software reset on the LAN9118 126 EFI_STATUS 127 SoftReset ( 128 UINT32 Flags, 129 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 130 ); 131 132 // Flags for PHY reset 133 #define PHY_RESET_PMT BIT0 134 #define PHY_RESET_BCR BIT1 135 #define PHY_SOFT_RESET_CLEAR_INT BIT2 136 137 // Perform PHY software reset 138 EFI_STATUS 139 PhySoftReset ( 140 UINT32 Flags, 141 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 142 ); 143 144 // Flags for Hardware configuration 145 #define HW_CONF_USE_LEDS BIT0 146 147 // Configure hardware for LAN9118 148 EFI_STATUS 149 ConfigureHardware ( 150 UINT32 Flags, 151 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 152 ); 153 154 // Configure flow control 155 EFI_STATUS 156 ConfigureFlow ( 157 UINT32 Flags, 158 UINT32 HighTrig, 159 UINT32 LowTrig, 160 UINT32 BPDuration, 161 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 162 ); 163 164 // Flags for auto negotiation 165 #define AUTO_NEGOTIATE_COLLISION_TEST BIT0 166 #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1 167 168 // Do auto-negotiation 169 EFI_STATUS 170 AutoNegotiate ( 171 UINT32 Flags, 172 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 173 ); 174 175 // Check the Link Status and take appropriate action 176 EFI_STATUS 177 CheckLinkStatus ( 178 UINT32 Flags, 179 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 180 ); 181 182 // Stop transmitter flags 183 #define STOP_TX_MAC BIT0 184 #define STOP_TX_CFG BIT1 185 #define STOP_TX_CLEAR BIT2 186 187 // Stop the transmitter 188 EFI_STATUS 189 StopTx ( 190 UINT32 Flags, 191 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 192 ); 193 194 // Stop receiver flags 195 #define STOP_RX_CLEAR BIT0 196 197 // Stop the receiver 198 EFI_STATUS 199 StopRx ( 200 UINT32 Flags, 201 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 202 ); 203 204 // Start transmitter flags 205 #define START_TX_MAC BIT0 206 #define START_TX_CFG BIT1 207 #define START_TX_CLEAR BIT2 208 209 // Start the transmitter 210 EFI_STATUS 211 StartTx ( 212 UINT32 Flags, 213 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 214 ); 215 216 // Stop receiver flags 217 #define START_RX_CLEAR BIT0 218 219 // Start the receiver 220 EFI_STATUS 221 StartRx ( 222 UINT32 Flags, 223 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 224 ); 225 226 // Check Tx Data available space 227 UINT32 228 TxDataFreeSpace ( 229 UINT32 Flags, 230 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 231 ); 232 233 // Check Tx Status used space 234 UINT32 235 TxStatusUsedSpace ( 236 UINT32 Flags, 237 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 238 ); 239 240 // Check Rx Data used space 241 UINT32 242 RxDataUsedSpace ( 243 UINT32 Flags, 244 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 245 ); 246 247 // Check Rx Status used space 248 UINT32 249 RxStatusUsedSpace ( 250 UINT32 Flags, 251 EFI_SIMPLE_NETWORK_PROTOCOL *Snp 252 ); 253 254 255 // Flags for FIFO allocation 256 #define ALLOC_USE_DEFAULT BIT0 257 #define ALLOC_USE_FIFOS BIT1 258 #define ALLOC_USE_DMA BIT2 259 260 // FIFO min and max sizes 261 #define TX_FIFO_MIN_SIZE 0x00000600 262 #define TX_FIFO_MAX_SIZE 0x00003600 263 //#define RX_FIFO_MIN_SIZE 264 //#define RX_FIFO_MAX_SIZE 265 266 // Change the allocation of FIFOs 267 EFI_STATUS 268 ChangeFifoAllocation ( 269 IN UINT32 Flags, 270 IN OUT UINTN *TxDataSize OPTIONAL, 271 IN OUT UINTN *RxDataSize OPTIONAL, 272 IN OUT UINT32 *TxStatusSize OPTIONAL, 273 IN OUT UINT32 *RxStatusSize OPTIONAL, 274 IN OUT EFI_SIMPLE_NETWORK_PROTOCOL *Snp 275 ); 276 277 VOID 278 Lan9118ReadMacAddress ( 279 OUT EFI_MAC_ADDRESS *Mac 280 ); 281 282 #endif // __LAN9118_DXE_UTIL_H__ 283