]> git.proxmox.com Git - mirror_edk2.git/blob - EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.h
EmbeddedPkg/Lan9118Dxe: Handle EFI_STATUS from PhySoftReset() & SoftReset()
[mirror_edk2.git] / EmbeddedPkg / Drivers / Lan9118Dxe / Lan9118DxeUtil.h
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_RESET_CHECK_LINK BIT2
119 #define PHY_SOFT_RESET_CLEAR_INT BIT3
120
121 // Perform PHY software reset
122 EFI_STATUS
123 PhySoftReset (
124 UINT32 Flags,
125 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
126 );
127
128 // Flags for Hardware configuration
129 #define HW_CONF_USE_LEDS BIT0
130
131 // Configure hardware for LAN9118
132 EFI_STATUS
133 ConfigureHardware (
134 UINT32 Flags,
135 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
136 );
137
138 // Configure flow control
139 EFI_STATUS
140 ConfigureFlow (
141 UINT32 Flags,
142 UINT32 HighTrig,
143 UINT32 LowTrig,
144 UINT32 BPDuration,
145 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
146 );
147
148 // Flags for auto negotiation
149 #define AUTO_NEGOTIATE_COLLISION_TEST BIT0
150 #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1
151
152 // Do auto-negotiation
153 EFI_STATUS
154 AutoNegotiate (
155 UINT32 Flags,
156 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
157 );
158
159 // Check the Link Status and take appropriate action
160 EFI_STATUS
161 CheckLinkStatus (
162 UINT32 Flags,
163 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
164 );
165
166 // Stop transmitter flags
167 #define STOP_TX_MAC BIT0
168 #define STOP_TX_CFG BIT1
169 #define STOP_TX_CLEAR BIT2
170
171 // Stop the transmitter
172 EFI_STATUS
173 StopTx (
174 UINT32 Flags,
175 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
176 );
177
178 // Stop receiver flags
179 #define STOP_RX_CLEAR BIT0
180
181 // Stop the receiver
182 EFI_STATUS
183 StopRx (
184 UINT32 Flags,
185 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
186 );
187
188 // Start transmitter flags
189 #define START_TX_MAC BIT0
190 #define START_TX_CFG BIT1
191 #define START_TX_CLEAR BIT2
192
193 // Start the transmitter
194 EFI_STATUS
195 StartTx (
196 UINT32 Flags,
197 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
198 );
199
200 // Stop receiver flags
201 #define START_RX_CLEAR BIT0
202
203 // Start the receiver
204 EFI_STATUS
205 StartRx (
206 UINT32 Flags,
207 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
208 );
209
210 // Check Tx Data available space
211 UINT32
212 TxDataFreeSpace (
213 UINT32 Flags,
214 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
215 );
216
217 // Check Tx Status used space
218 UINT32
219 TxStatusUsedSpace (
220 UINT32 Flags,
221 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
222 );
223
224 // Check Rx Data used space
225 UINT32
226 RxDataUsedSpace (
227 UINT32 Flags,
228 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
229 );
230
231 // Check Rx Status used space
232 UINT32
233 RxStatusUsedSpace (
234 UINT32 Flags,
235 EFI_SIMPLE_NETWORK_PROTOCOL *Snp
236 );
237
238
239 // Flags for FIFO allocation
240 #define ALLOC_USE_DEFAULT BIT0
241 #define ALLOC_USE_FIFOS BIT1
242 #define ALLOC_USE_DMA BIT2
243
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
249
250 // Change the allocation of FIFOs
251 EFI_STATUS
252 ChangeFifoAllocation (
253 IN UINT32 Flags,
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
259 );
260
261 VOID
262 Lan9118ReadMacAddress (
263 OUT EFI_MAC_ADDRESS *Mac
264 );
265
266 #endif // __LAN9118_DXE_UTIL_H__