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