/** @file\r
Boot functions implementation for UefiPxeBc Driver.\r
\r
- Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
//\r
// According to the PXE specification 2.1, Table 2-1 PXE DHCP Options,\r
// we must not consider a boot prompt or boot menu if all of the following hold:\r
- // - the PXE_DISCOVERY_CONTROL tag(6) is present inside the Vendor Options(43), and has bit 3 set \r
+ // - the PXE_DISCOVERY_CONTROL tag(6) is present inside the Vendor Options(43), and has bit 3 set\r
// - a boot file name has been presented in the initial DHCP or ProxyDHCP offer packet.\r
//\r
if (IS_DISABLE_PROMPT_MENU (VendorOpt->DiscoverCtrl) &&\r
Cache->Dhcp4.OptList[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] != NULL) {\r
return EFI_ABORTED;\r
}\r
- \r
+\r
if (!IS_VALID_BOOT_PROMPT (VendorOpt->BitMap)) {\r
return EFI_TIMEOUT;\r
}\r
Status = gBS->SetTimer (\r
TimeoutEvent,\r
TimerRelative,\r
- Timeout * TICKS_PER_SECOND\r
+ MultU64x32 (Timeout, TICKS_PER_SECOND)\r
);\r
if (EFI_ERROR (Status)) {\r
goto ON_EXIT;\r
UINT16 Value;\r
PXEBC_VENDOR_OPTION *VendorOpt;\r
PXEBC_BOOT_SVR_ENTRY *Entry;\r
- \r
+\r
PxeBc = &Private->PxeBc;\r
Mode = PxeBc->Mode;\r
Status = EFI_SUCCESS;\r
\r
ASSERT (Cache6->OptList[PXEBC_DHCP6_IDX_BOOT_FILE_URL] != NULL);\r
\r
+ //\r
+ // Set the station address to IP layer.\r
+ //\r
+ Status = PxeBcSetIp6Address (Private);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+\r
//\r
// Parse (m)tftp server ip address and bootfile name.\r
//\r
Status = PxeBcExtractBootFileUrl (\r
+ Private,\r
&Private->BootFileName,\r
&Private->ServerIp.v6,\r
(CHAR8 *) (Cache6->OptList[PXEBC_DHCP6_IDX_BOOT_FILE_URL]->Data),\r
return Status;\r
}\r
\r
- //\r
- // Set the station address to IP layer.\r
- //\r
- Status = PxeBcSetIp6Address (Private);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- \r
//\r
// Parse the value of boot file size.\r
//\r
if (Info->IpCnt >= 1) {\r
*DiscoverInfo = AllocatePool (sizeof (*Info) + (Info->IpCnt - 1) * sizeof (**SrvList));\r
if (*DiscoverInfo == NULL) {\r
- return EFI_OUT_OF_RESOURCES; \r
- } \r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
CopyMem (*DiscoverInfo, Info, sizeof (*Info));\r
Info = *DiscoverInfo;\r
}\r
&Mode->ProxyOffer.Dhcpv4,\r
&Mode->PxeReply.Dhcpv4,\r
Private->PxeReply.Dhcp4.Packet.Ack.Length\r
- ); \r
+ );\r
}\r
Mode->ProxyOfferReceived = TRUE;\r
}\r
//\r
PxeBc = &Private->PxeBc;\r
Status = gBS->HandleProtocol (\r
- Private->Controller,\r
+ Private->Mode.UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller,\r
&gEfiPxeBaseCodeCallbackProtocolGuid,\r
(VOID **) &Private->PxeBcCallback\r
);\r
// Install a default callback if user didn't offer one.\r
//\r
Status = gBS->InstallProtocolInterface (\r
- &Private->Controller,\r
+ Private->Mode.UsingIpv6 ? &Private->Ip6Nic->Controller : &Private->Ip4Nic->Controller,\r
&gEfiPxeBaseCodeCallbackProtocolGuid,\r
EFI_NATIVE_INTERFACE,\r
&Private->LoadFileCallback\r
PxeBc->SetParameters (PxeBc, NULL, NULL, NULL, NULL, &NewMakeCallback);\r
\r
gBS->UninstallProtocolInterface (\r
- Private->Controller,\r
+ Private->Mode.UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller,\r
&gEfiPxeBaseCodeCallbackProtocolGuid,\r
&Private->LoadFileCallback\r
);\r
PxeBcUninstallCallback(Private, NewMakeCallback);\r
\r
if (Status == EFI_SUCCESS) {\r
- AsciiPrint ("\n Succeed to download NBP file.\n");\r
+ AsciiPrint ("\n NBP file downloaded successfully.\n");\r
return EFI_SUCCESS;\r
} else if (Status == EFI_BUFFER_TOO_SMALL && Buffer != NULL) {\r
AsciiPrint ("\n PXE-E05: Buffer size is smaller than the requested file.\n");\r
} else if (Status == EFI_NO_MEDIA) {\r
AsciiPrint ("\n PXE-E12: Could not detect network connection.\n");\r
} else if (Status == EFI_NO_RESPONSE) {\r
- AsciiPrint ("\n PXE-E16: No offer received.\n");\r
+ AsciiPrint ("\n PXE-E16: No valid offer received.\n");\r
} else if (Status == EFI_TIMEOUT) {\r
AsciiPrint ("\n PXE-E18: Server response timeout.\n");\r
} else if (Status == EFI_ABORTED) {\r