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