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