]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Network/PxeBc/Dxe/bc.h
Make variable names for protocol GUIDs consistent
[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
166EFI_BIS_PROTOCOL *\r
167PxebcBisStart (\r
168 PXE_BASECODE_DEVICE *Private,\r
169 BIS_APPLICATION_HANDLE *BisAppHandle,\r
170 EFI_BIS_DATA **BisDataSigInfo\r
171 )\r
172;\r
173\r
174VOID\r
175PxebcBisStop (\r
176 EFI_BIS_PROTOCOL *Bis,\r
177 BIS_APPLICATION_HANDLE BisAppHandle,\r
178 EFI_BIS_DATA *BisDataSigInfo\r
179 )\r
180;\r
181\r
182BOOLEAN\r
183PxebcBisVerify (\r
184 PXE_BASECODE_DEVICE *Private,\r
185 VOID *FileBuffer,\r
186 UINTN FileBufferLength,\r
187 VOID *CredentialBuffer,\r
188 UINTN CredentialBufferLength\r
189 )\r
190;\r
191\r
192BOOLEAN\r
193PxebcBisDetect (\r
194 PXE_BASECODE_DEVICE *Private\r
195 )\r
196;\r
197\r
198//\r
199// Global Variables\r
200//\r
201extern EFI_DRIVER_BINDING_PROTOCOL gPxeBcDriverBinding;\r
202extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
203\r
204//\r
205// //////////////////////////////////////////////////////////\r
206//\r
207// prototypes\r
208//\r
209EFI_STATUS\r
210EFIAPI\r
211InitializeBCDriver (\r
212 IN EFI_HANDLE ImageHandle,\r
213 IN EFI_SYSTEM_TABLE *SystemTable\r
214 )\r
215;\r
216\r
217EFI_STATUS\r
218EFIAPI\r
219BcStart (\r
220 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
221 IN BOOLEAN UseIpv6\r
222 )\r
223;\r
224\r
225EFI_STATUS\r
226EFIAPI\r
227BcStop (\r
228 IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
229 )\r
230;\r
231\r
232EFI_STATUS\r
233EFIAPI\r
234BcDhcp (\r
235 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
236 IN BOOLEAN SortOffers\r
237 )\r
238;\r
239\r
240EFI_STATUS\r
241EFIAPI\r
242BcDiscover (\r
243 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
244 IN UINT16 Type,\r
245 IN UINT16 *Layer,\r
246 IN BOOLEAN UseBis,\r
247 IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL\r
248 )\r
249;\r
250\r
251EFI_STATUS\r
252EFIAPI\r
253BcMtftp (\r
254 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
255 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,\r
256 IN OUT VOID *BufferPtr,\r
257 IN BOOLEAN Overwrite,\r
258 IN OUT UINT64 *BufferSize,\r
259 IN UINTN *BlockSize OPTIONAL,\r
260 IN EFI_IP_ADDRESS * ServerIp,\r
261 IN UINT8 *Filename,\r
262 IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,\r
263 IN BOOLEAN DontUseBuffer\r
264 )\r
265;\r
266\r
267EFI_STATUS\r
268EFIAPI\r
269BcUdpWrite (\r
270 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
271 IN UINT16 OpFlags,\r
272 IN EFI_IP_ADDRESS *DestIp,\r
273 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,\r
274 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
275 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
276 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
277 IN UINTN *HeaderSize, OPTIONAL\r
278 IN VOID *HeaderPtr, OPTIONAL\r
279 IN UINTN *BufferSize,\r
280 IN VOID *BufferPtr\r
281 )\r
282;\r
283\r
284EFI_STATUS\r
285EFIAPI\r
286BcUdpRead (\r
287 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
288 IN UINT16 OpFlags,\r
289 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
290 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL\r
291 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
292 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
293 IN UINTN *HeaderSize, OPTIONAL\r
294 IN VOID *HeaderPtr, OPTIONAL\r
295 IN OUT UINTN *BufferSize,\r
296 IN VOID *BufferPtr\r
297 )\r
298;\r
299\r
300EFI_STATUS\r
301EFIAPI\r
302BcArp (\r
303 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
304 IN EFI_IP_ADDRESS * IpAddr,\r
305 IN EFI_MAC_ADDRESS * MacAddr OPTIONAL\r
306 )\r
307;\r
308\r
309EFI_STATUS\r
310EFIAPI\r
311BcIpFilter (\r
312 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
313 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter\r
314 )\r
315;\r
316\r
317EFI_STATUS\r
318EFIAPI\r
319BcSetParameters (\r
320 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
321 IN BOOLEAN *NewAutoArp, OPTIONAL\r
322 IN BOOLEAN *NewSendGUID, OPTIONAL\r
323 IN UINT8 *NewTTL, OPTIONAL\r
324 IN UINT8 *NewToS, OPTIONAL\r
325 IN BOOLEAN *NewMakeCallback OPTIONAL\r
326 )\r
327;\r
328\r
329EFI_STATUS\r
330EFIAPI\r
331BcSetStationIP (\r
332 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
333 IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL\r
334 IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL\r
335 )\r
336;\r
337\r
338EFI_STATUS\r
339EFIAPI\r
340BcSetPackets (\r
341 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
342 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL\r
343 BOOLEAN *NewDhcpAckReceived, OPTIONAL\r
344 BOOLEAN *NewProxyOfferReceived, OPTIONAL\r
345 BOOLEAN *NewPxeDiscoverValid, OPTIONAL\r
346 BOOLEAN *NewPxeReplyReceived, OPTIONAL\r
347 BOOLEAN *NewPxeBisReplyReceived, OPTIONAL\r
348 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL\r
349 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL\r
350 IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL\r
351 IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL\r
352 IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL\r
353 IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL\r
354 )\r
355;\r
356\r
357EFI_STATUS\r
358EFIAPI\r
359LoadFile (\r
360 IN EFI_LOAD_FILE_PROTOCOL *This,\r
361 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
362 IN BOOLEAN BootPolicy,\r
363 IN OUT UINTN *BufferSize,\r
364 IN VOID *Buffer\r
365 )\r
366;\r
367\r
368EFI_STATUS\r
369PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
370 IN EFI_GUID *SystemGuid,\r
371 OUT CHAR8 **SystemSerialNumber\r
372 )\r
373;\r
374\r
375UINTN\r
376EFIAPI\r
377AsciiPrint (\r
378 IN CONST CHAR8 *Format,\r
379 ...\r
380 )\r
381;\r
382\r
383//\r
384// Define SMBIOS tables.\r
385//\r
386#pragma pack(1)\r
387typedef struct {\r
388 UINT8 AnchorString[4];\r
389 UINT8 EntryPointStructureChecksum;\r
390 UINT8 EntryPointLength;\r
391 UINT8 MajorVersion;\r
392 UINT8 MinorVersion;\r
393 UINT16 MaxStructureSize;\r
394 UINT8 EntryPointRevision;\r
395 UINT8 FormattedArea[5];\r
396 UINT8 IntermediateAnchorString[5];\r
397 UINT8 IntermediateChecksum;\r
398 UINT16 TableLength;\r
399 UINT32 TableAddress;\r
400 UINT16 NumberOfSmbiosStructures;\r
401 UINT8 SmbiosBcdRevision;\r
402} SMBIOS_STRUCTURE_TABLE;\r
403\r
404//\r
405// Please note that SMBIOS structures can be odd byte aligned since the\r
406// unformated section of each record is a set of arbitrary size strings.\r
407//\r
408typedef struct {\r
409 UINT8 Type;\r
410 UINT8 Length;\r
411 UINT8 Handle[2];\r
412} SMBIOS_HEADER;\r
413\r
414typedef UINT8 SMBIOS_STRING;\r
415\r
416typedef struct {\r
417 SMBIOS_HEADER Hdr;\r
418 SMBIOS_STRING Vendor;\r
419 SMBIOS_STRING BiosVersion;\r
420 UINT8 BiosSegment[2];\r
421 SMBIOS_STRING BiosReleaseDate;\r
422 UINT8 BiosSize;\r
423 UINT8 BiosCharacteristics[8];\r
424} SMBIOS_TYPE0;\r
425\r
426typedef struct {\r
427 SMBIOS_HEADER Hdr;\r
428 SMBIOS_STRING Manufacturer;\r
429 SMBIOS_STRING ProductName;\r
430 SMBIOS_STRING Version;\r
431 SMBIOS_STRING SerialNumber;\r
432\r
433 //\r
434 // always byte copy this data to prevent alignment faults!\r
435 //\r
436 EFI_GUID Uuid;\r
437\r
438 UINT8 WakeUpType;\r
439} SMBIOS_TYPE1;\r
440\r
441typedef struct {\r
442 SMBIOS_HEADER Hdr;\r
443 SMBIOS_STRING Manufacturer;\r
444 SMBIOS_STRING ProductName;\r
445 SMBIOS_STRING Version;\r
446 SMBIOS_STRING SerialNumber;\r
447} SMBIOS_TYPE2;\r
448\r
449typedef struct {\r
450 SMBIOS_HEADER Hdr;\r
451 SMBIOS_STRING Manufacturer;\r
452 UINT8 Type;\r
453 SMBIOS_STRING Version;\r
454 SMBIOS_STRING SerialNumber;\r
455 SMBIOS_STRING AssetTag;\r
456 UINT8 BootupState;\r
457 UINT8 PowerSupplyState;\r
458 UINT8 ThermalState;\r
459 UINT8 SecurityStatus;\r
460 UINT8 OemDefined[4];\r
461} SMBIOS_TYPE3;\r
462\r
463typedef struct {\r
464 SMBIOS_HEADER Hdr;\r
465 UINT8 Socket;\r
466 UINT8 ProcessorType;\r
467 UINT8 ProcessorFamily;\r
468 SMBIOS_STRING ProcessorManufacture;\r
469 UINT8 ProcessorId[8];\r
470 SMBIOS_STRING ProcessorVersion;\r
471 UINT8 Voltage;\r
472 UINT8 ExternalClock[2];\r
473 UINT8 MaxSpeed[2];\r
474 UINT8 CurrentSpeed[2];\r
475 UINT8 Status;\r
476 UINT8 ProcessorUpgrade;\r
477 UINT8 L1CacheHandle[2];\r
478 UINT8 L2CacheHandle[2];\r
479 UINT8 L3CacheHandle[2];\r
480} SMBIOS_TYPE4;\r
481\r
482typedef union {\r
483 SMBIOS_HEADER *Hdr;\r
484 SMBIOS_TYPE0 *Type0;\r
485 SMBIOS_TYPE1 *Type1;\r
486 SMBIOS_TYPE2 *Type2;\r
487 SMBIOS_TYPE3 *Type3;\r
488 SMBIOS_TYPE4 *Type4;\r
489 UINT8 *Raw;\r
490} SMBIOS_STRUCTURE_POINTER;\r
491#pragma pack()\r
492\r
493#include "ip.h"\r
494#include "dhcp.h"\r
495#include "tftp.h"\r
496\r
497#endif /* _BC_H */\r
498\r
499/* EOF - bc.h */\r