]> git.proxmox.com Git - mirror_edk2.git/blame - OptionRomPkg/UndiRuntimeDxe/Undi32.h
1. Add EFI_COMPONENT_NAME2_PROTOCOL support for UNDI driver.
[mirror_edk2.git] / OptionRomPkg / UndiRuntimeDxe / Undi32.h
CommitLineData
51ebae6b 1/** @file\r
2 EFI internal structures for the EFI UNDI driver.\r
3\r
906e1cb7 4Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
ac1ca104 5This program and the accompanying materials\r
51ebae6b 6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef _UNDI_32_H_\r
16#define _UNDI_32_H_\r
17\r
18#include <Uefi.h>\r
19\r
20#include <Guid/EventGroup.h>\r
21#include <Protocol/PciIo.h>\r
22#include <Protocol/NetworkInterfaceIdentifier.h>\r
23#include <Protocol/DevicePath.h>\r
24\r
25#include <Library/UefiDriverEntryPoint.h>\r
26#include <Library/UefiRuntimeLib.h>\r
27#include <Library/DebugLib.h>\r
28#include <Library/BaseMemoryLib.h>\r
29#include <Library/UefiBootServicesTableLib.h>\r
30#include <Library/UefiLib.h>\r
31#include <Library/BaseLib.h>\r
32#include <Library/DevicePathLib.h>\r
33\r
34#include <IndustryStandard/Pci.h>\r
35\r
36\r
37#include "E100b.h"\r
38\r
906e1cb7 39extern EFI_DRIVER_BINDING_PROTOCOL gUndiDriverBinding;\r
40extern EFI_COMPONENT_NAME_PROTOCOL gUndiComponentName;\r
41extern EFI_COMPONENT_NAME2_PROTOCOL gUndiComponentName2;\r
42\r
51ebae6b 43#define MAX_NIC_INTERFACES 16\r
44\r
45#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION_31 0x00010001\r
46#define PXE_ROMID_MINORVER_31 0x10\r
47#define PXE_STATFLAGS_DB_WRITE_TRUNCATED 0x2000\r
48\r
49//\r
50// UNDI_CALL_TABLE.state can have the following values\r
51//\r
52#define DONT_CHECK -1\r
53#define ANY_STATE -1\r
54#define MUST_BE_STARTED 1\r
55#define MUST_BE_INITIALIZED 2\r
56\r
57#define UNDI_DEV_SIGNATURE SIGNATURE_32('u','n','d','i')\r
58#define UNDI_DEV_FROM_THIS(a) CR(a, UNDI32_DEV, NIIProtocol_31, UNDI_DEV_SIGNATURE)\r
59#define UNDI_DEV_FROM_NIC(a) CR(a, UNDI32_DEV, NicInfo, UNDI_DEV_SIGNATURE)\r
60\r
61typedef struct {\r
62 UINTN Signature;\r
63 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL NIIProtocol_31;\r
64 EFI_HANDLE DeviceHandle;\r
65 EFI_DEVICE_PATH_PROTOCOL *Undi32BaseDevPath;\r
66 EFI_DEVICE_PATH_PROTOCOL *Undi32DevPath;\r
67 NIC_DATA_INSTANCE NicInfo;\r
68} UNDI32_DEV;\r
69\r
70typedef struct {\r
71 UINT16 cpbsize;\r
72 UINT16 dbsize;\r
73 UINT16 opflags;\r
74 UINT16 state;\r
75 VOID (*api_ptr)();\r
76} UNDI_CALL_TABLE;\r
77\r
51ebae6b 78typedef VOID (*ptr)(VOID);\r
79typedef VOID (*bsptr_30)(UINTN);\r
80typedef VOID (*virtphys_30)(UINT64, UINT64);\r
81typedef VOID (*block_30)(UINT32);\r
82typedef VOID (*mem_io_30)(UINT8, UINT8, UINT64, UINT64);\r
83\r
84typedef VOID (*bsptr)(UINT64, UINTN);\r
85typedef VOID (*virtphys)(UINT64, UINT64, UINT64);\r
86typedef VOID (*block)(UINT64, UINT32);\r
87typedef VOID (*mem_io)(UINT64, UINT8, UINT8, UINT64, UINT64);\r
88\r
89typedef VOID (*map_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
90typedef VOID (*unmap_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
91typedef VOID (*sync_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
92\r
93extern UNDI_CALL_TABLE api_table[];\r
94extern PXE_SW_UNDI *pxe_31; // !pxe structure for 3.1 drivers\r
95extern UNDI32_DEV *UNDI32DeviceList[MAX_NIC_INTERFACES];\r
96\r
97//\r
98// functions defined in e100b.c\r
99//\r
100UINT8 InByte (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
101UINT16 InWord (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
102UINT32 InLong (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
103VOID OutByte (NIC_DATA_INSTANCE *AdapterInfo, UINT8 Data, UINT32 Port);\r
104VOID OutWord (NIC_DATA_INSTANCE *AdapterInfo, UINT16 Data, UINT32 Port);\r
105VOID OutLong (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Data, UINT32 Port);\r
106\r
107UINTN E100bInit (NIC_DATA_INSTANCE *AdapterInfo);\r
108UINTN E100bReset (NIC_DATA_INSTANCE *AdapterInfo, INT32 OpFlags);\r
109UINTN E100bShutdown (NIC_DATA_INSTANCE *AdapterInfo);\r
110UINTN E100bTransmit (NIC_DATA_INSTANCE *AdapterInfo, UINT64 cpb, UINT16 opflags);\r
111UINTN E100bReceive (NIC_DATA_INSTANCE *AdapterInfo, UINT64 cpb, UINT64 db);\r
112UINTN E100bSetfilter (NIC_DATA_INSTANCE *AdapterInfo, UINT16 New_filter,\r
113 UINT64 cpb, UINT32 cpbsize);\r
114UINTN E100bStatistics(NIC_DATA_INSTANCE *AdapterInfo, UINT64 db, UINT16 dbsize);\r
115UINT8 E100bSetupIAAddr (NIC_DATA_INSTANCE *AdapterInfo);\r
116UINT8 E100bSetInterruptState (NIC_DATA_INSTANCE *AdapterInfo);\r
117\r
118UINT8 E100bGetEepromAddrLen (NIC_DATA_INSTANCE *AdapterInfo);\r
119UINT16 E100bReadEeprom (NIC_DATA_INSTANCE *AdapterInfo, INT32 Location, UINT8 address_len);\r
120INT16 E100bReadEepromAndStationAddress (NIC_DATA_INSTANCE *AdapterInfo);\r
121\r
122UINT16 next(UINT16);\r
123UINT8 SetupCBlink (NIC_DATA_INSTANCE *AdapterInfo);\r
124VOID SetFreeCB (NIC_DATA_INSTANCE *AdapterInfo,TxCB *);\r
125TxCB *GetFreeCB (NIC_DATA_INSTANCE *AdapterInfo);\r
126UINT16 CheckCBList (NIC_DATA_INSTANCE *AdapterInfo);\r
127\r
128UINT8 SelectiveReset (NIC_DATA_INSTANCE *AdapterInfo);\r
129UINT16 InitializeChip (NIC_DATA_INSTANCE *AdapterInfo);\r
130UINT8 SetupReceiveQueues (NIC_DATA_INSTANCE *AdapterInfo);\r
131VOID Recycle_RFD (NIC_DATA_INSTANCE *AdapterInfo, UINT16);\r
132VOID XmitWaitForCompletion (NIC_DATA_INSTANCE *AdapterInfo);\r
133INT8 CommandWaitForCompletion (TxCB *cmd_ptr, NIC_DATA_INSTANCE *AdapterInfo);\r
134\r
135BOOLEAN PhyDetect (NIC_DATA_INSTANCE *AdapterInfo);\r
136VOID PhyReset (NIC_DATA_INSTANCE *AdapterInfo);\r
137VOID\r
138MdiWrite (\r
139 IN NIC_DATA_INSTANCE *AdapterInfo,\r
140 IN UINT8 RegAddress,\r
141 IN UINT8 PhyAddress,\r
142 IN UINT16 DataValue\r
143 );\r
144\r
145VOID\r
146MdiRead(\r
147 IN NIC_DATA_INSTANCE *AdapterInfo,\r
148 IN UINT8 RegAddress,\r
149 IN UINT8 PhyAddress,\r
150 IN OUT UINT16 *DataValue\r
151 );\r
152\r
153BOOLEAN SetupPhy (NIC_DATA_INSTANCE *AdapterInfo);\r
154VOID FindPhySpeedAndDpx (NIC_DATA_INSTANCE *AdapterInfo, UINT32 PhyId);\r
155\r
156\r
157\r
158//\r
159// functions defined in init.c\r
160//\r
161EFI_STATUS\r
162InstallConfigTable (\r
163 IN VOID\r
164 );\r
165\r
166EFI_STATUS\r
167EFIAPI\r
168InitializeUNDIDriver (\r
169 IN EFI_HANDLE ImageHandle,\r
170 IN EFI_SYSTEM_TABLE *SystemTable\r
171 );\r
172\r
173VOID\r
174UNDI_notify_virtual (\r
175 EFI_EVENT event,\r
176 VOID *context\r
177 );\r
178\r
179VOID\r
180EFIAPI\r
181UndiNotifyExitBs (\r
182 EFI_EVENT Event,\r
183 VOID *Context\r
184 );\r
185\r
186EFI_STATUS\r
187EFIAPI\r
188UndiDriverSupported (\r
189 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
190 IN EFI_HANDLE Controller,\r
191 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
192 );\r
193\r
194EFI_STATUS\r
195EFIAPI\r
196UndiDriverStart (\r
197 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
198 IN EFI_HANDLE Controller,\r
199 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
200 );\r
201\r
202EFI_STATUS\r
203EFIAPI\r
204UndiDriverStop (\r
205 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
206 IN EFI_HANDLE Controller,\r
207 IN UINTN NumberOfChildren,\r
208 IN EFI_HANDLE *ChildHandleBuffer\r
209 );\r
210\r
211EFI_STATUS\r
212AppendMac2DevPath (\r
213 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPtr,\r
214 IN EFI_DEVICE_PATH_PROTOCOL *BaseDevPtr,\r
215 IN NIC_DATA_INSTANCE *AdapterInfo\r
216 );\r
217\r
218VOID\r
219TmpDelay (\r
220 IN UINT64 UnqId,\r
221 IN UINTN MicroSeconds\r
222 );\r
223\r
224VOID\r
225TmpMemIo (\r
226 IN UINT64 UnqId,\r
227 IN UINT8 ReadWrite,\r
228 IN UINT8 Len,\r
229 IN UINT64 Port,\r
230 IN UINT64 BufAddr\r
231 );\r
232\r
233//\r
234// functions defined in decode.c\r
235//\r
236VOID\r
237UNDI_GetState (\r
238 IN PXE_CDB *CdbPtr,\r
239 IN NIC_DATA_INSTANCE *AdapterInfo\r
240 );\r
241\r
242VOID\r
243UNDI_Start (\r
244 IN PXE_CDB *CdbPtr,\r
245 IN NIC_DATA_INSTANCE *AdapterInfo\r
246 );\r
247\r
248VOID\r
249UNDI_Stop (\r
250 IN PXE_CDB *CdbPtr,\r
251 IN NIC_DATA_INSTANCE *AdapterInfo\r
252 );\r
253\r
254VOID\r
255UNDI_GetInitInfo (\r
256 IN PXE_CDB *CdbPtr,\r
257 IN NIC_DATA_INSTANCE *AdapterInfo\r
258 );\r
259\r
260VOID\r
261UNDI_GetConfigInfo (\r
262 IN PXE_CDB *CdbPtr,\r
263 IN NIC_DATA_INSTANCE *AdapterInfo\r
264 );\r
265\r
266VOID\r
267UNDI_Initialize (\r
268 IN PXE_CDB *CdbPtr,\r
269 NIC_DATA_INSTANCE *AdapterInfo\r
270 );\r
271\r
272VOID\r
273UNDI_Reset (\r
274 IN PXE_CDB *CdbPtr,\r
275 IN NIC_DATA_INSTANCE *AdapterInfo\r
276 );\r
277\r
278VOID\r
279UNDI_Shutdown (\r
280 IN PXE_CDB *CdbPtr,\r
281 IN NIC_DATA_INSTANCE *AdapterInfo\r
282 );\r
283\r
284VOID\r
285UNDI_Interrupt (\r
286 IN PXE_CDB *CdbPtr,\r
287 IN NIC_DATA_INSTANCE *AdapterInfo\r
288 );\r
289\r
290VOID\r
291UNDI_RecFilter (\r
292 IN PXE_CDB *CdbPtr,\r
293 IN NIC_DATA_INSTANCE *AdapterInfo\r
294 );\r
295\r
296VOID\r
297UNDI_StnAddr (\r
298 IN PXE_CDB *CdbPtr,\r
299 IN NIC_DATA_INSTANCE *AdapterInfo\r
300 );\r
301\r
302VOID\r
303UNDI_Statistics (\r
304 IN PXE_CDB *CdbPtr,\r
305 IN NIC_DATA_INSTANCE *AdapterInfo\r
306 );\r
307\r
308VOID\r
309UNDI_ip2mac (\r
310 IN PXE_CDB *CdbPtr,\r
311 IN NIC_DATA_INSTANCE *AdapterInfo\r
312 );\r
313\r
314VOID\r
315UNDI_NVData (\r
316 IN PXE_CDB *CdbPtr,\r
317 IN NIC_DATA_INSTANCE *AdapterInfo\r
318 );\r
319\r
320VOID\r
321UNDI_Status (\r
322 IN PXE_CDB *CdbPtr,\r
323 IN NIC_DATA_INSTANCE *AdapterInfo\r
324 );\r
325\r
326VOID\r
327UNDI_FillHeader (\r
328 IN PXE_CDB *CdbPtr,\r
329 IN NIC_DATA_INSTANCE *AdapterInfo\r
330 );\r
331\r
332VOID\r
333UNDI_Transmit (\r
334 IN PXE_CDB *CdbPtr,\r
335 IN NIC_DATA_INSTANCE *AdapterInfo\r
336 );\r
337\r
338VOID\r
339UNDI_Receive (\r
340 IN PXE_CDB *CdbPtr,\r
341 IN NIC_DATA_INSTANCE *AdapterInfo\r
342 );\r
343\r
344VOID UNDI_APIEntry_new(UINT64);\r
345VOID UNDI_APIEntry_Common(UINT64);\r
346\r
347PXE_IPV4 convert_mcip(PXE_MAC_ADDR *);\r
348INT32 validate_mcip (PXE_MAC_ADDR *MCastAddr);\r
349\r
350VOID PxeStructInit (PXE_SW_UNDI *PxePtr);\r
351VOID PxeUpdate (NIC_DATA_INSTANCE *NicPtr, PXE_SW_UNDI *PxePtr);\r
352\r
353#endif\r