]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
clean up the un-suitable ';' location when declaring the functions.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeBcDxe / Bc.h
... / ...
CommitLineData
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
23#include <PiDxe.h>\r
24\r
25#include <Guid/SmBios.h>\r
26#include <IndustryStandard/SmBios.h>\r
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
33#include <Protocol/DevicePath.h>\r
34#include <Protocol/Tcp.h>\r
35#include <Protocol/LoadedImage.h>\r
36\r
37#include <Library/DebugLib.h>\r
38#include <Library/BaseMemoryLib.h>\r
39#include <Library/MemoryAllocationLib.h>\r
40#include <Library/UefiDriverEntryPoint.h>\r
41#include <Library/UefiBootServicesTableLib.h>\r
42#include <Library/BaseLib.h>\r
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
56#define PXE_BASECODE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'd')\r
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
171#define LOADFILE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'l')\r
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
191 );\r
192\r
193VOID\r
194PxebcBisStop (\r
195 EFI_BIS_PROTOCOL *Bis,\r
196 BIS_APPLICATION_HANDLE BisAppHandle,\r
197 EFI_BIS_DATA *BisDataSigInfo\r
198 );\r
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
207 );\r
208\r
209BOOLEAN\r
210PxebcBisDetect (\r
211 PXE_BASECODE_DEVICE *Private\r
212 );\r
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
239 );\r
240\r
241EFI_STATUS\r
242EFIAPI\r
243BcStart (\r
244 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
245 IN BOOLEAN UseIpv6\r
246 );\r
247\r
248EFI_STATUS\r
249EFIAPI\r
250BcStop (\r
251 IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
252 );\r
253\r
254EFI_STATUS\r
255EFIAPI\r
256BcDhcp (\r
257 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
258 IN BOOLEAN SortOffers\r
259 );\r
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
269 );\r
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
284 );\r
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
300 );\r
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
315 );\r
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
336 );\r
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
351 );\r
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
359 );\r
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
366 );\r
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
377 );\r
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
385 );\r
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
403 );\r
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
413 );\r
414\r
415EFI_STATUS\r
416PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
417 IN EFI_GUID *SystemGuid,\r
418 OUT CHAR8 **SystemSerialNumber\r
419 );\r
420\r
421#include "Ip.h"\r
422#include "Dhcp.h"\r
423#include "Tftp.h"\r
424\r
425#endif /* _BC_H */\r
426\r
427/* EOF - bc.h */\r