3 * Copyright (c) 2012-2014, ARM Limited. All rights reserved.
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
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.
15 #ifndef __LAN9118_DXE_UTIL_H__
16 #define __LAN9118_DXE_UTIL_H__
18 // Most common CRC32 Polynomial for little endian machines
19 #define CRC_POLYNOMIAL 0xEDB88320
22 This internal function reverses bits for 32bit data.
24 @param Value The data to be reversed.
26 @return Data reversed.
34 // Create an Ethernet CRC
37 IN EFI_MAC_ADDRESS
*Mac
,
41 /* ------------------ MAC CSR Access ------------------- */
43 // Read from MAC indirect registers
50 // Write to indirect registers
58 /* --------------- PHY Registers Access ---------------- */
60 // Read from MII register (PHY Access)
67 // Write to the MII register (PHY Access)
74 /* ---------------- EEPROM Operations ------------------ */
76 // Read from EEPROM memory
78 IndirectEEPROMRead32 (
82 // Write to EEPROM memory
84 IndirectEEPROMWrite32 (
89 /* ---------------- General Operations ----------------- */
92 Lan9118SetMacAddress (
94 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
97 // Initialise the LAN9118
100 IN EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
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
108 // Perform software reset on the LAN9118
112 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
115 // Flags for PHY reset
116 #define PHY_RESET_PMT BIT0
117 #define PHY_RESET_BCR BIT1
118 #define PHY_RESET_CHECK_LINK BIT2
119 #define PHY_SOFT_RESET_CLEAR_INT BIT3
121 // Perform PHY software reset
125 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
128 // Flags for Hardware configuration
129 #define HW_CONF_USE_LEDS BIT0
131 // Configure hardware for LAN9118
135 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
138 // Configure flow control
145 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
148 // Flags for auto negotiation
149 #define AUTO_NEGOTIATE_COLLISION_TEST BIT0
150 #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1
152 // Do auto-negotiation
156 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
159 // Check the Link Status and take appropriate action
163 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
166 // Stop transmitter flags
167 #define STOP_TX_MAC BIT0
168 #define STOP_TX_CFG BIT1
169 #define STOP_TX_CLEAR BIT2
171 // Stop the transmitter
175 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
178 // Stop receiver flags
179 #define STOP_RX_CLEAR BIT0
185 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
188 // Start transmitter flags
189 #define START_TX_MAC BIT0
190 #define START_TX_CFG BIT1
191 #define START_TX_CLEAR BIT2
193 // Start the transmitter
197 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
200 // Stop receiver flags
201 #define START_RX_CLEAR BIT0
203 // Start the receiver
207 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
210 // Check Tx Data available space
214 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
217 // Check Tx Status used space
221 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
224 // Check Rx Data used space
228 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
231 // Check Rx Status used space
235 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
239 // Flags for FIFO allocation
240 #define ALLOC_USE_DEFAULT BIT0
241 #define ALLOC_USE_FIFOS BIT1
242 #define ALLOC_USE_DMA BIT2
244 // FIFO min and max sizes
245 #define TX_FIFO_MIN_SIZE 0x00000600
246 #define TX_FIFO_MAX_SIZE 0x00003600
247 //#define RX_FIFO_MIN_SIZE
248 //#define RX_FIFO_MAX_SIZE
250 // Change the allocation of FIFOs
252 ChangeFifoAllocation (
254 IN OUT UINTN
*TxDataSize OPTIONAL
,
255 IN OUT UINTN
*RxDataSize OPTIONAL
,
256 IN OUT UINT32
*TxStatusSize OPTIONAL
,
257 IN OUT UINT32
*RxStatusSize OPTIONAL
,
258 IN OUT EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
262 Lan9118ReadMacAddress (
263 OUT EFI_MAC_ADDRESS
*Mac
266 #endif // __LAN9118_DXE_UTIL_H__