]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
Clean up Network Components to support GCC build.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeBcDxe / Bc.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2004 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13 bc.h\r
14\r
15Abstract:\r
16\r
17\r
18**/\r
19\r
20#ifndef _BC_H\r
21#define _BC_H\r
22\r
772db4bb 23#include <PiDxe.h>\r
24\r
25#include <Guid/SmBios.h>\r
26#include <Protocol/Bis.h>\r
27#include <Protocol/PxeBaseCode.h>\r
28#include <Protocol/PxeBaseCodeCallBack.h>\r
29#include <Protocol/NetworkInterfaceIdentifier.h>\r
30#include <Protocol/SimpleNetwork.h>\r
31#include <Protocol/LoadFile.h>\r
83cbd279 32#include <Protocol/DevicePath.h>\r
772db4bb 33#include <Protocol/Tcp.h>\r
34\r
35#include <Library/DebugLib.h>\r
83cbd279 36#include <Library/BaseMemoryLib.h>\r
772db4bb 37#include <Library/MemoryAllocationLib.h>\r
38#include <Library/UefiDriverEntryPoint.h>\r
39#include <Library/UefiBootServicesTableLib.h>\r
40#include <Library/BaseLib.h>\r
83cbd279 41#include <Library/UefiLib.h>\r
42\r
43#define CALLBACK_INTERVAL 100 // ten times a second\r
44#define FILTER_BITS (EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP | \\r
45 EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST | \\r
46 EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS | \\r
47 EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST \\r
48 )\r
49\r
50#define WAIT_TX_TIMEOUT 1000\r
51\r
52#define SUPPORT_IPV6 0\r
53\r
54#define PXE_BASECODE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'd')\r
55\r
56//\r
57// Determine the classes of IPv4 address\r
58//\r
59#define IS_CLASSA_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0x80) == 0x00)\r
60#define IS_CLASSB_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xc0) == 0x80)\r
61#define IS_CLASSC_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xe0) == 0xc0)\r
62#define IS_INADDR_UNICAST(x) ((IS_CLASSA_IPADDR(x) || IS_CLASSB_IPADDR(x) || IS_CLASSC_IPADDR(x)) && (((EFI_IP_ADDRESS*)x)->Addr[0] != 0) )\r
63\r
64//\r
65// Definitions for internet group management protocol version 2 message\r
66// structure\r
67// Per RFC 2236, November 1997\r
68//\r
69#pragma pack(1)\r
70\r
71typedef struct {\r
72 UINT8 Type;\r
73 UINT8 MaxRespTime; // in tenths of a second\r
74 UINT16 Checksum; // ones complement of ones complement sum of\r
75 // 16 bit words of message\r
76 UINT32 GroupAddress; // for general query, all systems group,\r
77 // for group specific, the group\r
78} IGMPV2_MESSAGE;\r
79\r
80#define IGMP_TYPE_QUERY 0x11\r
81#define IGMP_TYPE_REPORT 0x16\r
82#define IGMP_TYPE_V1REPORT 0x12\r
83#define IGMP_TYPE_LEAVE_GROUP 0x17\r
84\r
85#define IGMP_DEFAULT_MAX_RESPONSE_TIME 10 // 10 second default\r
86#pragma pack()\r
87\r
88#define MAX_MCAST_GROUPS 8 // most we allow ourselves to join at once\r
89#define MAX_OFFERS 16\r
90\r
91typedef struct {\r
92 UINTN Signature;\r
93 EFI_LOCK Lock;\r
94 BOOLEAN ShowErrorMessages;\r
95 EFI_TCP_PROTOCOL Tcp;\r
96 EFI_PXE_BASE_CODE_PROTOCOL EfiBc;\r
97 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *CallbackProtocolPtr;\r
98 EFI_HANDLE Handle;\r
99\r
100 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiPtr;\r
101 EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetwork;\r
102 UINT8 *TransmitBufferPtr;\r
103 UINT8 *ReceiveBufferPtr;\r
104 EFI_PXE_BASE_CODE_FUNCTION Function;\r
105\r
106 UINTN OldestArpEntry;\r
107 UINTN MCastGroupCount;\r
108 EFI_EVENT Igmpv1TimeoutEvent;\r
109 BOOLEAN UseIgmpv1Reporting;\r
110 EFI_EVENT IgmpGroupEvent[MAX_MCAST_GROUPS];\r
111 UINT16 RandomPort;\r
112\r
113#if SUPPORT_IPV6\r
114 //\r
115 // TBD\r
116 //\r
117#else\r
118 UINT32 MCastGroup[MAX_MCAST_GROUPS];\r
119#endif\r
120\r
121 BOOLEAN GoodStationIp;\r
122 BOOLEAN DidTransmit;\r
123 UINTN IpLength;\r
124 VOID *DhcpPacketBuffer;\r
125 UINTN FileSize;\r
126 VOID *BootServerReceiveBuffer;\r
127 EFI_IP_ADDRESS ServerIp;\r
128\r
129 //\r
130 // work area\r
131 // for dhcp\r
132 //\r
133 VOID *ReceiveBuffers;\r
134 VOID *TransmitBuffer;\r
135 UINTN NumOffersReceived;\r
136 UINT16 TotalSeconds;\r
137\r
138 //\r
139 // arrays for different types of offers\r
140 //\r
141 UINT8 ServerCount[4];\r
142 UINT8 OfferCount[4][MAX_OFFERS];\r
143 UINT8 GotBootp;\r
144 UINT8 GotProxy[4];\r
145 UINT8 BinlProxies[MAX_OFFERS];\r
146\r
147 UINT8 *ArpBuffer;\r
148 UINT8 *TftpAckBuffer;\r
149 UINT8 *TftpErrorBuffer;\r
150 IGMPV2_MESSAGE IgmpMessage;\r
151 BOOLEAN BigBlkNumFlag;\r
152 UINT8 Timeout;\r
153 UINT16 RandomSeed;\r
154} PXE_BASECODE_DEVICE;\r
155\r
156//\r
157// type index\r
158//\r
159#define DHCP_ONLY_IX 0\r
160#define PXE10_IX 1\r
161#define WfM11a_IX 2\r
162#define BINL_IX 3\r
163\r
164#define PXE_RND_PORT_LOW 2070\r
165\r
166//\r
167//\r
168//\r
169#define LOADFILE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'l')\r
170\r
171typedef struct {\r
172 UINTN Signature;\r
173 EFI_LOCK Lock;\r
174 EFI_LOAD_FILE_PROTOCOL LoadFile;\r
175 PXE_BASECODE_DEVICE *Private;\r
176} LOADFILE_DEVICE;\r
177\r
178#define EFI_BASE_CODE_DEV_FROM_THIS(a) CR (a, PXE_BASECODE_DEVICE, efi_bc, PXE_BASECODE_DEVICE_SIGNATURE);\r
179\r
180#define EFI_BASE_CODE_DEV_FROM_TCP(a) CR (a, PXE_BASECODE_DEVICE, Tcp, PXE_BASECODE_DEVICE_SIGNATURE);\r
181\r
182#define EFI_LOAD_FILE_DEV_FROM_THIS(a) CR (a, LOADFILE_DEVICE, LoadFile, LOADFILE_DEVICE_SIGNATURE)\r
183\r
184EFI_BIS_PROTOCOL *\r
185PxebcBisStart (\r
186 PXE_BASECODE_DEVICE *Private,\r
187 BIS_APPLICATION_HANDLE *BisAppHandle,\r
188 EFI_BIS_DATA **BisDataSigInfo\r
189 )\r
190;\r
191\r
192VOID\r
193PxebcBisStop (\r
194 EFI_BIS_PROTOCOL *Bis,\r
195 BIS_APPLICATION_HANDLE BisAppHandle,\r
196 EFI_BIS_DATA *BisDataSigInfo\r
197 )\r
198;\r
199\r
200BOOLEAN\r
201PxebcBisVerify (\r
202 PXE_BASECODE_DEVICE *Private,\r
203 VOID *FileBuffer,\r
204 UINTN FileBufferLength,\r
205 VOID *CredentialBuffer,\r
206 UINTN CredentialBufferLength\r
207 )\r
208;\r
209\r
210BOOLEAN\r
211PxebcBisDetect (\r
212 PXE_BASECODE_DEVICE *Private\r
213 )\r
214;\r
215\r
216//\r
217// Global Variables\r
218//\r
219extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
220extern EFI_COMPONENT_NAME2_PROTOCOL gPxeBcComponentName2;\r
221\r
222//\r
223// //////////////////////////////////////////////////////////\r
224//\r
225// prototypes\r
226//\r
227\r
228/**\r
229 Initialize the base code drivers and install the driver binding\r
230\r
231 Standard EFI Image Entry\r
232\r
233 @retval EFI_SUCCESS This driver was successfully bound\r
234\r
235**/\r
236EFI_STATUS\r
237EFIAPI\r
238InitializeBCDriver (\r
239 IN EFI_HANDLE ImageHandle,\r
240 IN EFI_SYSTEM_TABLE *SystemTable\r
241 )\r
242;\r
243\r
244EFI_STATUS\r
245EFIAPI\r
246BcStart (\r
247 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
248 IN BOOLEAN UseIpv6\r
249 )\r
250;\r
251\r
252EFI_STATUS\r
253EFIAPI\r
254BcStop (\r
255 IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
256 )\r
257;\r
258\r
259EFI_STATUS\r
260EFIAPI\r
261BcDhcp (\r
262 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
263 IN BOOLEAN SortOffers\r
264 )\r
265;\r
266\r
267EFI_STATUS\r
268EFIAPI\r
269BcDiscover (\r
270 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
271 IN UINT16 Type,\r
272 IN UINT16 *Layer,\r
273 IN BOOLEAN UseBis,\r
274 IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL\r
275 )\r
276;\r
277\r
278EFI_STATUS\r
279EFIAPI\r
280BcMtftp (\r
281 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
282 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,\r
283 IN OUT VOID *BufferPtr,\r
284 IN BOOLEAN Overwrite,\r
285 IN OUT UINT64 *BufferSize,\r
286 IN UINTN *BlockSize OPTIONAL,\r
287 IN EFI_IP_ADDRESS * ServerIp,\r
288 IN UINT8 *Filename,\r
289 IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,\r
290 IN BOOLEAN DontUseBuffer\r
291 )\r
292;\r
293\r
294EFI_STATUS\r
295EFIAPI\r
296BcUdpWrite (\r
297 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
298 IN UINT16 OpFlags,\r
299 IN EFI_IP_ADDRESS *DestIp,\r
300 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,\r
301 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
302 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
303 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
304 IN UINTN *HeaderSize, OPTIONAL\r
305 IN VOID *HeaderPtr, OPTIONAL\r
306 IN UINTN *BufferSize,\r
307 IN VOID *BufferPtr\r
308 )\r
309;\r
310\r
311EFI_STATUS\r
312EFIAPI\r
313BcUdpRead (\r
314 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
315 IN UINT16 OpFlags,\r
316 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
317 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL\r
318 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
319 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
320 IN UINTN *HeaderSize, OPTIONAL\r
321 IN VOID *HeaderPtr, OPTIONAL\r
322 IN OUT UINTN *BufferSize,\r
323 IN VOID *BufferPtr\r
324 )\r
325;\r
326\r
327EFI_STATUS\r
328EFIAPI\r
329BcTcpWrite (\r
330 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
331 IN UINT16 OpFlags,\r
332 IN UINT16 *UrgentPointer,\r
333 IN UINT32 *SequenceNumber,\r
334 IN UINT32 *AckNumber,\r
335 IN UINT16 *HlenResCode,\r
336 IN UINT16 *Window,\r
337 IN EFI_IP_ADDRESS *DestIp,\r
338 IN EFI_PXE_BASE_CODE_TCP_PORT *DestPort,\r
339 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
340 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
341 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
342 IN UINTN *HeaderSize, OPTIONAL\r
343 IN VOID *HeaderPtr, OPTIONAL\r
344 IN UINTN *BufferSize,\r
345 IN VOID *BufferPtr\r
346 )\r
347;\r
348\r
349EFI_STATUS\r
350EFIAPI\r
351BcTcpRead (\r
352 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
353 IN UINT16 OpFlags,\r
354 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
355 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *DestPort, OPTIONAL\r
356 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
357 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
358 IN UINTN *HeaderSize, OPTIONAL\r
359 IN VOID *HeaderPtr, OPTIONAL\r
360 IN OUT UINTN *BufferSize,\r
361 IN VOID *BufferPtr\r
362 )\r
363;\r
364\r
365EFI_STATUS\r
366EFIAPI\r
367BcArp (\r
368 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
369 IN EFI_IP_ADDRESS * IpAddr,\r
370 IN EFI_MAC_ADDRESS * MacAddr OPTIONAL\r
371 )\r
372;\r
373\r
374EFI_STATUS\r
375EFIAPI\r
376BcIpFilter (\r
377 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
378 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter\r
379 )\r
380;\r
381\r
382EFI_STATUS\r
383EFIAPI\r
384BcSetParameters (\r
385 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
386 IN BOOLEAN *NewAutoArp, OPTIONAL\r
387 IN BOOLEAN *NewSendGUID, OPTIONAL\r
388 IN UINT8 *NewTTL, OPTIONAL\r
389 IN UINT8 *NewToS, OPTIONAL\r
390 IN BOOLEAN *NewMakeCallback OPTIONAL\r
391 )\r
392;\r
393\r
394EFI_STATUS\r
395EFIAPI\r
396BcSetStationIP (\r
397 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
398 IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL\r
399 IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL\r
400 )\r
401;\r
402\r
403EFI_STATUS\r
404EFIAPI\r
405BcSetPackets (\r
406 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
407 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL\r
408 BOOLEAN *NewDhcpAckReceived, OPTIONAL\r
409 BOOLEAN *NewProxyOfferReceived, OPTIONAL\r
410 BOOLEAN *NewPxeDiscoverValid, OPTIONAL\r
411 BOOLEAN *NewPxeReplyReceived, OPTIONAL\r
412 BOOLEAN *NewPxeBisReplyReceived, OPTIONAL\r
413 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL\r
414 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL\r
415 IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL\r
416 IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL\r
417 IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL\r
418 IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL\r
419 )\r
420;\r
421\r
422EFI_STATUS\r
423EFIAPI\r
424LoadFile (\r
425 IN EFI_LOAD_FILE_PROTOCOL *This,\r
426 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
427 IN BOOLEAN BootPolicy,\r
428 IN OUT UINTN *BufferSize,\r
429 IN VOID *Buffer\r
430 )\r
431;\r
432\r
433EFI_STATUS\r
434PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
435 IN EFI_GUID *SystemGuid,\r
436 OUT CHAR8 **SystemSerialNumber\r
437 )\r
438;\r
439\r
440\r
441//\r
442// Define SMBIOS tables.\r
443//\r
444#pragma pack(1)\r
445typedef struct {\r
446 UINT8 AnchorString[4];\r
447 UINT8 EntryPointStructureChecksum;\r
448 UINT8 EntryPointLength;\r
449 UINT8 MajorVersion;\r
450 UINT8 MinorVersion;\r
451 UINT16 MaxStructureSize;\r
452 UINT8 EntryPointRevision;\r
453 UINT8 FormattedArea[5];\r
454 UINT8 IntermediateAnchorString[5];\r
455 UINT8 IntermediateChecksum;\r
456 UINT16 TableLength;\r
457 UINT32 TableAddress;\r
458 UINT16 NumberOfSmbiosStructures;\r
459 UINT8 SmbiosBcdRevision;\r
460} SMBIOS_STRUCTURE_TABLE;\r
461\r
462//\r
463// Please note that SMBIOS structures can be odd byte aligned since the\r
464// unformated section of each record is a set of arbitrary size strings.\r
465//\r
466typedef struct {\r
467 UINT8 Type;\r
468 UINT8 Length;\r
469 UINT8 Handle[2];\r
470} SMBIOS_HEADER;\r
471\r
472typedef UINT8 SMBIOS_STRING;\r
473\r
474typedef struct {\r
475 SMBIOS_HEADER Hdr;\r
476 SMBIOS_STRING Vendor;\r
477 SMBIOS_STRING BiosVersion;\r
478 UINT8 BiosSegment[2];\r
479 SMBIOS_STRING BiosReleaseDate;\r
480 UINT8 BiosSize;\r
481 UINT8 BiosCharacteristics[8];\r
482} SMBIOS_TYPE0;\r
483\r
484typedef struct {\r
485 SMBIOS_HEADER Hdr;\r
486 SMBIOS_STRING Manufacturer;\r
487 SMBIOS_STRING ProductName;\r
488 SMBIOS_STRING Version;\r
489 SMBIOS_STRING SerialNumber;\r
490\r
491 //\r
492 // always byte copy this data to prevent alignment faults!\r
493 //\r
494 EFI_GUID Uuid;\r
495\r
496 UINT8 WakeUpType;\r
497} SMBIOS_TYPE1;\r
498\r
499typedef struct {\r
500 SMBIOS_HEADER Hdr;\r
501 SMBIOS_STRING Manufacturer;\r
502 SMBIOS_STRING ProductName;\r
503 SMBIOS_STRING Version;\r
504 SMBIOS_STRING SerialNumber;\r
505} SMBIOS_TYPE2;\r
506\r
507typedef struct {\r
508 SMBIOS_HEADER Hdr;\r
509 SMBIOS_STRING Manufacturer;\r
510 UINT8 Type;\r
511 SMBIOS_STRING Version;\r
512 SMBIOS_STRING SerialNumber;\r
513 SMBIOS_STRING AssetTag;\r
514 UINT8 BootupState;\r
515 UINT8 PowerSupplyState;\r
516 UINT8 ThermalState;\r
517 UINT8 SecurityStatus;\r
518 UINT8 OemDefined[4];\r
519} SMBIOS_TYPE3;\r
520\r
521typedef struct {\r
522 SMBIOS_HEADER Hdr;\r
523 UINT8 Socket;\r
524 UINT8 ProcessorType;\r
525 UINT8 ProcessorFamily;\r
526 SMBIOS_STRING ProcessorManufacture;\r
527 UINT8 ProcessorId[8];\r
528 SMBIOS_STRING ProcessorVersion;\r
529 UINT8 Voltage;\r
530 UINT8 ExternalClock[2];\r
531 UINT8 MaxSpeed[2];\r
532 UINT8 CurrentSpeed[2];\r
533 UINT8 Status;\r
534 UINT8 ProcessorUpgrade;\r
535 UINT8 L1CacheHandle[2];\r
536 UINT8 L2CacheHandle[2];\r
537 UINT8 L3CacheHandle[2];\r
538} SMBIOS_TYPE4;\r
539\r
540typedef union {\r
541 SMBIOS_HEADER *Hdr;\r
542 SMBIOS_TYPE0 *Type0;\r
543 SMBIOS_TYPE1 *Type1;\r
544 SMBIOS_TYPE2 *Type2;\r
545 SMBIOS_TYPE3 *Type3;\r
546 SMBIOS_TYPE4 *Type4;\r
547 UINT8 *Raw;\r
548} SMBIOS_STRUCTURE_POINTER;\r
549#pragma pack()\r
550\r
551#include "ip.h"\r
552#include "dhcp.h"\r
553#include "tftp.h"\r
554\r
555#endif /* _BC_H */\r
556\r
557/* EOF - bc.h */\r