public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Ruiyu Ni <ruiyu.ni@intel.com>, Laszlo Ersek <lersek@redhat.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Jaben Carsey <jaben.carsey@intel.com>,
	 Chen A Chen <chen.a.chen@intel.com>,
	chen881220 <ai_terran@foxmail.com>
Subject: Re: [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification functionality
Date: Wed, 1 Mar 2017 07:32:52 +0000	[thread overview]
Message-ID: <CAKv+Gu9Lsdpeah=t70RbeZqoNxbjfdTJC62ydBJ49jWDfdr-JA@mail.gmail.com> (raw)
In-Reply-To: <20170227075002.322540-1-ruiyu.ni@intel.com>

On 27 February 2017 at 07:50, Ruiyu Ni <ruiyu.ni@intel.com> wrote:
> From: chen881220 <ai_terran@foxmail.com>
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Chen A Chen <chen.a.chen@intel.com>
> Cc: Jaben Carsey <jaben.carsey@intel.com>

This patch has broken the ArmVirtXen.dsc build

Processing meta-data .

build.py...
<https://ci.linaro.org/jenkins/job/leg-virt-tianocore-edk2-upstream/ws/edk2/ArmVirtPkg/ArmVirtXen.dsc(...)>:
error 4000: Instance of library class [UefiBootManagerLib] is not
found
        in [<https://ci.linaro.org/jenkins/job/leg-virt-tianocore-edk2-upstream/ws/edk2/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf]>
[ARM]
        consumed by module
[<https://ci.linaro.org/jenkins/job/leg-virt-tianocore-edk2-upstream/ws/edk2/ShellPkg/Application/Shell/Shell.inf]>

I take it that it is simply a matter of adding

UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf

to the broken platforms?


> ---
>  .../UefiShellBcfgCommandLib.c                      | 352 ++++++++++++++++++++-
>  .../UefiShellBcfgCommandLib.inf                    |   3 +-
>  ShellPkg/ShellPkg.dsc                              |   8 +
>  3 files changed, 360 insertions(+), 3 deletions(-)
>
> diff --git a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
> index 62a52ad..1538bc6 100644
> --- a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
> +++ b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
> @@ -2,7 +2,7 @@
>    Main file for BCFG command.
>
>    (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR>
> -  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD License
>    which accompanies this distribution.  The full text of the license may be found at
> @@ -41,6 +41,7 @@
>  #include <Library/PrintLib.h>
>  #include <Library/HandleParsingLib.h>
>  #include <Library/DevicePathLib.h>
> +#include <Library/UefiBootManagerLib.h>
>
>  STATIC CONST CHAR16 mFileName[] = L"ShellCommands";
>  STATIC EFI_HANDLE gShellBcfgHiiHandle  = NULL;
> @@ -59,7 +60,11 @@ typedef enum {
>    BcfgTypeRm         = 4,
>    BcfgTypeMv         = 5,
>    BcfgTypeOpt        = 6,
> -  BcfgTypeMax        = 7
> +  BcfgTypeMod        = 7,
> +  BcfgTypeModf       = 8,
> +  BcfgTypeModp       = 9,
> +  BcfgTypeModh       = 10,
> +  BcfgTypeMax        = 11
>  } BCFG_OPERATION_TYPE;
>
>  typedef struct {
> @@ -275,6 +280,247 @@ GetDevicePathForDriverHandle (
>  }
>
>  /**
> +  Functino to get Device Path by a handle.
> +
> +  @param[in]        TheHandle   Use it to get DevicePath.
> +  @param[in]        Target      Boot option target.
> +  @param[in, out]   DevicePath  On a sucessful return the device path to the handle.
> +
> +  @retval   SHELL_INVALID_PARAMETER The handle was NULL.
> +  @retval   SHELL_NOT_FOUND         Not found device path by handle.
> +  @retval   SHELL_SUCCESS           Get device path successfully.
> +**/
> +SHELL_STATUS
> +GetDevicePathByHandle(
> +  IN     EFI_HANDLE               TheHandle,
> +  IN     BCFG_OPERATION_TARGET    Target,
> +  IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
> +  )
> +{
> +  EFI_STATUS   Status;
> +  SHELL_STATUS ShellStatus;
> +
> +  UINTN DriverBindingHandleCount;
> +  UINTN ParentControllerHandleCount;
> +  UINTN ChildControllerHandleCount;
> +
> +  ShellStatus = SHELL_SUCCESS;
> +
> +  if (TheHandle == NULL) {
> +    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", L"Handle Number");
> +    return SHELL_INVALID_PARAMETER;
> +  }
> +
> +  Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (TheHandle, &DriverBindingHandleCount, NULL);
> +  if (EFI_ERROR(Status)) {
> +    DriverBindingHandleCount = 0;
> +  }
> +
> +  Status = PARSE_HANDLE_DATABASE_PARENTS (TheHandle, &ParentControllerHandleCount, NULL);
> +  if (EFI_ERROR (Status)) {
> +    ParentControllerHandleCount = 0;
> +  }
> +
> +  Status = ParseHandleDatabaseForChildControllers (TheHandle, &ChildControllerHandleCount, NULL);
> +  if (EFI_ERROR (Status)) {
> +    ChildControllerHandleCount = 0;
> +  }
> +
> +  Status = gBS->HandleProtocol (TheHandle, &gEfiDevicePathProtocolGuid, (VOID**)DevicePath);
> +
> +  if ( DriverBindingHandleCount    > 0 ||
> +       ParentControllerHandleCount > 0 ||
> +       ChildControllerHandleCount  > 0 ||
> +       !EFI_ERROR(Status)
> +     ) {
> +    //
> +    // The handle points to a real controller which has a device path.
> +    //
> +    if (Target == BcfgTargetDriverOrder) {
> +      ShellPrintHiiEx (
> +        -1,
> +        -1,
> +        NULL,STRING_TOKEN (STR_GEN_PARAM_INV),
> +        gShellBcfgHiiHandle,
> +        L"bcfg",
> +        L"Handle should point to driver image."
> +      );
> +      ShellStatus = SHELL_NOT_FOUND;
> +    }
> +  } else {
> +    //
> +    // The handle points to a driver image.
> +    //
> +    if (Target == BcfgTargetBootOrder) {
> +      ShellPrintHiiEx (
> +        -1,
> +        -1,
> +        NULL,
> +        STRING_TOKEN (STR_GEN_PARAM_INV),
> +        gShellBcfgHiiHandle,
> +        L"bcfg",
> +        L"Handle should point to controller."
> +      );
> +      ShellStatus = SHELL_NOT_FOUND;
> +    } else {
> +      if (EFI_ERROR (GetDevicePathForDriverHandle (TheHandle, DevicePath))) {
> +        ShellStatus = SHELL_NOT_FOUND;
> +      }
> +    }
> +  }
> +
> +  return (ShellStatus);
> +}
> +
> +/**
> +  Function to modify an option.
> +
> +  @param[in] BcfgOperation  Pointer to BCFG operation.
> +  @param[in] OrderCount     The number if items in CurrentOrder.
> +
> +  @retval SHELL_SUCCESS             The operation was successful.
> +  @retval SHELL_INVALID_PARAMETER   A parameter was invalid.
> +  @retval SHELL_OUT_OF_RESOUCES     A memory allocation failed.
> +**/
> +SHELL_STATUS
> +BcfgMod (
> +  IN CONST BGFG_OPERATION   *BcfgOperation,
> +  IN CONST UINTN            OrderCount
> +  )
> +{
> +  EFI_STATUS                    Status;
> +  EFI_HANDLE                    CurHandle;
> +  SHELL_STATUS                  ShellStatus;
> +  CHAR16                        OptionStr[40];
> +  EFI_SHELL_FILE_INFO           *FileList;
> +  EFI_SHELL_FILE_INFO           *Arg;
> +  EFI_DEVICE_PATH_PROTOCOL      *DevicePath;
> +  EFI_DEVICE_PATH_PROTOCOL      *DevicePathBuffer;
> +  EFI_DEVICE_PATH_PROTOCOL      *DevicePathWalker;
> +  EFI_BOOT_MANAGER_LOAD_OPTION  LoadOption;
> +
> +  ShellStatus       = SHELL_SUCCESS;
> +  FileList          = NULL;
> +  DevicePath        = NULL;
> +
> +  ZeroMem (&LoadOption, sizeof(EFI_BOOT_MANAGER_LOAD_OPTION));
> +
> +  if ( (BcfgOperation->Type == BcfgTypeMod  && BcfgOperation->Description == NULL)  ||
> +       (BcfgOperation->Type == BcfgTypeModf && BcfgOperation->FileName == NULL)     ||
> +       (BcfgOperation->Type == BcfgTypeModp && BcfgOperation->FileName == NULL)     ||
> +       (BcfgOperation->Type == BcfgTypeModh && BcfgOperation->HandleIndex == 0)     ||
> +       (BcfgOperation->Number1 > OrderCount)
> +     ) {
> +    return (SHELL_INVALID_PARAMETER);
> +  }
> +
> +  if (BcfgOperation->Type == BcfgTypeModh) {
> +    CurHandle = ConvertHandleIndexToHandle (BcfgOperation->HandleIndex);
> +    ShellStatus = GetDevicePathByHandle (CurHandle, BcfgOperation->Target, &DevicePathBuffer);
> +    if (ShellStatus == SHELL_SUCCESS) {
> +      DevicePath = DuplicateDevicePath (DevicePathBuffer);
> +    }
> +  } else if (BcfgOperation->Type == BcfgTypeModf || BcfgOperation->Type == BcfgTypeModp) {
> +    //
> +    // Get Device Path by FileName.
> +    //
> +    ShellOpenFileMetaArg ((CHAR16 *)BcfgOperation->FileName, EFI_FILE_MODE_READ, &FileList);
> +    if (FileList == NULL) {
> +      //
> +      // The name of file matched nothing.
> +      //
> +      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellBcfgHiiHandle, L"bcfg", BcfgOperation->FileName);
> +      ShellStatus = SHELL_INVALID_PARAMETER;
> +    }
> +    else if (FileList->Link.ForwardLink != FileList->Link.BackLink) {
> +      //
> +      // If the name of file expanded to multiple names, it's fail.
> +      //
> +      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE), gShellBcfgHiiHandle, L"bcfg", BcfgOperation->FileName);
> +      ShellStatus = SHELL_INVALID_PARAMETER;
> +    } else {
> +      Arg = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link);
> +      if (EFI_ERROR (Arg->Status)) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE_OPEN), gShellBcfgHiiHandle, L"bcfg", BcfgOperation->FileName);
> +        ShellStatus = SHELL_INVALID_PARAMETER;
> +      } else {
> +        DevicePathBuffer = gEfiShellProtocol->GetDevicePathFromFilePath (Arg->FullName);
> +        if (DevicePathBuffer == NULL) {
> +          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE_DP), gShellBcfgHiiHandle, L"bcfg", Arg->FullName);
> +          ShellStatus = SHELL_UNSUPPORTED;
> +        }
> +      }
> +    }
> +
> +    if (ShellStatus == SHELL_SUCCESS) {
> +      if (BcfgOperation->Type == BcfgTypeModp) {
> +        ShellStatus = SHELL_INVALID_PARAMETER;
> +        DevicePathWalker = DevicePathBuffer;
> +        while (!IsDevicePathEnd (DevicePathWalker)) {
> +          if ( DevicePathType (DevicePathWalker) == MEDIA_DEVICE_PATH &&
> +               DevicePathSubType (DevicePathWalker) == MEDIA_HARDDRIVE_DP
> +             ) {
> +            //
> +            // We found the portion of device path starting with the hard driver partition.
> +            //
> +            ShellStatus = SHELL_SUCCESS;
> +            DevicePath = DuplicateDevicePath (DevicePathWalker);
> +            break;
> +          } else {
> +            DevicePathWalker = NextDevicePathNode (DevicePathWalker);
> +          }
> +        }
> +      } else {
> +        DevicePath = DuplicateDevicePath (DevicePathBuffer);
> +      }
> +
> +      FreePool (DevicePathBuffer);
> +    }
> +  }
> +
> +  if (ShellStatus == SHELL_SUCCESS) {
> +    if (BcfgOperation->Target == BcfgTargetBootOrder) {
> +      UnicodeSPrint (OptionStr, sizeof (OptionStr), L"Boot%04x", BcfgOperation->Order[BcfgOperation->Number1]);
> +    } else {
> +      UnicodeSPrint (OptionStr, sizeof (OptionStr), L"Driver%04x", BcfgOperation->Order[BcfgOperation->Number1]);
> +    }
> +    Status = EfiBootManagerVariableToLoadOption (OptionStr, &LoadOption);
> +    if (EFI_ERROR(Status)) {
> +      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_NONE), gShellBcfgHiiHandle);
> +      ShellStatus = SHELL_NOT_FOUND;
> +    }
> +  }
> +
> +  if (ShellStatus == SHELL_SUCCESS) {
> +    if (BcfgOperation->Type == BcfgTypeMod) {
> +      SHELL_FREE_NON_NULL (LoadOption.Description);
> +      LoadOption.Description = AllocateCopyPool (StrSize (BcfgOperation->Description), BcfgOperation->Description);
> +    } else {
> +      SHELL_FREE_NON_NULL (LoadOption.FilePath);
> +      LoadOption.FilePath = DuplicateDevicePath (DevicePath);
> +    }
> +
> +    Status = EfiBootManagerLoadOptionToVariable (&LoadOption);
> +    if (EFI_ERROR(Status)) {
> +      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellBcfgHiiHandle, L"bcfg", OptionStr);
> +      ShellStatus = SHELL_INVALID_PARAMETER;
> +    }
> +  }
> +
> +  EfiBootManagerFreeLoadOption (&LoadOption);
> +
> +  if (DevicePath != NULL) {
> +    FreePool (DevicePath);
> +  }
> +
> +  if (FileList != NULL) {
> +    ShellCloseFileMetaArg (&FileList);
> +  }
> +
> +  return (ShellStatus);
> +}
> +
> +/**
>    Function to add a option.
>
>    @param[in] Position       The position to add Target at.
> @@ -1404,6 +1650,102 @@ ShellCommandRunBcfg (
>                }
>              }
>            }
> +        }
> +        else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)CurrentParam, L"mod") == 0) {
> +          if ((ParamNumber + 2) >= ShellCommandLineGetCount (Package)) {
> +            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellBcfgHiiHandle, L"bcfg");
> +            ShellStatus = SHELL_INVALID_PARAMETER;
> +          } else {
> +            CurrentOperation.Type = BcfgTypeMod;
> +            CurrentParam = ShellCommandLineGetRawValue (Package, ++ParamNumber);
> +            if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber (CurrentParam, TRUE, FALSE)) {
> +              ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
> +              ShellStatus = SHELL_INVALID_PARAMETER;
> +            } else {
> +              Status = ShellConvertStringToUint64 (CurrentParam, &Intermediate, TRUE, FALSE);
> +              CurrentOperation.Number1 = (UINT16)Intermediate;
> +              if (CurrentOperation.Number1 >= Count) {
> +                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellBcfgHiiHandle, L"bcfg", Count);
> +                ShellStatus = SHELL_INVALID_PARAMETER;
> +              } else {
> +                ASSERT (CurrentOperation.Description == NULL);
> +                CurrentOperation.Description = StrnCatGrow (&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue (Package, ++ParamNumber), 0);
> +              }
> +            }
> +          }
> +        } else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)CurrentParam, L"modf") == 0) {
> +          if ((ParamNumber + 2) >= ShellCommandLineGetCount (Package)) {
> +            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellBcfgHiiHandle, L"bcfg");
> +            ShellStatus = SHELL_INVALID_PARAMETER;
> +          } else {
> +            CurrentOperation.Type = BcfgTypeModf;
> +            CurrentParam = ShellCommandLineGetRawValue (Package, ++ParamNumber);
> +            if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber (CurrentParam, TRUE, FALSE)) {
> +              ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
> +              ShellStatus = SHELL_INVALID_PARAMETER;
> +            } else {
> +              Status = ShellConvertStringToUint64  (CurrentParam, &Intermediate, TRUE, FALSE);
> +              CurrentOperation.Number1 = (UINT16)Intermediate;
> +              if (CurrentOperation.Number1 >= Count) {
> +                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellBcfgHiiHandle, L"bcfg", Count);
> +                ShellStatus = SHELL_INVALID_PARAMETER;
> +              } else {
> +                ASSERT (CurrentOperation.FileName == NULL);
> +                CurrentOperation.FileName = StrnCatGrow (&CurrentOperation.FileName, NULL, ShellCommandLineGetRawValue (Package, ++ParamNumber), 0);
> +              }
> +            }
> +          }
> +        } else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)CurrentParam, L"modp") == 0) {
> +          if ((ParamNumber + 2) >= ShellCommandLineGetCount (Package)) {
> +            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellBcfgHiiHandle, L"bcfg");
> +            ShellStatus = SHELL_INVALID_PARAMETER;
> +          } else {
> +            CurrentOperation.Type = BcfgTypeModp;
> +            CurrentParam = ShellCommandLineGetRawValue (Package, ++ParamNumber);
> +            if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber (CurrentParam, TRUE, FALSE)) {
> +              ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
> +              ShellStatus = SHELL_INVALID_PARAMETER;
> +            } else {
> +              Status = ShellConvertStringToUint64 (CurrentParam, &Intermediate, TRUE, FALSE);
> +              CurrentOperation.Number1 = (UINT16)Intermediate;
> +              if (CurrentOperation.Number1 >= Count) {
> +                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellBcfgHiiHandle, L"bcfg", Count);
> +                ShellStatus = SHELL_INVALID_PARAMETER;
> +              } else {
> +                ASSERT (CurrentOperation.FileName == NULL);
> +                CurrentOperation.FileName = StrnCatGrow (&CurrentOperation.FileName, NULL, ShellCommandLineGetRawValue (Package, ++ParamNumber), 0);
> +              }
> +            }
> +          }
> +        } else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)CurrentParam, L"modh") == 0) {
> +          if ((ParamNumber + 2) >= ShellCommandLineGetCount (Package)) {
> +            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellBcfgHiiHandle, L"bcfg");
> +            ShellStatus = SHELL_INVALID_PARAMETER;
> +          } else {
> +            CurrentOperation.Type = BcfgTypeModh;
> +            CurrentParam = ShellCommandLineGetRawValue (Package, ++ParamNumber);
> +            if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber (CurrentParam, TRUE, FALSE)) {
> +              ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
> +              ShellStatus = SHELL_INVALID_PARAMETER;
> +            }
> +            else {
> +              Status = ShellConvertStringToUint64 (CurrentParam, &Intermediate, TRUE, FALSE);
> +              CurrentOperation.Number1 = (UINT16)Intermediate;
> +              if (CurrentOperation.Number1 >= Count) {
> +                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellBcfgHiiHandle, L"bcfg", Count);
> +                ShellStatus = SHELL_INVALID_PARAMETER;
> +              } else {
> +                CurrentParam = ShellCommandLineGetRawValue (Package, ++ParamNumber);
> +                if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber (CurrentParam, TRUE, FALSE)) {
> +                  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
> +                  ShellStatus = SHELL_INVALID_PARAMETER;
> +                } else {
> +                  Status = ShellConvertStringToUint64 (CurrentParam, &Intermediate, TRUE, FALSE);
> +                  CurrentOperation.HandleIndex = (UINT16)Intermediate;
> +                }
> +              }
> +            }
> +          }
>          } else {
>            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", CurrentParam);
>            ShellStatus = SHELL_INVALID_PARAMETER;
> @@ -1451,6 +1793,12 @@ ShellCommandRunBcfg (
>              (BOOLEAN)(CurrentOperation.Type == BcfgTypeAddp),
>              CurrentOperation.HandleIndex);
>            break;
> +        case   BcfgTypeMod:
> +        case   BcfgTypeModf:
> +        case   BcfgTypeModp:
> +        case   BcfgTypeModh:
> +          ShellStatus = BcfgMod (&CurrentOperation, Count);
> +          break;
>          case   BcfgTypeOpt:
>            ShellStatus = BcfgAddOpt(
>              CurrentOperation.OptData,
> diff --git a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
> index 44c8b7e..88b96ea 100644
> --- a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
> +++ b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
> @@ -1,7 +1,7 @@
>  ##  @file
>  #  Provides shell install1 functions
>  #
> -#  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved. <BR>
> +#  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved. <BR>
>  #
>  #  This program and the accompanying materials
>  #  are licensed and made available under the terms and conditions of the BSD License
> @@ -41,6 +41,7 @@ [LibraryClasses]
>    UefiBootServicesTableLib
>    SortLib
>    PrintLib
> +  UefiBootManagerLib
>
>  [Guids]
>    gShellBcfgHiiGuid             ## SOMETIMES_CONSUMES ## HII
> diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc
> index 5c01933..a87428a 100644
> --- a/ShellPkg/ShellPkg.dsc
> +++ b/ShellPkg/ShellPkg.dsc
> @@ -55,6 +55,14 @@ [LibraryClasses.common]
>    BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
>    IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>
> +  UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> +  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> +  TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
> +  PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> +  DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
> +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> +  ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf
> +
>  [LibraryClasses.ARM]
>    #
>    # It is not possible to prevent the ARM compiler for generic intrinsic functions.
> --
> 2.9.0.windows.1
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


  parent reply	other threads:[~2017-03-01  7:32 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-27  7:50 [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification functionality Ruiyu Ni
2017-02-28  3:08 ` Ni, Ruiyu
2017-03-01  7:32 ` Ard Biesheuvel [this message]
2017-03-01  7:58   ` Ni, Ruiyu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKv+Gu9Lsdpeah=t70RbeZqoNxbjfdTJC62ydBJ49jWDfdr-JA@mail.gmail.com' \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox