From: "Ni, Ruiyu" <ruiyu.ni@intel.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Laszlo Ersek <lersek@redhat.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"Carsey, Jaben" <jaben.carsey@intel.com>,
"Chen, Chen A" <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:58:00 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5B8BBB61@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <CAKv+Gu9Lsdpeah=t70RbeZqoNxbjfdTJC62ydBJ49jWDfdr-JA@mail.gmail.com>
Yes.
sorry about that!
Can you commit this change?
Thanks/Ray
> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
> Sent: Wednesday, March 1, 2017 3:33 PM
> To: Ni, Ruiyu <ruiyu.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>
> Cc: edk2-devel@lists.01.org; Carsey, Jaben <jaben.carsey@intel.com>; Chen,
> Chen A <chen.a.chen@intel.com>; chen881220 <ai_terran@foxmail.com>
> Subject: Re: [edk2] [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification
> functionality
>
> 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/UefiShellBcf
> gCommandLib.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/UefiBoo
> tManagerLib.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/UefiShellBcfg
> CommandLib.inf
> > IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
> >
> > +
> UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBoo
> tManagerLib.inf
> > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> > +
> TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTem
> plate.inf
> > +
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanc
> eLibNull.inf
> > +
> DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTabl
> eLib.inf
> > + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +
> ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseR
> eportStatusCodeLibNull.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
prev parent reply other threads:[~2017-03-01 7:58 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
2017-03-01 7:58 ` Ni, Ruiyu [this message]
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=734D49CCEBEEF84792F5B80ED585239D5B8BBB61@SHSMSX104.ccr.corp.intel.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