]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.h
ArmPlatformPkg/Bds: Added boot timeout setting
[mirror_edk2.git] / EmbeddedPkg / Drivers / Lan9118Dxe / Lan9118DxeUtil.h
CommitLineData
46f2c53b
OM
1/** @file\r
2*\r
3* Copyright (c) 2012-2014, ARM Limited. All rights reserved.\r
4*\r
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12*\r
13**/\r
14\r
15#ifndef __LAN9118_DXE_UTIL_H__\r
16#define __LAN9118_DXE_UTIL_H__\r
17\r
18// Most common CRC32 Polynomial for little endian machines\r
19#define CRC_POLYNOMIAL 0xEDB88320\r
20\r
21/**\r
22 This internal function reverses bits for 32bit data.\r
23\r
24 @param Value The data to be reversed.\r
25\r
26 @return Data reversed.\r
27\r
28**/\r
29UINT32\r
30ReverseBits (\r
31 UINT32 Value\r
32 );\r
33\r
34// Create an Ethernet CRC\r
35UINT32\r
36GenEtherCrc32 (\r
37 IN EFI_MAC_ADDRESS *Mac,\r
38 IN UINT32 AddrLen\r
39 );\r
40\r
41/* ------------------ MAC CSR Access ------------------- */\r
42\r
43// Read from MAC indirect registers\r
44UINT32\r
45IndirectMACRead32 (\r
46 UINT32 Index\r
47 );\r
48\r
49\r
50// Write to indirect registers\r
51UINT32\r
52IndirectMACWrite32 (\r
53 UINT32 Index,\r
54 UINT32 Value\r
55 );\r
56\r
57\r
58/* --------------- PHY Registers Access ---------------- */\r
59\r
60// Read from MII register (PHY Access)\r
61UINT32\r
62IndirectPHYRead32(\r
63 UINT32 Index\r
64 );\r
65\r
66\r
67// Write to the MII register (PHY Access)\r
68UINT32\r
69IndirectPHYWrite32(\r
70 UINT32 Index,\r
71 UINT32 Value\r
72 );\r
73\r
74/* ---------------- EEPROM Operations ------------------ */\r
75\r
76// Read from EEPROM memory\r
77UINT32\r
78IndirectEEPROMRead32 (\r
79 UINT32 Index\r
80 );\r
81\r
82// Write to EEPROM memory\r
83UINT32\r
84IndirectEEPROMWrite32 (\r
85 UINT32 Index,\r
86 UINT32 Value\r
87 );\r
88\r
89/* ---------------- General Operations ----------------- */\r
90\r
91VOID\r
92Lan9118SetMacAddress (\r
93 EFI_MAC_ADDRESS *Mac,\r
94 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
95 );\r
96\r
97// Initialise the LAN9118\r
98EFI_STATUS\r
99Lan9118Initialize (\r
100 IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
101 );\r
102\r
103// Flags for software reset\r
104#define SOFT_RESET_CHECK_MAC_ADDR_LOAD BIT0\r
105#define SOFT_RESET_CLEAR_INT BIT1\r
106#define SOFT_RESET_SELF_TEST BIT2\r
107\r
108// Perform software reset on the LAN9118\r
109EFI_STATUS\r
110SoftReset (\r
111 UINT32 Flags,\r
112 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
113 );\r
114\r
115// Flags for PHY reset\r
116#define PHY_RESET_PMT BIT0\r
117#define PHY_RESET_BCR BIT1\r
118#define PHY_RESET_CHECK_LINK BIT2\r
119#define PHY_SOFT_RESET_CLEAR_INT BIT3\r
120\r
121// Perform PHY software reset\r
122INT32\r
123PhySoftReset (\r
124 UINT32 Flags,\r
125 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
126 );\r
127\r
128// Flags for Hardware configuration\r
129#define HW_CONF_USE_LEDS BIT0\r
130\r
131// Configure hardware for LAN9118\r
132EFI_STATUS\r
133ConfigureHardware (\r
134 UINT32 Flags,\r
135 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
136 );\r
137\r
138// Configure flow control\r
139EFI_STATUS\r
140ConfigureFlow (\r
141 UINT32 Flags,\r
142 UINT32 HighTrig,\r
143 UINT32 LowTrig,\r
144 UINT32 BPDuration,\r
145 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
146 );\r
147\r
148// Flags for auto negotiation\r
149#define AUTO_NEGOTIATE_COLLISION_TEST BIT0\r
150#define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1\r
151\r
152// Do auto-negotiation\r
153EFI_STATUS\r
154AutoNegotiate (\r
155 UINT32 Flags,\r
156 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
157 );\r
158\r
159// Check the Link Status and take appropriate action\r
160EFI_STATUS\r
161CheckLinkStatus (\r
162 UINT32 Flags,\r
163 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
164 );\r
165\r
166// Stop transmitter flags\r
167#define STOP_TX_MAC BIT0\r
168#define STOP_TX_CFG BIT1\r
169#define STOP_TX_CLEAR BIT2\r
170\r
171// Stop the transmitter\r
172EFI_STATUS\r
173StopTx (\r
174 UINT32 Flags,\r
175 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
176 );\r
177\r
178// Stop receiver flags\r
179#define STOP_RX_CLEAR BIT0\r
180\r
181// Stop the receiver\r
182EFI_STATUS\r
183StopRx (\r
184 UINT32 Flags,\r
185 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
186 );\r
187\r
188// Start transmitter flags\r
189#define START_TX_MAC BIT0\r
190#define START_TX_CFG BIT1\r
191#define START_TX_CLEAR BIT2\r
192\r
193// Start the transmitter\r
194EFI_STATUS\r
195StartTx (\r
196 UINT32 Flags,\r
197 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
198 );\r
199\r
200// Stop receiver flags\r
201#define START_RX_CLEAR BIT0\r
202\r
203// Start the receiver\r
204EFI_STATUS\r
205StartRx (\r
206 UINT32 Flags,\r
207 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
208 );\r
209\r
210// Check Tx Data available space\r
211UINT32\r
212TxDataFreeSpace (\r
213 UINT32 Flags,\r
214 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
215 );\r
216\r
217// Check Tx Status used space\r
218UINT32\r
219TxStatusUsedSpace (\r
220 UINT32 Flags,\r
221 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
222 );\r
223\r
224// Check Rx Data used space\r
225UINT32\r
226RxDataUsedSpace (\r
227 UINT32 Flags,\r
228 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
229 );\r
230\r
231// Check Rx Status used space\r
232UINT32\r
233RxStatusUsedSpace (\r
234 UINT32 Flags,\r
235 EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
236 );\r
237\r
238\r
239// Flags for FIFO allocation\r
240#define ALLOC_USE_DEFAULT BIT0\r
241#define ALLOC_USE_FIFOS BIT1\r
242#define ALLOC_USE_DMA BIT2\r
243\r
244// FIFO min and max sizes\r
245#define TX_FIFO_MIN_SIZE 0x00000600\r
246#define TX_FIFO_MAX_SIZE 0x00003600\r
247//#define RX_FIFO_MIN_SIZE\r
248//#define RX_FIFO_MAX_SIZE\r
249\r
250// Change the allocation of FIFOs\r
251EFI_STATUS\r
252ChangeFifoAllocation (\r
253 IN UINT32 Flags,\r
254 IN OUT UINTN *TxDataSize OPTIONAL,\r
255 IN OUT UINTN *RxDataSize OPTIONAL,\r
256 IN OUT UINT32 *TxStatusSize OPTIONAL,\r
257 IN OUT UINT32 *RxStatusSize OPTIONAL,\r
258 IN OUT EFI_SIMPLE_NETWORK_PROTOCOL *Snp\r
259 );\r
260\r
261VOID\r
262Lan9118ReadMacAddress (\r
263 OUT EFI_MAC_ADDRESS *Mac\r
264 );\r
265\r
266#endif // __LAN9118_DXE_UTIL_H__\r