]> git.proxmox.com Git - mirror_edk2.git/blame - OptionRomPkg/UndiRuntimeDxe/Undi32.h
OptionRomPkg: Fix calling convention issue for UndiRuntiumeDxe 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
176eb3a1 4Copyright (c) 2006 - 2017, 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
2bbe9553 24#include <Protocol/AdapterInformation.h>\r
51ebae6b 25\r
26#include <Library/UefiDriverEntryPoint.h>\r
27#include <Library/UefiRuntimeLib.h>\r
28#include <Library/DebugLib.h>\r
29#include <Library/BaseMemoryLib.h>\r
30#include <Library/UefiBootServicesTableLib.h>\r
31#include <Library/UefiLib.h>\r
32#include <Library/BaseLib.h>\r
33#include <Library/DevicePathLib.h>\r
2bbe9553 34#include <Library/MemoryAllocationLib.h>\r
51ebae6b 35\r
36#include <IndustryStandard/Pci.h>\r
37\r
38\r
39#include "E100b.h"\r
40\r
906e1cb7 41extern EFI_DRIVER_BINDING_PROTOCOL gUndiDriverBinding;\r
42extern EFI_COMPONENT_NAME_PROTOCOL gUndiComponentName;\r
43extern EFI_COMPONENT_NAME2_PROTOCOL gUndiComponentName2;\r
44\r
51ebae6b 45#define MAX_NIC_INTERFACES 16\r
46\r
47#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION_31 0x00010001\r
48#define PXE_ROMID_MINORVER_31 0x10\r
49#define PXE_STATFLAGS_DB_WRITE_TRUNCATED 0x2000\r
50\r
51//\r
52// UNDI_CALL_TABLE.state can have the following values\r
53//\r
54#define DONT_CHECK -1\r
55#define ANY_STATE -1\r
56#define MUST_BE_STARTED 1\r
57#define MUST_BE_INITIALIZED 2\r
58\r
59#define UNDI_DEV_SIGNATURE SIGNATURE_32('u','n','d','i')\r
60#define UNDI_DEV_FROM_THIS(a) CR(a, UNDI32_DEV, NIIProtocol_31, UNDI_DEV_SIGNATURE)\r
61#define UNDI_DEV_FROM_NIC(a) CR(a, UNDI32_DEV, NicInfo, UNDI_DEV_SIGNATURE)\r
2bbe9553 62#define UNDI_DEV_FROM_AIP(a) CR(a, UNDI32_DEV, Aip, UNDI_DEV_SIGNATURE)\r
51ebae6b 63\r
64typedef struct {\r
65 UINTN Signature;\r
66 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL NIIProtocol_31;\r
2bbe9553 67 EFI_ADAPTER_INFORMATION_PROTOCOL Aip;\r
51ebae6b 68 EFI_HANDLE DeviceHandle;\r
69 EFI_DEVICE_PATH_PROTOCOL *Undi32BaseDevPath;\r
70 EFI_DEVICE_PATH_PROTOCOL *Undi32DevPath;\r
71 NIC_DATA_INSTANCE NicInfo;\r
72} UNDI32_DEV;\r
73\r
74typedef struct {\r
75 UINT16 cpbsize;\r
76 UINT16 dbsize;\r
77 UINT16 opflags;\r
78 UINT16 state;\r
79 VOID (*api_ptr)();\r
80} UNDI_CALL_TABLE;\r
81\r
51ebae6b 82typedef VOID (*ptr)(VOID);\r
83typedef VOID (*bsptr_30)(UINTN);\r
84typedef VOID (*virtphys_30)(UINT64, UINT64);\r
85typedef VOID (*block_30)(UINT32);\r
86typedef VOID (*mem_io_30)(UINT8, UINT8, UINT64, UINT64);\r
87\r
88typedef VOID (*bsptr)(UINT64, UINTN);\r
89typedef VOID (*virtphys)(UINT64, UINT64, UINT64);\r
90typedef VOID (*block)(UINT64, UINT32);\r
91typedef VOID (*mem_io)(UINT64, UINT8, UINT8, UINT64, UINT64);\r
92\r
93typedef VOID (*map_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
94typedef VOID (*unmap_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
95typedef VOID (*sync_mem)(UINT64, UINT64, UINT32, UINT32, UINT64);\r
96\r
97extern UNDI_CALL_TABLE api_table[];\r
98extern PXE_SW_UNDI *pxe_31; // !pxe structure for 3.1 drivers\r
99extern UNDI32_DEV *UNDI32DeviceList[MAX_NIC_INTERFACES];\r
100\r
101//\r
102// functions defined in e100b.c\r
103//\r
104UINT8 InByte (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
105UINT16 InWord (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
106UINT32 InLong (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Port);\r
107VOID OutByte (NIC_DATA_INSTANCE *AdapterInfo, UINT8 Data, UINT32 Port);\r
108VOID OutWord (NIC_DATA_INSTANCE *AdapterInfo, UINT16 Data, UINT32 Port);\r
109VOID OutLong (NIC_DATA_INSTANCE *AdapterInfo, UINT32 Data, UINT32 Port);\r
110\r
111UINTN E100bInit (NIC_DATA_INSTANCE *AdapterInfo);\r
112UINTN E100bReset (NIC_DATA_INSTANCE *AdapterInfo, INT32 OpFlags);\r
113UINTN E100bShutdown (NIC_DATA_INSTANCE *AdapterInfo);\r
114UINTN E100bTransmit (NIC_DATA_INSTANCE *AdapterInfo, UINT64 cpb, UINT16 opflags);\r
115UINTN E100bReceive (NIC_DATA_INSTANCE *AdapterInfo, UINT64 cpb, UINT64 db);\r
116UINTN E100bSetfilter (NIC_DATA_INSTANCE *AdapterInfo, UINT16 New_filter,\r
117 UINT64 cpb, UINT32 cpbsize);\r
118UINTN E100bStatistics(NIC_DATA_INSTANCE *AdapterInfo, UINT64 db, UINT16 dbsize);\r
119UINT8 E100bSetupIAAddr (NIC_DATA_INSTANCE *AdapterInfo);\r
120UINT8 E100bSetInterruptState (NIC_DATA_INSTANCE *AdapterInfo);\r
121\r
122UINT8 E100bGetEepromAddrLen (NIC_DATA_INSTANCE *AdapterInfo);\r
123UINT16 E100bReadEeprom (NIC_DATA_INSTANCE *AdapterInfo, INT32 Location, UINT8 address_len);\r
124INT16 E100bReadEepromAndStationAddress (NIC_DATA_INSTANCE *AdapterInfo);\r
125\r
126UINT16 next(UINT16);\r
127UINT8 SetupCBlink (NIC_DATA_INSTANCE *AdapterInfo);\r
128VOID SetFreeCB (NIC_DATA_INSTANCE *AdapterInfo,TxCB *);\r
129TxCB *GetFreeCB (NIC_DATA_INSTANCE *AdapterInfo);\r
130UINT16 CheckCBList (NIC_DATA_INSTANCE *AdapterInfo);\r
131\r
132UINT8 SelectiveReset (NIC_DATA_INSTANCE *AdapterInfo);\r
133UINT16 InitializeChip (NIC_DATA_INSTANCE *AdapterInfo);\r
134UINT8 SetupReceiveQueues (NIC_DATA_INSTANCE *AdapterInfo);\r
135VOID Recycle_RFD (NIC_DATA_INSTANCE *AdapterInfo, UINT16);\r
136VOID XmitWaitForCompletion (NIC_DATA_INSTANCE *AdapterInfo);\r
137INT8 CommandWaitForCompletion (TxCB *cmd_ptr, NIC_DATA_INSTANCE *AdapterInfo);\r
138\r
139BOOLEAN PhyDetect (NIC_DATA_INSTANCE *AdapterInfo);\r
140VOID PhyReset (NIC_DATA_INSTANCE *AdapterInfo);\r
141VOID\r
142MdiWrite (\r
143 IN NIC_DATA_INSTANCE *AdapterInfo,\r
144 IN UINT8 RegAddress,\r
145 IN UINT8 PhyAddress,\r
146 IN UINT16 DataValue\r
147 );\r
148\r
149VOID\r
150MdiRead(\r
151 IN NIC_DATA_INSTANCE *AdapterInfo,\r
152 IN UINT8 RegAddress,\r
153 IN UINT8 PhyAddress,\r
154 IN OUT UINT16 *DataValue\r
155 );\r
156\r
157BOOLEAN SetupPhy (NIC_DATA_INSTANCE *AdapterInfo);\r
158VOID FindPhySpeedAndDpx (NIC_DATA_INSTANCE *AdapterInfo, UINT32 PhyId);\r
159\r
160\r
161\r
162//\r
163// functions defined in init.c\r
164//\r
165EFI_STATUS\r
166InstallConfigTable (\r
167 IN VOID\r
168 );\r
169\r
170EFI_STATUS\r
171EFIAPI\r
172InitializeUNDIDriver (\r
173 IN EFI_HANDLE ImageHandle,\r
174 IN EFI_SYSTEM_TABLE *SystemTable\r
175 );\r
176\r
177VOID\r
178UNDI_notify_virtual (\r
179 EFI_EVENT event,\r
180 VOID *context\r
181 );\r
182\r
51ebae6b 183EFI_STATUS\r
184EFIAPI\r
185UndiDriverSupported (\r
186 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
187 IN EFI_HANDLE Controller,\r
188 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
189 );\r
190\r
191EFI_STATUS\r
192EFIAPI\r
193UndiDriverStart (\r
194 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
195 IN EFI_HANDLE Controller,\r
196 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
197 );\r
198\r
199EFI_STATUS\r
200EFIAPI\r
201UndiDriverStop (\r
202 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
203 IN EFI_HANDLE Controller,\r
204 IN UINTN NumberOfChildren,\r
205 IN EFI_HANDLE *ChildHandleBuffer\r
206 );\r
207\r
208EFI_STATUS\r
209AppendMac2DevPath (\r
210 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPtr,\r
211 IN EFI_DEVICE_PATH_PROTOCOL *BaseDevPtr,\r
212 IN NIC_DATA_INSTANCE *AdapterInfo\r
213 );\r
214\r
215VOID\r
216TmpDelay (\r
217 IN UINT64 UnqId,\r
218 IN UINTN MicroSeconds\r
219 );\r
220\r
221VOID\r
222TmpMemIo (\r
223 IN UINT64 UnqId,\r
224 IN UINT8 ReadWrite,\r
225 IN UINT8 Len,\r
226 IN UINT64 Port,\r
227 IN UINT64 BufAddr\r
228 );\r
229\r
230//\r
231// functions defined in decode.c\r
232//\r
233VOID\r
234UNDI_GetState (\r
235 IN PXE_CDB *CdbPtr,\r
236 IN NIC_DATA_INSTANCE *AdapterInfo\r
237 );\r
238\r
239VOID\r
240UNDI_Start (\r
241 IN PXE_CDB *CdbPtr,\r
242 IN NIC_DATA_INSTANCE *AdapterInfo\r
243 );\r
244\r
245VOID\r
246UNDI_Stop (\r
247 IN PXE_CDB *CdbPtr,\r
248 IN NIC_DATA_INSTANCE *AdapterInfo\r
249 );\r
250\r
251VOID\r
252UNDI_GetInitInfo (\r
253 IN PXE_CDB *CdbPtr,\r
254 IN NIC_DATA_INSTANCE *AdapterInfo\r
255 );\r
256\r
257VOID\r
258UNDI_GetConfigInfo (\r
259 IN PXE_CDB *CdbPtr,\r
260 IN NIC_DATA_INSTANCE *AdapterInfo\r
261 );\r
262\r
263VOID\r
264UNDI_Initialize (\r
265 IN PXE_CDB *CdbPtr,\r
266 NIC_DATA_INSTANCE *AdapterInfo\r
267 );\r
268\r
269VOID\r
270UNDI_Reset (\r
271 IN PXE_CDB *CdbPtr,\r
272 IN NIC_DATA_INSTANCE *AdapterInfo\r
273 );\r
274\r
275VOID\r
276UNDI_Shutdown (\r
277 IN PXE_CDB *CdbPtr,\r
278 IN NIC_DATA_INSTANCE *AdapterInfo\r
279 );\r
280\r
281VOID\r
282UNDI_Interrupt (\r
283 IN PXE_CDB *CdbPtr,\r
284 IN NIC_DATA_INSTANCE *AdapterInfo\r
285 );\r
286\r
287VOID\r
288UNDI_RecFilter (\r
289 IN PXE_CDB *CdbPtr,\r
290 IN NIC_DATA_INSTANCE *AdapterInfo\r
291 );\r
292\r
293VOID\r
294UNDI_StnAddr (\r
295 IN PXE_CDB *CdbPtr,\r
296 IN NIC_DATA_INSTANCE *AdapterInfo\r
297 );\r
298\r
299VOID\r
300UNDI_Statistics (\r
301 IN PXE_CDB *CdbPtr,\r
302 IN NIC_DATA_INSTANCE *AdapterInfo\r
303 );\r
304\r
305VOID\r
306UNDI_ip2mac (\r
307 IN PXE_CDB *CdbPtr,\r
308 IN NIC_DATA_INSTANCE *AdapterInfo\r
309 );\r
310\r
311VOID\r
312UNDI_NVData (\r
313 IN PXE_CDB *CdbPtr,\r
314 IN NIC_DATA_INSTANCE *AdapterInfo\r
315 );\r
316\r
317VOID\r
318UNDI_Status (\r
319 IN PXE_CDB *CdbPtr,\r
320 IN NIC_DATA_INSTANCE *AdapterInfo\r
321 );\r
322\r
323VOID\r
324UNDI_FillHeader (\r
325 IN PXE_CDB *CdbPtr,\r
326 IN NIC_DATA_INSTANCE *AdapterInfo\r
327 );\r
328\r
329VOID\r
330UNDI_Transmit (\r
331 IN PXE_CDB *CdbPtr,\r
332 IN NIC_DATA_INSTANCE *AdapterInfo\r
333 );\r
334\r
335VOID\r
336UNDI_Receive (\r
337 IN PXE_CDB *CdbPtr,\r
338 IN NIC_DATA_INSTANCE *AdapterInfo\r
339 );\r
340\r
176eb3a1 341VOID EFIAPI UNDI_APIEntry_new(UINT64);\r
51ebae6b 342VOID UNDI_APIEntry_Common(UINT64);\r
343\r
344PXE_IPV4 convert_mcip(PXE_MAC_ADDR *);\r
345INT32 validate_mcip (PXE_MAC_ADDR *MCastAddr);\r
346\r
347VOID PxeStructInit (PXE_SW_UNDI *PxePtr);\r
348VOID PxeUpdate (NIC_DATA_INSTANCE *NicPtr, PXE_SW_UNDI *PxePtr);\r
349\r
2bbe9553
YT
350//\r
351// functions defined in UndiAipImpl.c\r
352//\r
353\r
354/**\r
355 Returns the current state information for the adapter.\r
356\r
357 This function returns information of type InformationType from the adapter.\r
358 If an adapter does not support the requested informational type, then\r
359 EFI_UNSUPPORTED is returned. \r
360\r
361 @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance.\r
362 @param[in] InformationType A pointer to an EFI_GUID that defines the contents of InformationBlock.\r
363 @param[out] InforamtionBlock The service returns a pointer to the buffer with the InformationBlock\r
364 structure which contains details about the data specific to InformationType.\r
365 @param[out] InforamtionBlockSize The driver returns the size of the InformationBlock in bytes.\r
366\r
367 @retval EFI_SUCCESS The InformationType information was retrieved.\r
368 @retval EFI_UNSUPPORTED The InformationType is not known.\r
369 @retval EFI_DEVICE_ERROR The device reported an error.\r
370 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
371 @retval EFI_INVALID_PARAMETER This is NULL. \r
372 @retval EFI_INVALID_PARAMETER InformationBlock is NULL. \r
373 @retval EFI_INVALID_PARAMETER InformationBlockSize is NULL.\r
374\r
375**/ \r
376EFI_STATUS\r
377EFIAPI\r
378UndiAipGetInfo (\r
379 IN EFI_ADAPTER_INFORMATION_PROTOCOL *This,\r
380 IN EFI_GUID *InformationType,\r
381 OUT VOID **InformationBlock,\r
382 OUT UINTN *InformationBlockSize\r
383 );\r
384\r
385/**\r
386 Sets state information for an adapter.\r
387\r
388 This function sends information of type InformationType for an adapter.\r
389 If an adapter does not support the requested information type, then EFI_UNSUPPORTED\r
390 is returned.\r
391\r
392 @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance.\r
393 @param[in] InformationType A pointer to an EFI_GUID that defines the contents of InformationBlock.\r
394 @param[in] InforamtionBlock A pointer to the InformationBlock structure which contains details\r
395 about the data specific to InformationType.\r
396 @param[in] InforamtionBlockSize The size of the InformationBlock in bytes.\r
397\r
398 @retval EFI_SUCCESS The information was received and interpreted successfully.\r
399 @retval EFI_UNSUPPORTED The InformationType is not known.\r
400 @retval EFI_DEVICE_ERROR The device reported an error.\r
401 @retval EFI_INVALID_PARAMETER This is NULL.\r
402 @retval EFI_INVALID_PARAMETER InformationBlock is NULL.\r
403 @retval EFI_WRITE_PROTECTED The InformationType cannot be modified using EFI_ADAPTER_INFO_SET_INFO().\r
404\r
405**/ \r
406EFI_STATUS\r
407EFIAPI\r
408UndiAipSetInfo (\r
409 IN EFI_ADAPTER_INFORMATION_PROTOCOL *This,\r
410 IN EFI_GUID *InformationType,\r
411 IN VOID *InformationBlock,\r
412 IN UINTN InformationBlockSize\r
413 );\r
414\r
415/**\r
416 Get a list of supported information types for this instance of the protocol.\r
417\r
418 This function returns a list of InformationType GUIDs that are supported on an\r
419 adapter with this instance of EFI_ADAPTER_INFORMATION_PROTOCOL. The list is returned\r
420 in InfoTypesBuffer, and the number of GUID pointers in InfoTypesBuffer is returned in\r
421 InfoTypesBufferCount.\r
422\r
423 @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance.\r
424 @param[out] InfoTypesBuffer A pointer to the list of InformationType GUID pointers that are supported\r
425 by This.\r
426 @param[out] InfoTypesBufferCount A pointer to the number of GUID pointers present in InfoTypesBuffer.\r
427\r
428 @retval EFI_SUCCESS The list of information type GUIDs that are supported on this adapter was\r
429 returned in InfoTypesBuffer. The number of information type GUIDs was\r
430 returned in InfoTypesBufferCount.\r
431 @retval EFI_INVALID_PARAMETER This is NULL.\r
432 @retval EFI_INVALID_PARAMETER InfoTypesBuffer is NULL.\r
433 @retval EFI_INVALID_PARAMETER InfoTypesBufferCount is NULL.\r
434 @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the results.\r
435\r
436**/ \r
437EFI_STATUS\r
438EFIAPI\r
439UndiAipGetSupportedTypes (\r
440 IN EFI_ADAPTER_INFORMATION_PROTOCOL *This,\r
441 OUT EFI_GUID **InfoTypesBuffer,\r
442 OUT UINTN *InfoTypesBufferCount\r
443 );\r
444\r
51ebae6b 445#endif\r