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