]> git.proxmox.com Git - mirror_edk2.git/blame - OptionRomPkg/UndiRuntimeDxe/Undi32.h
OptionRomPkg: Update UndiRuntimeDxe 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
7db61f68 4Copyright (c) 2006 - 2015, 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
51ebae6b 179EFI_STATUS\r
180EFIAPI\r
181UndiDriverSupported (\r
182 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
183 IN EFI_HANDLE Controller,\r
184 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
185 );\r
186\r
187EFI_STATUS\r
188EFIAPI\r
189UndiDriverStart (\r
190 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
191 IN EFI_HANDLE Controller,\r
192 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
193 );\r
194\r
195EFI_STATUS\r
196EFIAPI\r
197UndiDriverStop (\r
198 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
199 IN EFI_HANDLE Controller,\r
200 IN UINTN NumberOfChildren,\r
201 IN EFI_HANDLE *ChildHandleBuffer\r
202 );\r
203\r
204EFI_STATUS\r
205AppendMac2DevPath (\r
206 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPtr,\r
207 IN EFI_DEVICE_PATH_PROTOCOL *BaseDevPtr,\r
208 IN NIC_DATA_INSTANCE *AdapterInfo\r
209 );\r
210\r
211VOID\r
212TmpDelay (\r
213 IN UINT64 UnqId,\r
214 IN UINTN MicroSeconds\r
215 );\r
216\r
217VOID\r
218TmpMemIo (\r
219 IN UINT64 UnqId,\r
220 IN UINT8 ReadWrite,\r
221 IN UINT8 Len,\r
222 IN UINT64 Port,\r
223 IN UINT64 BufAddr\r
224 );\r
225\r
226//\r
227// functions defined in decode.c\r
228//\r
229VOID\r
230UNDI_GetState (\r
231 IN PXE_CDB *CdbPtr,\r
232 IN NIC_DATA_INSTANCE *AdapterInfo\r
233 );\r
234\r
235VOID\r
236UNDI_Start (\r
237 IN PXE_CDB *CdbPtr,\r
238 IN NIC_DATA_INSTANCE *AdapterInfo\r
239 );\r
240\r
241VOID\r
242UNDI_Stop (\r
243 IN PXE_CDB *CdbPtr,\r
244 IN NIC_DATA_INSTANCE *AdapterInfo\r
245 );\r
246\r
247VOID\r
248UNDI_GetInitInfo (\r
249 IN PXE_CDB *CdbPtr,\r
250 IN NIC_DATA_INSTANCE *AdapterInfo\r
251 );\r
252\r
253VOID\r
254UNDI_GetConfigInfo (\r
255 IN PXE_CDB *CdbPtr,\r
256 IN NIC_DATA_INSTANCE *AdapterInfo\r
257 );\r
258\r
259VOID\r
260UNDI_Initialize (\r
261 IN PXE_CDB *CdbPtr,\r
262 NIC_DATA_INSTANCE *AdapterInfo\r
263 );\r
264\r
265VOID\r
266UNDI_Reset (\r
267 IN PXE_CDB *CdbPtr,\r
268 IN NIC_DATA_INSTANCE *AdapterInfo\r
269 );\r
270\r
271VOID\r
272UNDI_Shutdown (\r
273 IN PXE_CDB *CdbPtr,\r
274 IN NIC_DATA_INSTANCE *AdapterInfo\r
275 );\r
276\r
277VOID\r
278UNDI_Interrupt (\r
279 IN PXE_CDB *CdbPtr,\r
280 IN NIC_DATA_INSTANCE *AdapterInfo\r
281 );\r
282\r
283VOID\r
284UNDI_RecFilter (\r
285 IN PXE_CDB *CdbPtr,\r
286 IN NIC_DATA_INSTANCE *AdapterInfo\r
287 );\r
288\r
289VOID\r
290UNDI_StnAddr (\r
291 IN PXE_CDB *CdbPtr,\r
292 IN NIC_DATA_INSTANCE *AdapterInfo\r
293 );\r
294\r
295VOID\r
296UNDI_Statistics (\r
297 IN PXE_CDB *CdbPtr,\r
298 IN NIC_DATA_INSTANCE *AdapterInfo\r
299 );\r
300\r
301VOID\r
302UNDI_ip2mac (\r
303 IN PXE_CDB *CdbPtr,\r
304 IN NIC_DATA_INSTANCE *AdapterInfo\r
305 );\r
306\r
307VOID\r
308UNDI_NVData (\r
309 IN PXE_CDB *CdbPtr,\r
310 IN NIC_DATA_INSTANCE *AdapterInfo\r
311 );\r
312\r
313VOID\r
314UNDI_Status (\r
315 IN PXE_CDB *CdbPtr,\r
316 IN NIC_DATA_INSTANCE *AdapterInfo\r
317 );\r
318\r
319VOID\r
320UNDI_FillHeader (\r
321 IN PXE_CDB *CdbPtr,\r
322 IN NIC_DATA_INSTANCE *AdapterInfo\r
323 );\r
324\r
325VOID\r
326UNDI_Transmit (\r
327 IN PXE_CDB *CdbPtr,\r
328 IN NIC_DATA_INSTANCE *AdapterInfo\r
329 );\r
330\r
331VOID\r
332UNDI_Receive (\r
333 IN PXE_CDB *CdbPtr,\r
334 IN NIC_DATA_INSTANCE *AdapterInfo\r
335 );\r
336\r
337VOID UNDI_APIEntry_new(UINT64);\r
338VOID UNDI_APIEntry_Common(UINT64);\r
339\r
340PXE_IPV4 convert_mcip(PXE_MAC_ADDR *);\r
341INT32 validate_mcip (PXE_MAC_ADDR *MCastAddr);\r
342\r
343VOID PxeStructInit (PXE_SW_UNDI *PxePtr);\r
344VOID PxeUpdate (NIC_DATA_INSTANCE *NicPtr, PXE_SW_UNDI *PxePtr);\r
345\r
346#endif\r