]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
edk2/MdeModulePkg/Universal/Network/PxeBcDxe/Pxe_bc_mtftp.c:
[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
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
193\r
194VOID\r
195PxebcBisStop (\r
196 EFI_BIS_PROTOCOL *Bis,\r
197 BIS_APPLICATION_HANDLE BisAppHandle,\r
198 EFI_BIS_DATA *BisDataSigInfo\r
199 )\r
200;\r
201\r
202BOOLEAN\r
203PxebcBisVerify (\r
204 PXE_BASECODE_DEVICE *Private,\r
205 VOID *FileBuffer,\r
206 UINTN FileBufferLength,\r
207 VOID *CredentialBuffer,\r
208 UINTN CredentialBufferLength\r
209 )\r
210;\r
211\r
212BOOLEAN\r
213PxebcBisDetect (\r
214 PXE_BASECODE_DEVICE *Private\r
215 )\r
216;\r
217\r
218//\r
219// Global Variables\r
220//\r
221extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
222extern EFI_COMPONENT_NAME2_PROTOCOL gPxeBcComponentName2;\r
223\r
224//\r
225// //////////////////////////////////////////////////////////\r
226//\r
227// prototypes\r
228//\r
229\r
230/**\r
231 Initialize the base code drivers and install the driver binding\r
232\r
233 Standard EFI Image Entry\r
234\r
235 @retval EFI_SUCCESS This driver was successfully bound\r
236\r
237**/\r
238EFI_STATUS\r
239EFIAPI\r
240InitializeBCDriver (\r
241 IN EFI_HANDLE ImageHandle,\r
242 IN EFI_SYSTEM_TABLE *SystemTable\r
243 )\r
244;\r
245\r
246EFI_STATUS\r
247EFIAPI\r
248BcStart (\r
249 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
250 IN BOOLEAN UseIpv6\r
251 )\r
252;\r
253\r
254EFI_STATUS\r
255EFIAPI\r
256BcStop (\r
257 IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
258 )\r
259;\r
260\r
261EFI_STATUS\r
262EFIAPI\r
263BcDhcp (\r
264 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
265 IN BOOLEAN SortOffers\r
266 )\r
267;\r
268\r
269EFI_STATUS\r
270EFIAPI\r
271BcDiscover (\r
272 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
273 IN UINT16 Type,\r
274 IN UINT16 *Layer,\r
275 IN BOOLEAN UseBis,\r
276 IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL\r
277 )\r
278;\r
279\r
280EFI_STATUS\r
281EFIAPI\r
282BcMtftp (\r
283 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
284 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,\r
285 IN OUT VOID *BufferPtr,\r
286 IN BOOLEAN Overwrite,\r
287 IN OUT UINT64 *BufferSize,\r
288 IN UINTN *BlockSize OPTIONAL,\r
289 IN EFI_IP_ADDRESS * ServerIp,\r
290 IN UINT8 *Filename,\r
291 IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,\r
292 IN BOOLEAN DontUseBuffer\r
293 )\r
294;\r
295\r
296EFI_STATUS\r
297EFIAPI\r
298BcUdpWrite (\r
299 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
300 IN UINT16 OpFlags,\r
301 IN EFI_IP_ADDRESS *DestIp,\r
302 IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,\r
303 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
304 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
305 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
306 IN UINTN *HeaderSize, OPTIONAL\r
307 IN VOID *HeaderPtr, OPTIONAL\r
308 IN UINTN *BufferSize,\r
309 IN VOID *BufferPtr\r
310 )\r
311;\r
312\r
313EFI_STATUS\r
314EFIAPI\r
315BcUdpRead (\r
316 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
317 IN UINT16 OpFlags,\r
318 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
319 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL\r
320 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
321 IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
322 IN UINTN *HeaderSize, OPTIONAL\r
323 IN VOID *HeaderPtr, OPTIONAL\r
324 IN OUT UINTN *BufferSize,\r
325 IN VOID *BufferPtr\r
326 )\r
327;\r
328\r
329EFI_STATUS\r
330EFIAPI\r
331BcTcpWrite (\r
332 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
333 IN UINT16 OpFlags,\r
334 IN UINT16 *UrgentPointer,\r
335 IN UINT32 *SequenceNumber,\r
336 IN UINT32 *AckNumber,\r
337 IN UINT16 *HlenResCode,\r
338 IN UINT16 *Window,\r
339 IN EFI_IP_ADDRESS *DestIp,\r
340 IN EFI_PXE_BASE_CODE_TCP_PORT *DestPort,\r
341 IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
342 IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
343 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
344 IN UINTN *HeaderSize, OPTIONAL\r
345 IN VOID *HeaderPtr, OPTIONAL\r
346 IN UINTN *BufferSize,\r
347 IN VOID *BufferPtr\r
348 )\r
349;\r
350\r
351EFI_STATUS\r
352EFIAPI\r
353BcTcpRead (\r
354 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
355 IN UINT16 OpFlags,\r
356 IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
357 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *DestPort, OPTIONAL\r
358 IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
359 IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
360 IN UINTN *HeaderSize, OPTIONAL\r
361 IN VOID *HeaderPtr, OPTIONAL\r
362 IN OUT UINTN *BufferSize,\r
363 IN VOID *BufferPtr\r
364 )\r
365;\r
366\r
367EFI_STATUS\r
368EFIAPI\r
369BcArp (\r
370 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
371 IN EFI_IP_ADDRESS * IpAddr,\r
372 IN EFI_MAC_ADDRESS * MacAddr OPTIONAL\r
373 )\r
374;\r
375\r
376EFI_STATUS\r
377EFIAPI\r
378BcIpFilter (\r
379 IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
380 IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter\r
381 )\r
382;\r
383\r
384EFI_STATUS\r
385EFIAPI\r
386BcSetParameters (\r
387 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
388 IN BOOLEAN *NewAutoArp, OPTIONAL\r
389 IN BOOLEAN *NewSendGUID, OPTIONAL\r
390 IN UINT8 *NewTTL, OPTIONAL\r
391 IN UINT8 *NewToS, OPTIONAL\r
392 IN BOOLEAN *NewMakeCallback OPTIONAL\r
393 )\r
394;\r
395\r
396EFI_STATUS\r
397EFIAPI\r
398BcSetStationIP (\r
399 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
400 IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL\r
401 IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL\r
402 )\r
403;\r
404\r
405EFI_STATUS\r
406EFIAPI\r
407BcSetPackets (\r
408 IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
409 BOOLEAN *NewDhcpDiscoverValid, OPTIONAL\r
410 BOOLEAN *NewDhcpAckReceived, OPTIONAL\r
411 BOOLEAN *NewProxyOfferReceived, OPTIONAL\r
412 BOOLEAN *NewPxeDiscoverValid, OPTIONAL\r
413 BOOLEAN *NewPxeReplyReceived, OPTIONAL\r
414 BOOLEAN *NewPxeBisReplyReceived, OPTIONAL\r
415 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL\r
416 IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL\r
417 IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL\r
418 IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL\r
419 IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL\r
420 IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL\r
421 )\r
422;\r
423\r
424EFI_STATUS\r
425EFIAPI\r
426LoadFile (\r
427 IN EFI_LOAD_FILE_PROTOCOL *This,\r
428 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
429 IN BOOLEAN BootPolicy,\r
430 IN OUT UINTN *BufferSize,\r
431 IN VOID *Buffer\r
432 )\r
433;\r
434\r
435EFI_STATUS\r
436PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
437 IN EFI_GUID *SystemGuid,\r
438 OUT CHAR8 **SystemSerialNumber\r
439 )\r
440;\r
441\r
f71bb8f1 442#include "Ip.h"\r
443#include "Dhcp.h"\r
444#include "Tftp.h"\r
83cbd279 445\r
446#endif /* _BC_H */\r
447\r
448/* EOF - bc.h */\r