]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.h
[Change summary]:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDhcp.h
1 /** @file
2 Dhcp and Discover routines for PxeBc.
3
4 Copyright (c) 2007 - 2009, Intel Corporation.<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __EFI_PXEBC_DHCP_H__
16 #define __EFI_PXEBC_DHCP_H__
17
18 #define PXEBC_DHCP4_MAX_OPTION_NUM 16
19 #define PXEBC_DHCP4_MAX_OPTION_SIZE 312
20 #define PXEBC_DHCP4_MAX_PACKET_SIZE 1472
21
22 #define PXEBC_DHCP4_S_PORT 67
23 #define PXEBC_DHCP4_C_PORT 68
24 #define PXEBC_BS_DOWNLOAD_PORT 69
25 #define PXEBC_BS_DISCOVER_PORT 4011
26
27 #define PXEBC_DHCP4_OPCODE_REQUEST 1
28 #define PXEBC_DHCP4_OPCODE_REPLY 2
29 #define PXEBC_DHCP4_MSG_TYPE_REQUEST 3
30 #define PXEBC_DHCP4_MAGIC 0x63538263 // network byte order
31 //
32 // Dhcp Options
33 //
34 #define PXEBC_DHCP4_TAG_PAD 0 // Pad Option
35 #define PXEBC_DHCP4_TAG_EOP 255 // End Option
36 #define PXEBC_DHCP4_TAG_NETMASK 1 // Subnet Mask
37 #define PXEBC_DHCP4_TAG_TIME_OFFSET 2 // Time Offset from UTC
38 #define PXEBC_DHCP4_TAG_ROUTER 3 // Router option,
39 #define PXEBC_DHCP4_TAG_TIME_SERVER 4 // Time Server
40 #define PXEBC_DHCP4_TAG_NAME_SERVER 5 // Name Server
41 #define PXEBC_DHCP4_TAG_DNS_SERVER 6 // Domain Name Server
42 #define PXEBC_DHCP4_TAG_HOSTNAME 12 // Host Name
43 #define PXEBC_DHCP4_TAG_BOOTFILE_LEN 13 // Boot File Size
44 #define PXEBC_DHCP4_TAG_DUMP 14 // Merit Dump File
45 #define PXEBC_DHCP4_TAG_DOMAINNAME 15 // Domain Name
46 #define PXEBC_DHCP4_TAG_ROOTPATH 17 // Root path
47 #define PXEBC_DHCP4_TAG_EXTEND_PATH 18 // Extensions Path
48 #define PXEBC_DHCP4_TAG_EMTU 22 // Maximum Datagram Reassembly Size
49 #define PXEBC_DHCP4_TAG_TTL 23 // Default IP Time-to-live
50 #define PXEBC_DHCP4_TAG_BROADCAST 28 // Broadcast Address
51 #define PXEBC_DHCP4_TAG_NIS_DOMAIN 40 // Network Information Service Domain
52 #define PXEBC_DHCP4_TAG_NIS_SERVER 41 // Network Information Servers
53 #define PXEBC_DHCP4_TAG_NTP_SERVER 42 // Network Time Protocol Servers
54 #define PXEBC_DHCP4_TAG_VENDOR 43 // Vendor Specific Information
55 #define PXEBC_DHCP4_TAG_REQUEST_IP 50 // Requested IP Address
56 #define PXEBC_DHCP4_TAG_LEASE 51 // IP Address Lease Time
57 #define PXEBC_DHCP4_TAG_OVERLOAD 52 // Option Overload
58 #define PXEBC_DHCP4_TAG_MSG_TYPE 53 // DHCP Message Type
59 #define PXEBC_DHCP4_TAG_SERVER_ID 54 // Server Identifier
60 #define PXEBC_DHCP4_TAG_PARA_LIST 55 // Parameter Request List
61 #define PXEBC_DHCP4_TAG_MAXMSG 57 // Maximum DHCP Message Size
62 #define PXEBC_DHCP4_TAG_T1 58 // Renewal (T1) Time Value
63 #define PXEBC_DHCP4_TAG_T2 59 // Rebinding (T2) Time Value
64 #define PXEBC_DHCP4_TAG_CLASS_ID 60 // Vendor class identifier
65 #define PXEBC_DHCP4_TAG_CLIENT_ID 61 // Client-identifier
66 #define PXEBC_DHCP4_TAG_TFTP 66 // TFTP server name
67 #define PXEBC_DHCP4_TAG_BOOTFILE 67 // Bootfile name
68 #define PXEBC_PXE_DHCP4_TAG_ARCH 93
69 #define PXEBC_PXE_DHCP4_TAG_UNDI 94
70 #define PXEBC_PXE_DHCP4_TAG_UUID 97
71 //
72 // Sub-Options in Dhcp Vendor Option
73 //
74 #define PXEBC_VENDOR_TAG_MTFTP_IP 1
75 #define PXEBC_VENDOR_TAG_MTFTP_CPORT 2
76 #define PXEBC_VENDOR_TAG_MTFTP_SPORT 3
77 #define PXEBC_VENDOR_TAG_MTFTP_TIMEOUT 4
78 #define PXEBC_VENDOR_TAG_MTFTP_DELAY 5
79 #define PXEBC_VENDOR_TAG_DISCOVER_CTRL 6
80 #define PXEBC_VENDOR_TAG_DISCOVER_MCAST 7
81 #define PXEBC_VENDOR_TAG_BOOT_SERVERS 8
82 #define PXEBC_VENDOR_TAG_BOOT_MENU 9
83 #define PXEBC_VENDOR_TAG_MENU_PROMPT 10
84 #define PXEBC_VENDOR_TAG_MCAST_ALLOC 11
85 #define PXEBC_VENDOR_TAG_CREDENTIAL_TYPES 12
86 #define PXEBC_VENDOR_TAG_BOOT_ITEM 71
87
88 #define PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT 4
89 #define PXEBC_DHCP4_DISCOVER_RETRIES 4
90
91 #define PXEBC_MAX_MENU_NUM 24
92 #define PXEBC_MAX_OFFER_NUM 16
93
94 #define PXEBC_BOOT_REQUEST_TIMEOUT 1
95 #define PXEBC_BOOT_REQUEST_RETRIES 4
96
97 #define PXEBC_DHCP4_OVERLOAD_FILE 1
98 #define PXEBC_DHCP4_OVERLOAD_SERVER_NAME 2
99
100 //
101 // The array index of the DHCP4 option tag interested
102 //
103 #define PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN 0
104 #define PXEBC_DHCP4_TAG_INDEX_VENDOR 1
105 #define PXEBC_DHCP4_TAG_INDEX_OVERLOAD 2
106 #define PXEBC_DHCP4_TAG_INDEX_MSG_TYPE 3
107 #define PXEBC_DHCP4_TAG_INDEX_SERVER_ID 4
108 #define PXEBC_DHCP4_TAG_INDEX_CLASS_ID 5
109 #define PXEBC_DHCP4_TAG_INDEX_BOOTFILE 6
110 #define PXEBC_DHCP4_TAG_INDEX_MAX 7
111
112 //
113 // The type of DHCP OFFER, arranged by priority, PXE10 has the highest priority.
114 //
115 #define DHCP4_PACKET_TYPE_PXE10 0
116 #define DHCP4_PACKET_TYPE_WFM11A 1
117 #define DHCP4_PACKET_TYPE_BINL 2
118 #define DHCP4_PACKET_TYPE_DHCP_ONLY 3
119 #define DHCP4_PACKET_TYPE_MAX 4
120 #define DHCP4_PACKET_TYPE_BOOTP DHCP4_PACKET_TYPE_MAX
121
122 #define BIT(x) (1 << x)
123 #define CTRL(x) (0x1F & (x))
124
125 //
126 // WfM11a options
127 //
128 #define MTFTP_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_MTFTP_IP) | \
129 BIT (PXEBC_VENDOR_TAG_MTFTP_CPORT) | \
130 BIT (PXEBC_VENDOR_TAG_MTFTP_SPORT) | \
131 BIT (PXEBC_VENDOR_TAG_MTFTP_TIMEOUT) | \
132 BIT (PXEBC_VENDOR_TAG_MTFTP_DELAY))
133 //
134 // Discoverty options
135 //
136 #define DISCOVER_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_DISCOVER_CTRL) | \
137 BIT (PXEBC_VENDOR_TAG_DISCOVER_MCAST) | \
138 BIT (PXEBC_VENDOR_TAG_BOOT_SERVERS) | \
139 BIT (PXEBC_VENDOR_TAG_BOOT_MENU) | \
140 BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))
141
142 #define IS_VALID_BOOT_PROMPT(x) \
143 ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_MENU_PROMPT)) == BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))
144
145 #define IS_VALID_BOOT_MENU(x) \
146 ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_BOOT_MENU)) == BIT (PXEBC_VENDOR_TAG_BOOT_MENU))
147
148 #define IS_VALID_MTFTP_VENDOR_OPTION(x) \
149 (((UINT32) ((x)[0]) & MTFTP_VENDOR_OPTION_BIT_MAP) == MTFTP_VENDOR_OPTION_BIT_MAP)
150
151 #define IS_VALID_DISCOVER_VENDOR_OPTION(x) (((UINT32) ((x)[0]) & DISCOVER_VENDOR_OPTION_BIT_MAP) != 0)
152
153 #define IS_VALID_CREDENTIAL_VENDOR_OPTION(x) \
154 (((UINT32) ((x)[0]) & BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES)) == BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES))
155
156 #define IS_VALID_BOOTITEM_VENDOR_OPTION(x) \
157 (((UINT32) ((x)[PXEBC_VENDOR_TAG_BOOT_ITEM / 32]) & BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32)) \
158 == BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32))
159
160 #define IS_DISABLE_BCAST_DISCOVER(x) (((x) & BIT (0)) == BIT (0))
161 #define IS_DISABLE_MCAST_DISCOVER(x) (((x) & BIT (1)) == BIT (1))
162 #define IS_ENABLE_USE_SERVER_LIST(x) (((x) & BIT (2)) == BIT (2))
163 #define IS_ENABLE_BOOT_FILE_NAME(x) (((x) & BIT (3)) == BIT (3))
164
165 #define SET_VENDOR_OPTION_BIT_MAP(x, y) (((x)[(y) / 32]) = (UINT32) ((x)[(y) / 32]) | BIT ((y) % 32))
166
167 #pragma pack(1)
168 typedef struct {
169 UINT8 ParaList[135];
170 } PXEBC_DHCP4_OPTION_PARA;
171
172 typedef struct {
173 UINT16 Size;
174 } PXEBC_DHCP4_OPTION_MAX_MESG_SIZE;
175
176 typedef struct {
177 UINT8 Type;
178 UINT8 MajorVer;
179 UINT8 MinorVer;
180 } PXEBC_DHCP4_OPTION_UNDI;
181
182 typedef struct {
183 UINT8 Type;
184 } PXEBC_DHCP4_OPTION_MESG;
185
186 typedef struct {
187 UINT16 Type;
188 } PXEBC_DHCP4_OPTION_ARCH;
189
190 #define DEFAULT_CLASS_ID_DATA "PXEClient:Arch:xxxxx:UNDI:003000"
191 #define DEFAULT_UNDI_TYPE 1
192 #define DEFAULT_UNDI_MAJOR 3
193 #define DEFAULT_UNDI_MINOR 0
194
195 typedef struct {
196 UINT8 ClassIdentifier[10];
197 UINT8 ArchitecturePrefix[5];
198 UINT8 ArchitectureType[5];
199 UINT8 Lit3[1];
200 UINT8 InterfaceName[4];
201 UINT8 Lit4[1];
202 UINT8 UndiMajor[3];
203 UINT8 UndiMinor[3];
204 } PXEBC_DHCP4_OPTION_CLID;
205
206 typedef struct {
207 UINT8 Type;
208 UINT8 Guid[16];
209 } PXEBC_DHCP4_OPTION_UUID;
210
211 typedef struct {
212 UINT16 Type;
213 UINT16 Layer;
214 } PXEBC_OPTION_BOOT_ITEM;
215
216 #pragma pack()
217
218 typedef union {
219 PXEBC_DHCP4_OPTION_PARA *Para;
220 PXEBC_DHCP4_OPTION_UNDI *Undi;
221 PXEBC_DHCP4_OPTION_ARCH *Arch;
222 PXEBC_DHCP4_OPTION_CLID *Clid;
223 PXEBC_DHCP4_OPTION_UUID *Uuid;
224 PXEBC_DHCP4_OPTION_MESG *Mesg;
225 PXEBC_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;
226 } PXEBC_DHCP4_OPTION_ENTRY;
227
228 typedef struct {
229 UINT16 Type;
230 UINT8 IpCnt;
231 EFI_IPv4_ADDRESS IpAddr[1];
232 } PXEBC_BOOT_SVR_ENTRY;
233
234 typedef struct {
235 UINT16 Type;
236 UINT8 DescLen;
237 UINT8 DescStr[1];
238 } PXEBC_BOOT_MENU_ENTRY;
239
240 typedef struct {
241 UINT8 Timeout;
242 UINT8 Prompt[1];
243 } PXEBC_MENU_PROMPT;
244
245 typedef struct {
246 UINT32 BitMap[8];
247 EFI_IPv4_ADDRESS MtftpIp;
248 UINT16 MtftpCPort;
249 UINT16 MtftpSPort;
250 UINT8 MtftpTimeout;
251 UINT8 MtftpDelay;
252 UINT8 DiscoverCtrl;
253 EFI_IPv4_ADDRESS DiscoverMcastIp;
254 EFI_IPv4_ADDRESS McastIpBase;
255 UINT16 McastIpBlock;
256 UINT16 McastIpRange;
257 UINT16 BootSrvType;
258 UINT16 BootSrvLayer;
259 PXEBC_BOOT_SVR_ENTRY *BootSvr;
260 UINT8 BootSvrLen;
261 PXEBC_BOOT_MENU_ENTRY *BootMenu;
262 UINT8 BootMenuLen;
263 PXEBC_MENU_PROMPT *MenuPrompt;
264 UINT8 MenuPromptLen;
265 UINT32 *CredType;
266 UINT8 CredTypeLen;
267 } PXEBC_VENDOR_OPTION;
268
269 #define PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + PXEBC_DHCP4_MAX_PACKET_SIZE)
270
271 typedef union {
272 EFI_DHCP4_PACKET Offer;
273 EFI_DHCP4_PACKET Ack;
274 UINT8 Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];
275 } PXEBC_DHCP4_PACKET;
276
277 typedef struct {
278 PXEBC_DHCP4_PACKET Packet;
279 BOOLEAN IsPxeOffer;
280 UINT8 OfferType;
281 EFI_DHCP4_PACKET_OPTION *Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_MAX];
282 PXEBC_VENDOR_OPTION PxeVendorOption;
283 } PXEBC_CACHED_DHCP4_PACKET;
284
285 #define GET_NEXT_DHCP_OPTION(Opt) \
286 (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)
287
288 #define GET_OPTION_BUFFER_LEN(Pkt) ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)
289 #define IS_PROXY_DHCP_OFFER(Offer) EFI_IP4_EQUAL (&((Offer)->Dhcp4.Header.YourAddr), &mZeroIp4Addr)
290
291 #define GET_NEXT_BOOT_SVR_ENTRY(Ent) \
292 (PXEBC_BOOT_SVR_ENTRY *) ((UINT8 *) Ent + sizeof (*(Ent)) + ((Ent)->IpCnt - 1) * sizeof (EFI_IPv4_ADDRESS))
293
294
295 /**
296 This function initialize the DHCP4 message instance.
297
298 This function will pad each item of dhcp4 message packet.
299
300 @param Seed Pointer to the message instance of the DHCP4 packet.
301 @param Udp4 Pointer to the EFI_UDP4_PROTOCOL instance.
302
303 **/
304 VOID
305 PxeBcInitSeedPacket (
306 IN EFI_DHCP4_PACKET *Seed,
307 IN EFI_UDP4_PROTOCOL *Udp4
308 );
309
310
311 /**
312 Parse the cached dhcp packet.
313
314 @param CachedPacket Pointer to cached dhcp packet.
315
316 @retval TRUE Succeed to parse and validation.
317 @retval FALSE Fail to parse or validation.
318
319 **/
320 BOOLEAN
321 PxeBcParseCachedDhcpPacket (
322 IN PXEBC_CACHED_DHCP4_PACKET *CachedPacket
323 );
324
325 /**
326 This function is to check the selected proxy offer (include BINL dhcp offer and
327 DHCP_ONLY offer ) and set the flag and copy the DHCP packets to the Pxe base code
328 mode structure.
329
330 @param Private Pointer to PxeBc private data.
331
332 @retval EFI_SUCCESS Operational successful.
333 @retval EFI_NO_RESPONSE Offer dhcp service failed.
334
335 **/
336 EFI_STATUS
337 PxeBcCheckSelectedOffer (
338 IN PXEBC_PRIVATE_DATA *Private
339 );
340
341
342 /**
343 Callback routine.
344
345 EFI_DHCP4_CALLBACK is provided by the consumer of the EFI DHCPv4 Protocol driver
346 to intercept events that occurred in the configuration process. This structure
347 provides advanced control of each state transition of the DHCP process. The
348 returned status code determines the behavior of the EFI DHCPv4 Protocol driver.
349 There are three possible returned values, which are described in the following
350 table.
351
352 @param This Pointer to the EFI DHCPv4 Protocol instance that is used to
353 configure this callback function.
354 @param Context Pointer to the context that is initialized by
355 EFI_DHCP4_PROTOCOL.Configure().
356 @param CurrentState The current operational state of the EFI DHCPv4 Protocol
357 driver.
358 @param Dhcp4Event The event that occurs in the current state, which usually means a
359 state transition.
360 @param Packet The DHCP packet that is going to be sent or already received.
361 @param NewPacket The packet that is used to replace the above Packet.
362
363 @retval EFI_SUCCESS Tells the EFI DHCPv4 Protocol driver to continue the DHCP process.
364 @retval EFI_NOT_READY Only used in the Dhcp4Selecting state. The EFI DHCPv4 Protocol
365 driver will continue to wait for more DHCPOFFER packets until the retry
366 timeout expires.
367 @retval EFI_ABORTED Tells the EFI DHCPv4 Protocol driver to abort the current process and
368 return to the Dhcp4Init or Dhcp4InitReboot state.
369
370 **/
371 EFI_STATUS
372 EFIAPI
373 PxeBcDhcpCallBack (
374 IN EFI_DHCP4_PROTOCOL * This,
375 IN VOID *Context,
376 IN EFI_DHCP4_STATE CurrentState,
377 IN EFI_DHCP4_EVENT Dhcp4Event,
378 IN EFI_DHCP4_PACKET * Packet OPTIONAL,
379 OUT EFI_DHCP4_PACKET **NewPacket OPTIONAL
380 );
381
382
383 /**
384 Discover the boot of service and initialize the vendor option if exists.
385
386 @param Private Pointer to PxeBc private data.
387 @param Type PxeBc option boot item type
388 @param Layer PxeBc option boot item layer
389 @param UseBis Use BIS or not
390 @param DestIp Ip address for server
391 @param IpCount The total count of the server ip address
392 @param SrvList Server list
393 @param IsDiscv Discover the vendor or not
394 @param Reply The dhcp4 packet of Pxe reply
395
396 @retval EFI_SUCCESS Operation succeeds.
397 @retval EFI_OUT_OF_RESOURCES Allocate memory pool failed.
398 @retval EFI_NOT_FOUND There is no vendor option exists.
399 @retval EFI_TIMEOUT Send Pxe Discover time out.
400
401 **/
402 EFI_STATUS
403 PxeBcDiscvBootService (
404 IN PXEBC_PRIVATE_DATA * Private,
405 IN UINT16 Type,
406 IN UINT16 *Layer,
407 IN BOOLEAN UseBis,
408 IN EFI_IP_ADDRESS * DestIp,
409 IN UINT16 IpCount,
410 IN EFI_PXE_BASE_CODE_SRVLIST * SrvList,
411 IN BOOLEAN IsDiscv,
412 OUT EFI_DHCP4_PACKET * Reply OPTIONAL
413 );
414
415
416 /**
417 Initialize the DHCP options and build the option list.
418
419 @param Private Pointer to PxeBc private data.
420 @param OptList Pointer to a DHCP option list.
421
422 @param IsDhcpDiscover Discover dhcp option or not.
423
424 @return The index item number of the option list.
425
426 **/
427 UINT32
428 PxeBcBuildDhcpOptions (
429 IN PXEBC_PRIVATE_DATA *Private,
430 IN EFI_DHCP4_PACKET_OPTION **OptList,
431 IN BOOLEAN IsDhcpDiscover
432 );
433
434
435 /**
436 Create the boot options.
437
438 @param OptList Pointer to the list of the options
439 @param Type the type of option
440 @param Layer the layer of the boot options
441 @param OptLen length of opotion
442
443 **/
444 VOID
445 PxeBcCreateBootOptions (
446 IN EFI_DHCP4_PACKET_OPTION *OptList,
447 IN UINT16 Type,
448 IN UINT16 *Layer,
449 OUT UINT32 *OptLen
450 );
451
452
453 /**
454 Parse interested dhcp options.
455
456 @param Buffer Pointer to the dhcp options packet.
457 @param Length The length of the dhcp options.
458 @param OptTag The option OpCode.
459
460 @return NULL if the buffer length is 0 and OpCode is not
461 PXEBC_DHCP4_TAG_EOP, or the pointer to the buffer.
462
463 **/
464 EFI_DHCP4_PACKET_OPTION *
465 PxeBcParseExtendOptions (
466 IN UINT8 *Buffer,
467 IN UINT32 Length,
468 IN UINT8 OptTag
469 );
470
471
472 /**
473 This function is to parse and check vendor options.
474
475 @param Dhcp4Option Pointer to dhcp options
476 @param VendorOption Pointer to vendor options
477
478 @return TRUE if valid for vendor options, or FALSE.
479
480 **/
481 BOOLEAN
482 PxeBcParseVendorOptions (
483 IN EFI_DHCP4_PACKET_OPTION *Dhcp4Option,
484 IN PXEBC_VENDOR_OPTION *VendorOption
485 );
486
487
488 /**
489 Choose the boot prompt.
490
491 @param Private Pointer to PxeBc private data.
492
493 @retval EFI_SUCCESS Select boot prompt done.
494 @retval EFI_TIMEOUT Select boot prompt time out.
495 @retval EFI_NOT_FOUND The proxy offer is not Pxe10.
496 @retval EFI_ABORTED User cancel the operation.
497 @retval EFI_NOT_READY Read the input key from the keybroad has not finish.
498
499 **/
500 EFI_STATUS
501 PxeBcSelectBootPrompt (
502 IN PXEBC_PRIVATE_DATA *Private
503 );
504
505
506 /**
507 Select the boot menu.
508
509 @param Private Pointer to PxeBc private data.
510 @param Type The type of the menu.
511 @param UseDefaultItem Use default item or not.
512
513 @retval EFI_ABORTED User cancel operation.
514 @retval EFI_SUCCESS Select the boot menu success.
515 @retval EFI_NOT_READY Read the input key from the keybroad has not finish.
516
517 **/
518 EFI_STATUS
519 PxeBcSelectBootMenu (
520 IN PXEBC_PRIVATE_DATA *Private,
521 OUT UINT16 *Type,
522 IN BOOLEAN UseDefaultItem
523 );
524
525 #endif
526