]> git.proxmox.com Git - mirror_edk2.git/blob - EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.h
24e74077e5599790d68cfac1bdad732c05bfd25c
[mirror_edk2.git] / EmbeddedPkg / Drivers / Lan9118Dxe / Lan9118DxeUtil.h
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__