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