On 05/09/16 13:13, Laszlo Ersek wrote:
> On 05/04/16 07:58, Fu Siyuan wrote:
>> 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(-)
> 
> This patch breaks the OvmfPkg build, with the following options:
> 
>   -D USE_OLD_BDS -D HTTP_ENABLE

(sorry, HTTP_ENABLE was a typo: it's HTTP_BOOT_ENABLE)

> 
> The reason is that the new UefiBootManagerLib dependency is not resolved
> in the OvmfPkg DSC files with USE_OLD_BDS.
> 
> ... Hm, actually, I think this build breakage is indicative of a deeper
> change. Namely, requiring UefiBootManagerLib in HttpBootDxe means that
> HttpBootDxe is no longer compatible with the IntelFrameworkModulePkg BDS.
> 
> Is that intentional?
> 
> If so, I'm not opposing it, of course, but it means that the usefulness
> of USE_OLD_BDS in OvmfPkg is decreasing rapidly -- much faster than I
> expected. We should probably remove USE_OLD_BDS from OvmfPkg in a week
> or two.
> 
> Ultimately, I think it's not necessary to fix up this patch.
> 
> Thanks
> Laszlo
> 
>> 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]
>>
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to