]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Network/PxeBc/Dxe/Bc.h
Clean up the following module msa files, they are three networt and two PCD modules.
[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
878ddf1f 414//\r
415// Define SMBIOS tables.\r
416//\r
417#pragma pack(1)\r
418typedef struct {\r
419 UINT8 AnchorString[4];\r
420 UINT8 EntryPointStructureChecksum;\r
421 UINT8 EntryPointLength;\r
422 UINT8 MajorVersion;\r
423 UINT8 MinorVersion;\r
424 UINT16 MaxStructureSize;\r
425 UINT8 EntryPointRevision;\r
426 UINT8 FormattedArea[5];\r
427 UINT8 IntermediateAnchorString[5];\r
428 UINT8 IntermediateChecksum;\r
429 UINT16 TableLength;\r
430 UINT32 TableAddress;\r
431 UINT16 NumberOfSmbiosStructures;\r
432 UINT8 SmbiosBcdRevision;\r
433} SMBIOS_STRUCTURE_TABLE;\r
434\r
435//\r
436// Please note that SMBIOS structures can be odd byte aligned since the\r
437// unformated section of each record is a set of arbitrary size strings.\r
438//\r
439typedef struct {\r
440 UINT8 Type;\r
441 UINT8 Length;\r
442 UINT8 Handle[2];\r
443} SMBIOS_HEADER;\r
444\r
445typedef UINT8 SMBIOS_STRING;\r
446\r
447typedef struct {\r
448 SMBIOS_HEADER Hdr;\r
449 SMBIOS_STRING Vendor;\r
450 SMBIOS_STRING BiosVersion;\r
451 UINT8 BiosSegment[2];\r
452 SMBIOS_STRING BiosReleaseDate;\r
453 UINT8 BiosSize;\r
454 UINT8 BiosCharacteristics[8];\r
455} SMBIOS_TYPE0;\r
456\r
457typedef struct {\r
458 SMBIOS_HEADER Hdr;\r
459 SMBIOS_STRING Manufacturer;\r
460 SMBIOS_STRING ProductName;\r
461 SMBIOS_STRING Version;\r
462 SMBIOS_STRING SerialNumber;\r
463\r
464 //\r
465 // always byte copy this data to prevent alignment faults!\r
466 //\r
467 EFI_GUID Uuid;\r
468\r
469 UINT8 WakeUpType;\r
470} SMBIOS_TYPE1;\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} SMBIOS_TYPE2;\r
479\r
480typedef struct {\r
481 SMBIOS_HEADER Hdr;\r
482 SMBIOS_STRING Manufacturer;\r
483 UINT8 Type;\r
484 SMBIOS_STRING Version;\r
485 SMBIOS_STRING SerialNumber;\r
486 SMBIOS_STRING AssetTag;\r
487 UINT8 BootupState;\r
488 UINT8 PowerSupplyState;\r
489 UINT8 ThermalState;\r
490 UINT8 SecurityStatus;\r
491 UINT8 OemDefined[4];\r
492} SMBIOS_TYPE3;\r
493\r
494typedef struct {\r
495 SMBIOS_HEADER Hdr;\r
496 UINT8 Socket;\r
497 UINT8 ProcessorType;\r
498 UINT8 ProcessorFamily;\r
499 SMBIOS_STRING ProcessorManufacture;\r
500 UINT8 ProcessorId[8];\r
501 SMBIOS_STRING ProcessorVersion;\r
502 UINT8 Voltage;\r
503 UINT8 ExternalClock[2];\r
504 UINT8 MaxSpeed[2];\r
505 UINT8 CurrentSpeed[2];\r
506 UINT8 Status;\r
507 UINT8 ProcessorUpgrade;\r
508 UINT8 L1CacheHandle[2];\r
509 UINT8 L2CacheHandle[2];\r
510 UINT8 L3CacheHandle[2];\r
511} SMBIOS_TYPE4;\r
512\r
513typedef union {\r
514 SMBIOS_HEADER *Hdr;\r
515 SMBIOS_TYPE0 *Type0;\r
516 SMBIOS_TYPE1 *Type1;\r
517 SMBIOS_TYPE2 *Type2;\r
518 SMBIOS_TYPE3 *Type3;\r
519 SMBIOS_TYPE4 *Type4;\r
520 UINT8 *Raw;\r
521} SMBIOS_STRUCTURE_POINTER;\r
522#pragma pack()\r
523\r
524#include "ip.h"\r
525#include "dhcp.h"\r
526#include "tftp.h"\r
527\r
1cc8ee78 528VOID\r
529InitArpHeader (\r
530 VOID\r
531 )\r
532/*++\r
533Routine description:\r
534 Initialize ARP packet header.\r
535\r
536Parameters:\r
537 none\r
538\r
539Returns:\r
540 none\r
541\r
542--*/\r
543;\r
544\r
878ddf1f 545#endif /* _BC_H */\r
546\r
547/* EOF - bc.h */\r