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