Reviewed-by: Ruiyu Ni <[email protected]> >-----Original Message----- >From: Fu, Siyuan >Sent: Wednesday, May 4, 2016 1:58 PM >To: [email protected] >Cc: Ye, Ting <[email protected]>; Wu, Jiaxin <[email protected]>; Ni, Ruiyu ><[email protected]> >Subject: [PATCH v2] NetworkPkg: Use UefiBootManagerLib API to create load >option. > >V2: >Remove unnecessary ZeroMem and free load option. > >This patch updates the HTTP boot driver to use the API in UefiBootManagerLib to >create new load option, to avoid duplicate code. > >Cc: Ye Ting <[email protected]> >Cc: Wu Jiaxin <[email protected]> >Cc: Ni Ruiyu <[email protected]> >Contributed-under: TianoCore Contribution Agreement 1.0 >Signed-off-by: Fu Siyuan <[email protected]> >--- > NetworkPkg/HttpBootDxe/HttpBootConfig.c | 136 ++++++-------------------------- > NetworkPkg/HttpBootDxe/HttpBootDxe.inf | 1 + > NetworkPkg/NetworkPkg.dsc | 8 ++ > 3 files changed, 33 insertions(+), 112 deletions(-) > >diff --git a/NetworkPkg/HttpBootDxe/HttpBootConfig.c >b/NetworkPkg/HttpBootDxe/HttpBootConfig.c >index 00e4782..2ca38b5 100644 >--- a/NetworkPkg/HttpBootDxe/HttpBootConfig.c >+++ b/NetworkPkg/HttpBootDxe/HttpBootConfig.c >@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >EXPRESS OR IMPLIED. > **/ > > #include "HttpBootDxe.h" >+#include <Library/UefiBootManagerLib.h> > > CHAR16 mHttpBootConfigStorageName[] = L"HTTP_BOOT_CONFIG_IFR_NVDATA"; > >@@ -36,31 +37,18 @@ HttpBootAddBootOption ( > IN CHAR16 *Uri > ) > { >- EFI_DEV_PATH *Node; >- EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath; >- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath; >- UINTN Length; >- CHAR8 AsciiUri[URI_STR_MAX_SIZE]; >- CHAR16 *CurrentOrder; >- EFI_STATUS Status; >- UINTN OrderCount; >- UINTN TargetLocation; >- BOOLEAN Found; >- UINT8 *TempByteBuffer; >- UINT8 *TempByteStart; >- UINTN DescSize; >- UINTN FilePathSize; >- CHAR16 OptionStr[10]; >- UINT16 *NewOrder; >- UINTN Index; >- >- NewOrder = NULL; >- TempByteStart = NULL; >+ EFI_DEV_PATH *Node; >+ EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath; >+ EFI_DEVICE_PATH_PROTOCOL *NewDevicePath; >+ UINTN Length; >+ CHAR8 AsciiUri[URI_STR_MAX_SIZE]; >+ EFI_STATUS Status; >+ UINTN Index; >+ EFI_BOOT_MANAGER_LOAD_OPTION NewOption; >+ > NewDevicePath = NULL; >- NewOrder = NULL; > Node = NULL; > TmpDevicePath = NULL; >- CurrentOrder = NULL; > > if (StrLen (Description) == 0) { > return EFI_INVALID_PARAMETER; >@@ -137,105 +125,29 @@ HttpBootAddBootOption ( > } > > // >- // Get current "BootOrder" variable and find a free target. >- // >- Length = 0; >- Status = GetVariable2 ( >- L"BootOrder", >- &gEfiGlobalVariableGuid, >- (VOID **)&CurrentOrder, >- &Length >- ); >- if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) { >- goto ON_EXIT; >- } >- OrderCount = Length / sizeof (UINT16); >- Found = FALSE; >- for (TargetLocation=0; TargetLocation < 0xFFFF; TargetLocation++) { >- Found = TRUE; >- for (Index = 0; Index < OrderCount; Index++) { >- if (CurrentOrder[Index] == TargetLocation) { >- Found = FALSE; >- break; >- } >- } >- if (Found) { >- break; >- } >- } >- >- if (TargetLocation == 0xFFFF) { >- DEBUG ((EFI_D_ERROR, "Could not find unused target index.\n")); >- Status = EFI_OUT_OF_RESOURCES; >- goto ON_EXIT; >- } else { >- DEBUG ((EFI_D_INFO, "TargetIndex = %04x.\n", TargetLocation)); >- } >- >- // >- // Construct and set the "Boot####" variable >+ // Add a new load option. > // >- DescSize = StrSize(Description); >- FilePathSize = GetDevicePathSize (NewDevicePath); >- TempByteBuffer = AllocateZeroPool(sizeof(EFI_LOAD_OPTION) + DescSize + >FilePathSize); >- if (TempByteBuffer == NULL) { >- Status = EFI_OUT_OF_RESOURCES; >- goto ON_EXIT; >- } >- >- TempByteStart = TempByteBuffer; >- *((UINT32 *) TempByteBuffer) = LOAD_OPTION_ACTIVE; // Attributes >- TempByteBuffer += sizeof (UINT32); >- >- *((UINT16 *) TempByteBuffer) = (UINT16)FilePathSize; // >FilePathListLength >- TempByteBuffer += sizeof (UINT16); >- >- CopyMem (TempByteBuffer, Description, DescSize); >- TempByteBuffer += DescSize; >- CopyMem (TempByteBuffer, NewDevicePath, FilePathSize); >- >- UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", L"Boot", >TargetLocation); >- Status = gRT->SetVariable ( >- OptionStr, >- &gEfiGlobalVariableGuid, >- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS >| >EFI_VARIABLE_RUNTIME_ACCESS, >- sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize, >- TempByteStart >- ); >+ Status = EfiBootManagerInitializeLoadOption ( >+ &NewOption, >+ LoadOptionNumberUnassigned, >+ LoadOptionTypeBoot, >+ LOAD_OPTION_ACTIVE, >+ Description, >+ NewDevicePath, >+ NULL, >+ 0 >+ ); > if (EFI_ERROR (Status)) { > goto ON_EXIT; > } > >- // >- // Insert into the order list and set "BootOrder" variable >- // >- NewOrder = AllocateZeroPool ((OrderCount + 1) * sizeof (UINT16)); >- if (NewOrder == NULL) { >- Status = EFI_OUT_OF_RESOURCES; >- goto ON_EXIT; >+ Status = EfiBootManagerAddLoadOptionVariable (&NewOption, (UINTN) -1); >+ if (EFI_ERROR (Status)) { >+ EfiBootManagerFreeLoadOption (&NewOption); > } >- CopyMem(NewOrder, CurrentOrder, OrderCount * sizeof(UINT16)); >- NewOrder[OrderCount] = (UINT16) TargetLocation; >- Status = gRT->SetVariable ( >- L"BootOrder", >- &gEfiGlobalVariableGuid, >- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS >| >EFI_VARIABLE_RUNTIME_ACCESS, >- ((OrderCount + 1) * sizeof (UINT16)), >- NewOrder >- ); >- > > ON_EXIT: > >- if (CurrentOrder != NULL) { >- FreePool (CurrentOrder); >- } >- if (NewOrder != NULL) { >- FreePool (NewOrder); >- } >- if (TempByteStart != NULL) { >- FreePool (TempByteStart); >- } > if (NewDevicePath != NULL) { > FreePool (NewDevicePath); > } >diff --git a/NetworkPkg/HttpBootDxe/HttpBootDxe.inf >b/NetworkPkg/HttpBootDxe/HttpBootDxe.inf >index d3df5f7..e6ce864 100644 >--- a/NetworkPkg/HttpBootDxe/HttpBootDxe.inf >+++ b/NetworkPkg/HttpBootDxe/HttpBootDxe.inf >@@ -61,6 +61,7 @@ > HiiLib > PrintLib > UefiHiiServicesLib >+ UefiBootManagerLib > > [Protocols] > ## TO_START >diff --git a/NetworkPkg/NetworkPkg.dsc b/NetworkPkg/NetworkPkg.dsc >index 0695dc1..3c809d5 100644 >--- a/NetworkPkg/NetworkPkg.dsc >+++ b/NetworkPkg/NetworkPkg.dsc >@@ -39,6 +39,12 @@ > UefiLib|MdePkg/Library/UefiLib/UefiLib.inf > > UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf > > UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf >+ >UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf >+ >TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf >+ >PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf >+ >PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf >+ DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf >+ >DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf > > DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf > NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf >@@ -54,6 +60,8 @@ > SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf > > [LibraryClasses.common.UEFI_DRIVER] >+ HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf >+ >ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf > DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf > > [LibraryClasses.common.UEFI_APPLICATION] >-- >2.7.4.windows.1
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

