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