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