]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
Clean up to update the reference of the these macros:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeBcDxe / Bc.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2004 - 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
11\r
12Module Name:\r
13 bc.h\r
14\r
15Abstract:\r
16\r
17\r
18**/\r
19\r
20#ifndef _BC_H\r
21#define _BC_H\r
22\r
772db4bb 23#include <PiDxe.h>\r
24\r
25#include <Guid/SmBios.h>\r
f71bb8f1 26#include <IndustryStandard/SmBios.h>\r
772db4bb 27#include <Protocol/Bis.h>\r
28#include <Protocol/PxeBaseCode.h>\r
29#include <Protocol/PxeBaseCodeCallBack.h>\r
30#include <Protocol/NetworkInterfaceIdentifier.h>\r
31#include <Protocol/SimpleNetwork.h>\r
32#include <Protocol/LoadFile.h>\r
83cbd279 33#include <Protocol/DevicePath.h>\r
772db4bb 34#include <Protocol/Tcp.h>\r
8d285ec0 35#include <Protocol/LoadedImage.h>\r
772db4bb 36\r
37#include <Library/DebugLib.h>\r
83cbd279 38#include <Library/BaseMemoryLib.h>\r
772db4bb 39#include <Library/MemoryAllocationLib.h>\r
40#include <Library/UefiDriverEntryPoint.h>\r
41#include <Library/UefiBootServicesTableLib.h>\r
42#include <Library/BaseLib.h>\r
83cbd279 43#include <Library/UefiLib.h>\r
44\r
45#define CALLBACK_INTERVAL 100 // ten times a second\r
46#define FILTER_BITS (EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP | \\r
47 EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST | \\r
48 EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS | \\r
49 EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST \\r
50 )\r
51\r
52#define WAIT_TX_TIMEOUT 1000\r
53\r
54#define SUPPORT_IPV6 0\r
55\r
f3f2e05d 56#define PXE_BASECODE_DEVICE_SIGNATURE SIGNATURE_32 ('p', 'x', 'e', 'd')\r
83cbd279 57\r
58//\r
59// Determine the classes of IPv4 address\r
60//\r
61#define IS_CLASSA_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0x80) == 0x00)\r
62#define IS_CLASSB_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xc0) == 0x80)\r
63#define IS_CLASSC_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xe0) == 0xc0)\r
64#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
65\r
66//\r
67// Definitions for internet group management protocol version 2 message\r
68// structure\r
69// Per RFC 2236, November 1997\r
70//\r
71#pragma pack(1)\r
72\r
73typedef struct {\r
74 UINT8 Type;\r
75 UINT8 MaxRespTime; // in tenths of a second\r
76 UINT16 Checksum; // ones complement of ones complement sum of\r
77 // 16 bit words of message\r
78 UINT32 GroupAddress; // for general query, all systems group,\r
79 // for group specific, the group\r
80} IGMPV2_MESSAGE;\r
81\r
82#define IGMP_TYPE_QUERY 0x11\r
83#define IGMP_TYPE_REPORT 0x16\r
84#define IGMP_TYPE_V1REPORT 0x12\r
85#define IGMP_TYPE_LEAVE_GROUP 0x17\r
86\r
87#define IGMP_DEFAULT_MAX_RESPONSE_TIME 10 // 10 second default\r
88#pragma pack()\r
89\r
90#define MAX_MCAST_GROUPS 8 // most we allow ourselves to join at once\r
91#define MAX_OFFERS 16\r
92\r
93typedef struct {\r
94 UINTN Signature;\r
95 EFI_LOCK Lock;\r
96 BOOLEAN ShowErrorMessages;\r
97 EFI_TCP_PROTOCOL Tcp;\r
98 EFI_PXE_BASE_CODE_PROTOCOL EfiBc;\r
99 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *CallbackProtocolPtr;\r
100 EFI_HANDLE Handle;\r
101\r
102 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiPtr;\r
103 EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetwork;\r
104 UINT8 *TransmitBufferPtr;\r
105 UINT8 *ReceiveBufferPtr;\r
106 EFI_PXE_BASE_CODE_FUNCTION Function;\r
107\r
108 UINTN OldestArpEntry;\r
109 UINTN MCastGroupCount;\r
110 EFI_EVENT Igmpv1TimeoutEvent;\r
111 BOOLEAN UseIgmpv1Reporting;\r
112 EFI_EVENT IgmpGroupEvent[MAX_MCAST_GROUPS];\r
113 UINT16 RandomPort;\r
114\r
115#if SUPPORT_IPV6\r
116 //\r
117 // TBD\r
118 //\r
119#else\r
120 UINT32 MCastGroup[MAX_MCAST_GROUPS];\r
121#endif\r
122\r
123 BOOLEAN GoodStationIp;\r
124 BOOLEAN DidTransmit;\r
125 UINTN IpLength;\r
126 VOID *DhcpPacketBuffer;\r
127 UINTN FileSize;\r
128 VOID *BootServerReceiveBuffer;\r
129 EFI_IP_ADDRESS ServerIp;\r
130\r
131 //\r
132 // work area\r
133 // for dhcp\r
134 //\r
135 VOID *ReceiveBuffers;\r
136 VOID *TransmitBuffer;\r
137 UINTN NumOffersReceived;\r
138 UINT16 TotalSeconds;\r
139\r
140 //\r
141 // arrays for different types of offers\r
142 //\r
143 UINT8 ServerCount[4];\r
144 UINT8 OfferCount[4][MAX_OFFERS];\r
145 UINT8 GotBootp;\r
146 UINT8 GotProxy[4];\r
147 UINT8 BinlProxies[MAX_OFFERS];\r
148\r
149 UINT8 *ArpBuffer;\r
150 UINT8 *TftpAckBuffer;\r
151 UINT8 *TftpErrorBuffer;\r
152 IGMPV2_MESSAGE IgmpMessage;\r
153 BOOLEAN BigBlkNumFlag;\r
154 UINT8 Timeout;\r
155 UINT16 RandomSeed;\r
156} PXE_BASECODE_DEVICE;\r
157\r
158//\r
159// type index\r
160//\r
161#define DHCP_ONLY_IX 0\r
162#define PXE10_IX 1\r
163#define WfM11a_IX 2\r
164#define BINL_IX 3\r
165\r
166#define PXE_RND_PORT_LOW 2070\r
167\r
168//\r
169//\r
170//\r
f3f2e05d 171#define LOADFILE_DEVICE_SIGNATURE SIGNATURE_32 ('p', 'x', 'e', 'l')\r
83cbd279 172\r
173typedef struct {\r
174 UINTN Signature;\r
175 EFI_LOCK Lock;\r
176 EFI_LOAD_FILE_PROTOCOL LoadFile;\r
177 PXE_BASECODE_DEVICE *Private;\r
178} LOADFILE_DEVICE;\r
179\r
180#define EFI_BASE_CODE_DEV_FROM_THIS(a) CR (a, PXE_BASECODE_DEVICE, efi_bc, PXE_BASECODE_DEVICE_SIGNATURE);\r
181\r
182#define EFI_BASE_CODE_DEV_FROM_TCP(a) CR (a, PXE_BASECODE_DEVICE, Tcp, PXE_BASECODE_DEVICE_SIGNATURE);\r
183\r
184#define EFI_LOAD_FILE_DEV_FROM_THIS(a) CR (a, LOADFILE_DEVICE, LoadFile, LOADFILE_DEVICE_SIGNATURE)\r
185\r
186EFI_BIS_PROTOCOL *\r
187PxebcBisStart (\r
188 PXE_BASECODE_DEVICE *Private,\r
189 BIS_APPLICATION_HANDLE *BisAppHandle,\r
190 EFI_BIS_DATA **BisDataSigInfo\r
ed66e1bc 191 );\r
83cbd279 192\r
193VOID\r
194PxebcBisStop (\r
195 EFI_BIS_PROTOCOL *Bis,\r
196 BIS_APPLICATION_HANDLE BisAppHandle,\r
197 EFI_BIS_DATA *BisDataSigInfo\r
ed66e1bc 198 );\r
83cbd279 199\r
200BOOLEAN\r
201PxebcBisVerify (\r
202 PXE_BASECODE_DEVICE *Private,\r
203 VOID *FileBuffer,\r
204 UINTN FileBufferLength,\r
205 VOID *CredentialBuffer,\r
206 UINTN CredentialBufferLength\r
ed66e1bc 207 );\r
83cbd279 208\r
209BOOLEAN\r
210PxebcBisDetect (\r
211 PXE_BASECODE_DEVICE *Private\r
ed66e1bc 212 );\r
83cbd279 213\r
214//\r
215// Global Variables\r
216//\r
217extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
218extern EFI_COMPONENT_NAME2_PROTOCOL gPxeBcComponentName2;\r
219\r
220//\r
221// //////////////////////////////////////////////////////////\r
222//\r
223// prototypes\r
224//\r
225\r
226/**\r
227 Initialize the base code drivers and install the driver binding\r
228\r
229 Standard EFI Image Entry\r
230\r
231 @retval EFI_SUCCESS This driver was successfully bound\r
232\r
233**/\r
234EFI_STATUS\r
235EFIAPI\r
236InitializeBCDriver (\r
237 IN EFI_HANDLE ImageHandle,\r
238 IN EFI_SYSTEM_TABLE *SystemTable\r
ed66e1bc 239 );\r
83cbd279 240\r
241EFI_STATUS\r
242EFIAPI\r
243BcStart (\r
244 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
245 IN BOOLEAN UseIpv6\r
ed66e1bc 246 );\r
83cbd279 247\r
248EFI_STATUS\r
249EFIAPI\r
250BcStop (\r
251 IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
ed66e1bc 252 );\r
83cbd279 253\r
254EFI_STATUS\r
255EFIAPI\r
256BcDhcp (\r
257 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
258 IN BOOLEAN SortOffers\r
ed66e1bc 259 );\r
83cbd279 260\r
261EFI_STATUS\r
262EFIAPI\r
263BcDiscover (\r
264 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
265 IN UINT16 Type,\r
266 IN UINT16 *Layer,\r
267 IN BOOLEAN UseBis,\r
268 IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL\r
ed66e1bc 269 );\r
83cbd279 270\r
271EFI_STATUS\r
272EFIAPI\r
273BcMtftp (\r
274 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
275 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,\r
276 IN OUT VOID *BufferPtr,\r
277 IN BOOLEAN Overwrite,\r
278 IN OUT UINT64 *BufferSize,\r
279 IN UINTN *BlockSize OPTIONAL,\r
280 IN EFI_IP_ADDRESS * ServerIp,\r
281 IN UINT8 *Filename,\r
282 IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,\r
283 IN BOOLEAN DontUseBuffer\r
ed66e1bc 284 );\r
83cbd279 285\r
286EFI_STATUS\r
287EFIAPI\r
288BcUdpWrite (\r
289 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
290 IN UINT16 OpFlags,\r
291 IN EFI_IP_ADDRESS *DestIp,\r
292 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,\r
293 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
294 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
295 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
296 IN UINTN *HeaderSize, OPTIONAL\r
297 IN VOID *HeaderPtr, OPTIONAL\r
298 IN UINTN *BufferSize,\r
299 IN VOID *BufferPtr\r
ed66e1bc 300 );\r
83cbd279 301\r
302EFI_STATUS\r
303EFIAPI\r
304BcUdpRead (\r
305 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
306 IN UINT16 OpFlags,\r
307 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
308 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL\r
309 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
310 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
311 IN UINTN *HeaderSize, OPTIONAL\r
312 IN VOID *HeaderPtr, OPTIONAL\r
313 IN OUT UINTN *BufferSize,\r
314 IN VOID *BufferPtr\r
ed66e1bc 315 );\r
83cbd279 316\r
317EFI_STATUS\r
318EFIAPI\r
319BcTcpWrite (\r
320 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
321 IN UINT16 OpFlags,\r
322 IN UINT16 *UrgentPointer,\r
323 IN UINT32 *SequenceNumber,\r
324 IN UINT32 *AckNumber,\r
325 IN UINT16 *HlenResCode,\r
326 IN UINT16 *Window,\r
327 IN EFI_IP_ADDRESS *DestIp,\r
328 IN EFI_PXE_BASE_CODE_TCP_PORT *DestPort,\r
329 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
330 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
331 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
332 IN UINTN *HeaderSize, OPTIONAL\r
333 IN VOID *HeaderPtr, OPTIONAL\r
334 IN UINTN *BufferSize,\r
335 IN VOID *BufferPtr\r
ed66e1bc 336 );\r
83cbd279 337\r
338EFI_STATUS\r
339EFIAPI\r
340BcTcpRead (\r
341 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
342 IN UINT16 OpFlags,\r
343 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
344 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *DestPort, OPTIONAL\r
345 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
346 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
347 IN UINTN *HeaderSize, OPTIONAL\r
348 IN VOID *HeaderPtr, OPTIONAL\r
349 IN OUT UINTN *BufferSize,\r
350 IN VOID *BufferPtr\r
ed66e1bc 351 );\r
83cbd279 352\r
353EFI_STATUS\r
354EFIAPI\r
355BcArp (\r
356 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
357 IN EFI_IP_ADDRESS * IpAddr,\r
358 IN EFI_MAC_ADDRESS * MacAddr OPTIONAL\r
ed66e1bc 359 );\r
83cbd279 360\r
361EFI_STATUS\r
362EFIAPI\r
363BcIpFilter (\r
364 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
365 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter\r
ed66e1bc 366 );\r
83cbd279 367\r
368EFI_STATUS\r
369EFIAPI\r
370BcSetParameters (\r
371 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
372 IN BOOLEAN *NewAutoArp, OPTIONAL\r
373 IN BOOLEAN *NewSendGUID, OPTIONAL\r
374 IN UINT8 *NewTTL, OPTIONAL\r
375 IN UINT8 *NewToS, OPTIONAL\r
376 IN BOOLEAN *NewMakeCallback OPTIONAL\r
ed66e1bc 377 );\r
83cbd279 378\r
379EFI_STATUS\r
380EFIAPI\r
381BcSetStationIP (\r
382 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
383 IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL\r
384 IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL\r
ed66e1bc 385 );\r
83cbd279 386\r
387EFI_STATUS\r
388EFIAPI\r
389BcSetPackets (\r
390 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
391 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL\r
392 BOOLEAN *NewDhcpAckReceived, OPTIONAL\r
393 BOOLEAN *NewProxyOfferReceived, OPTIONAL\r
394 BOOLEAN *NewPxeDiscoverValid, OPTIONAL\r
395 BOOLEAN *NewPxeReplyReceived, OPTIONAL\r
396 BOOLEAN *NewPxeBisReplyReceived, OPTIONAL\r
397 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL\r
398 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL\r
399 IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL\r
400 IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL\r
401 IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL\r
402 IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL\r
ed66e1bc 403 );\r
83cbd279 404\r
405EFI_STATUS\r
406EFIAPI\r
407LoadFile (\r
408 IN EFI_LOAD_FILE_PROTOCOL *This,\r
409 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
410 IN BOOLEAN BootPolicy,\r
411 IN OUT UINTN *BufferSize,\r
412 IN VOID *Buffer\r
ed66e1bc 413 );\r
83cbd279 414\r
415EFI_STATUS\r
416PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
417 IN EFI_GUID *SystemGuid,\r
418 OUT CHAR8 **SystemSerialNumber\r
ed66e1bc 419 );\r
83cbd279 420\r
f71bb8f1 421#include "Ip.h"\r
422#include "Dhcp.h"\r
423#include "Tftp.h"\r
83cbd279 424\r
425#endif /* _BC_H */\r
426\r
427/* EOF - bc.h */\r