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