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