From: "Ni, Ruiyu" <ruiyu.ni@intel.com>
To: "Ni, Ruiyu" <ruiyu.ni@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "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: Tue, 28 Feb 2017 03:08:42 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5B8B7DE7@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20170227075002.322540-1-ruiyu.ni@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Thanks/Ray
> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Ruiyu Ni
> Sent: Monday, February 27, 2017 3:50 PM
> To: edk2-devel@lists.01.org
> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Chen, Chen A
> <chen.a.chen@intel.com>; chen881220 <ai_terran@foxmail.com>
> Subject: [edk2] [PATCH] ShellPkg/bcfg: Add Shell Spec 2.2 modification
> functionality
>
> 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>
> ---
> .../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.i
> +++ nf
> @@ -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
> tMan
> + agerLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> +
> +
> TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTem
> pl
> + ate.inf
> +
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanc
> eLi
> + bNull.inf
> +
> DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTabl
> + eLib.inf
> + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> +
> +
> ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseR
> ep
> + ortStatusCodeLibNull.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
next prev parent reply other threads:[~2017-02-28 3:08 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 [this message]
2017-03-01 7:32 ` Ard Biesheuvel
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=734D49CCEBEEF84792F5B80ED585239D5B8B7DE7@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