3 * Copyright (c) 2012-2014, ARM Limited. All rights reserved.
5 * SPDX-License-Identifier: BSD-2-Clause-Patent
9 #ifndef __LAN9118_DXE_UTIL_H__
10 #define __LAN9118_DXE_UTIL_H__
12 // Most common CRC32 Polynomial for little endian machines
13 #define CRC_POLYNOMIAL 0xEDB88320
16 This internal function reverses bits for 32bit data.
18 @param Value The data to be reversed.
20 @return Data reversed.
28 // Create an Ethernet CRC
31 IN EFI_MAC_ADDRESS
*Mac
,
40 #define Lan9118MmioRead32(a) \
41 Lan9118RawMmioRead32(a, a ## _RD_DELAY)
44 Lan9118RawMmioWrite32(
49 #define Lan9118MmioWrite32(a, v) \
50 Lan9118RawMmioWrite32(a, v, a ## _WR_DELAY)
52 /* ------------------ MAC CSR Access ------------------- */
54 // Read from MAC indirect registers
61 // Write to indirect registers
69 /* --------------- PHY Registers Access ---------------- */
71 // Read from MII register (PHY Access)
78 // Write to the MII register (PHY Access)
85 /* ---------------- EEPROM Operations ------------------ */
87 // Read from EEPROM memory
89 IndirectEEPROMRead32 (
93 // Write to EEPROM memory
95 IndirectEEPROMWrite32 (
100 /* ---------------- General Operations ----------------- */
103 Lan9118SetMacAddress (
104 EFI_MAC_ADDRESS
*Mac
,
105 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
108 // Initialise the LAN9118
111 IN EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
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
119 // Perform software reset on the LAN9118
123 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
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
131 // Perform PHY software reset
135 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
138 // Flags for Hardware configuration
139 #define HW_CONF_USE_LEDS BIT0
141 // Configure hardware for LAN9118
145 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
148 // Configure flow control
155 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
158 // Flags for auto negotiation
159 #define AUTO_NEGOTIATE_COLLISION_TEST BIT0
160 #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1
162 // Do auto-negotiation
166 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
169 // Check the Link Status and take appropriate action
173 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
176 // Stop transmitter flags
177 #define STOP_TX_MAC BIT0
178 #define STOP_TX_CFG BIT1
179 #define STOP_TX_CLEAR BIT2
181 // Stop the transmitter
185 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
188 // Stop receiver flags
189 #define STOP_RX_CLEAR BIT0
195 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
198 // Start transmitter flags
199 #define START_TX_MAC BIT0
200 #define START_TX_CFG BIT1
201 #define START_TX_CLEAR BIT2
203 // Start the transmitter
207 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
210 // Stop receiver flags
211 #define START_RX_CLEAR BIT0
213 // Start the receiver
217 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
220 // Check Tx Data available space
224 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
227 // Check Tx Status used space
231 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
234 // Check Rx Data used space
238 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
241 // Check Rx Status used space
245 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
249 // Flags for FIFO allocation
250 #define ALLOC_USE_DEFAULT BIT0
251 #define ALLOC_USE_FIFOS BIT1
252 #define ALLOC_USE_DMA BIT2
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
260 // Change the allocation of FIFOs
262 ChangeFifoAllocation (
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
272 Lan9118ReadMacAddress (
273 OUT EFI_MAC_ADDRESS
*Mac
276 #endif // __LAN9118_DXE_UTIL_H__