From: "Ni, Ray" <ray.ni@intel.com>
To: "Wang, Sunny (HPS SW)" <sunnywang@hpe.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>,
"ashishsingha@nvidia.com" <ashishsingha@nvidia.com>,
"Wang, Jian J" <jian.j.wang@intel.com>,
"Wu, Hao A" <hao.a.wu@intel.com>,
"Gao, Zhichao" <zhichao.gao@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"afish@apple.com" <afish@apple.com>
Cc: "Spottswood, Jason" <jason.spottswood@hpe.com>
Subject: Re: [edk2-devel] [PATCH v7] MdeModulePkg: Add EDK2 Platform Boot Manager Protocol
Date: Tue, 24 Dec 2019 05:41:50 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C3A9F8F@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <DF4PR8401MB1307F12E8860037565816356A8290@DF4PR8401MB1307.NAMPRD84.PROD.OUTLOOK.COM>
Reviewed-by: Ray Ni <ray.ni@intel.com>
> -----Original Message-----
> From: Wang, Sunny (HPS SW) <sunnywang@hpe.com>
> Sent: Tuesday, December 24, 2019 12:44 PM
> To: devel@edk2.groups.io; ashishsingha@nvidia.com; Ni, Ray
> <ray.ni@intel.com>; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A
> <hao.a.wu@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Kinney,
> Michael D <michael.d.kinney@intel.com>; afish@apple.com
> Cc: Wang, Sunny (HPS SW) <sunnywang@hpe.com>; Spottswood, Jason
> <jason.spottswood@hpe.com>
> Subject: RE: [edk2-devel] [PATCH v7] MdeModulePkg: Add EDK2 Platform
> Boot Manager Protocol
>
> Looks good enough to me. Thanks for addressing my comments, Ashish.
> Reviewed-by: Sunny Wang <sunnywang@hpe.com>
>
> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Ashish Singhal
> Sent: Tuesday, December 24, 2019 10:58 AM
> To: devel@edk2.groups.io; ray.ni@intel.com; jian.j.wang@intel.com;
> hao.a.wu@intel.com; zhichao.gao@intel.com; michael.d.kinney@intel.com;
> afish@apple.com
> Cc: Ashish Singhal <ashishsingha@nvidia.com>
> Subject: [edk2-devel] [PATCH v7] MdeModulePkg: Add EDK2 Platform Boot
> Manager Protocol
>
> Add edk2 platform boot manager protocol which would have platform
> specific refreshes to the auto enumerated as well as NV boot options for the
> platform.
>
> Signed-off-by: Ashish Singhal <ashishsingha@nvidia.com>
> ---
> .../Include/Protocol/PlatformBootManager.h | 82
> ++++++++++++++++++++++
> MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 41 +++++++++--
> .../Library/UefiBootManagerLib/InternalBm.h | 2 +
> .../UefiBootManagerLib/UefiBootManagerLib.inf | 2 +
> MdeModulePkg/MdeModulePkg.dec | 4 ++
> 5 files changed, 124 insertions(+), 7 deletions(-) create mode 100644
> MdeModulePkg/Include/Protocol/PlatformBootManager.h
>
> diff --git a/MdeModulePkg/Include/Protocol/PlatformBootManager.h
> b/MdeModulePkg/Include/Protocol/PlatformBootManager.h
> new file mode 100644
> index 0000000..26b9ce4
> --- /dev/null
> +++ b/MdeModulePkg/Include/Protocol/PlatformBootManager.h
> @@ -0,0 +1,82 @@
> +/** @file
> +
> + Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef __PLATFORM_BOOT_MANAGER_PROTOCOL_H__
> +#define __PLATFORM_BOOT_MANAGER_PROTOCOL_H__
> +
> +#include <Library/UefiBootManagerLib.h>
> +
> +//
> +// Platform Boot Manager Protocol GUID value // #define
> +EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL_GUID \
> + { \
> + 0xaa17add4, 0x756c, 0x460d, { 0x94, 0xb8, 0x43, 0x88, 0xd7, 0xfb, 0x3e,
> 0x59 } \
> + }
> +
> +//
> +// Protocol interface structure
> +//
> +typedef struct _EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL
> +EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL;
> +
> +//
> +// Revision The revision to which the protocol interface adheres.
> +// All future revisions must be backwards compatible.
> +// If a future version is not back wards compatible it is not the same
> GUID.
> +//
> +#define EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL_REVISION
> 0x00000001
> +
> +//
> +// Function Prototypes
> +//
> +
> +/*
> + This function allows platform to refresh all boot options specific to
> +the platform. Within
> + this function, platform can make modifications to the auto enumerated
> +platform boot options
> + as well as NV boot options.
> +
> + @param[in const] BootOptions An array of auto enumerated
> platform boot options.
> + This array will be freed by caller upon successful
> + exit of this function and output array would be used.
> +
> + @param[in const] BootOptionsCount The number of elements in
> BootOptions.
> +
> + @param[out] UpdatedBootOptions An array of boot options that
> have been customized
> + for the platform on top of input boot options. This
> + array would be allocated by
> REFRESH_ALL_BOOT_OPTIONS
> + and would be freed by caller after consuming it.
> +
> + @param[out] UpdatedBootOptionsCount The number of elements in
> UpdatedBootOptions.
> +
> +
> + @retval EFI_SUCCESS Platform refresh to input BootOptions and
> + BootCount have been done.
> +
> + @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
> +
> + @retval EFI_INVALID_PARAMETER Input is not correct.
> +
> + @retval EFI_UNSUPPORTED Platform specific overrides are not
> supported.
> +*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *PLATFORM_BOOT_MANAGER_REFRESH_ALL_BOOT_OPTIONS) (
> + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions,
> + IN CONST UINTN BootOptionsCount,
> + OUT EFI_BOOT_MANAGER_LOAD_OPTION **UpdatedBootOptions,
> + OUT UINTN *UpdatedBootOptionsCount
> + );
> +
> +struct _EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL {
> + UINT64 Revision;
> + PLATFORM_BOOT_MANAGER_REFRESH_ALL_BOOT_OPTIONS
> RefreshAllBootOptions;
> +};
> +
> +extern EFI_GUID gEdkiiPlatformBootManagerProtocolGuid;
> +
> +#endif /* __PLATFORM_BOOT_MANAGER_PROTOCOL_H__ */
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> index 760d764..62c5b2dc 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> @@ -1,6 +1,7 @@
> /** @file
> Library functions which relates with booting.
>
> +Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>
> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -2258,12 +2259,15 @@
> EfiBootManagerRefreshAllBootOption (
> VOID
> )
> {
> - EFI_STATUS Status;
> - EFI_BOOT_MANAGER_LOAD_OPTION *NvBootOptions;
> - UINTN NvBootOptionCount;
> - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
> - UINTN BootOptionCount;
> - UINTN Index;
> + EFI_STATUS Status;
> + EFI_BOOT_MANAGER_LOAD_OPTION *NvBootOptions;
> + UINTN NvBootOptionCount;
> + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
> + UINTN BootOptionCount;
> + EFI_BOOT_MANAGER_LOAD_OPTION *UpdatedBootOptions;
> + UINTN UpdatedBootOptionCount;
> + UINTN Index;
> + EDKII_PLATFORM_BOOT_MANAGER_PROTOCOL *PlatformBootManager;
>
> //
> // Optionally refresh the legacy boot option @@ -2273,7 +2277,6 @@
> EfiBootManagerRefreshAllBootOption (
> }
>
> BootOptions = BmEnumerateBootOptions (&BootOptionCount);
> - NvBootOptions = EfiBootManagerGetLoadOptions (&NvBootOptionCount,
> LoadOptionTypeBoot);
>
> //
> // Mark the boot option as added by BDS by setting OptionalData to a
> special GUID @@ -2284,6 +2287,30 @@
> EfiBootManagerRefreshAllBootOption (
> }
>
> //
> + // Locate Platform Boot Options Protocol // Status =
> + gBS->LocateProtocol (&gEdkiiPlatformBootManagerProtocolGuid,
> + NULL,
> + (VOID **)&PlatformBootManager); if
> + (!EFI_ERROR (Status)) {
> + //
> + // If found, call platform specific refresh to all auto enumerated and NV
> + // boot options.
> + //
> + Status = PlatformBootManager->RefreshAllBootOptions ((CONST
> EFI_BOOT_MANAGER_LOAD_OPTION *)BootOptions,
> + (CONST UINTN)BootOptionCount,
> + &UpdatedBootOptions,
> + &UpdatedBootOptionCount);
> + if (!EFI_ERROR (Status)) {
> + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
> + BootOptions = UpdatedBootOptions;
> + BootOptionCount = UpdatedBootOptionCount;
> + }
> + }
> +
> + NvBootOptions = EfiBootManagerGetLoadOptions (&NvBootOptionCount,
> + LoadOptionTypeBoot);
> +
> + //
> // Remove invalid EFI boot options from NV
> //
> for (Index = 0; Index < NvBootOptionCount; Index++) { diff --git
> a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> index 027eb25..ac866ac 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> @@ -1,6 +1,7 @@
> /** @file
> BDS library definition, include the file and data structure
>
> +Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -41,6 +42,7 @@ SPDX-
> License-Identifier: BSD-2-Clause-Patent #include <Protocol/VariableLock.h>
> #include <Protocol/RamDisk.h> #include <Protocol/DeferredImageLoad.h>
> +#include <Protocol/PlatformBootManager.h>
>
> #include <Guid/MemoryTypeInformation.h> #include <Guid/FileInfo.h>
> diff --git
> a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> index ed6b467..cf59086 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> +++
> b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> @@ -5,6 +5,7 @@
> # manipulation, hotkey registration, UEFI boot, connect/disconnect, console
> # manipulation, driver health checking and etc.
> #
> +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> # (C)
> Copyright 2016 Hewlett Packard Enterprise Development LP<BR> # SPDX-
> License-Identifier: BSD-2-Clause-Patent @@ -107,6 +108,7 @@
> gEfiFormBrowser2ProtocolGuid ## SOMETIMES_CONSUMES
> gEfiRamDiskProtocolGuid ## SOMETIMES_CONSUMES
> gEfiDeferredImageLoadProtocolGuid ## SOMETIMES_CONSUMES
> + gEdkiiPlatformBootManagerProtocolGuid ## SOMETIMES_CONSUMES
>
> [Pcd]
>
> gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationC
> hange ## SOMETIMES_CONSUMES
> diff --git a/MdeModulePkg/MdeModulePkg.dec
> b/MdeModulePkg/MdeModulePkg.dec index 41b9e70..cc238e9 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -3,6 +3,7 @@
> # It also provides the definitions(including PPIs/PROTOCOLs/GUIDs and
> library classes) # and libraries instances, which are used for those modules.
> #
> +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> # Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> #
> Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR> # (C) Copyright 2016 -
> 2019 Hewlett Packard Enterprise Development LP<BR> @@ -609,6 +610,9
> @@
> ## Include/Protocol/PeCoffImageEmulator.h
> gEdkiiPeCoffImageEmulatorProtocolGuid = { 0x96f46153, 0x97a7, 0x4793,
> { 0xac, 0xc1, 0xfa, 0x19, 0xbf, 0x78, 0xea, 0x97 } }
>
> + ## Include/Protocol/PlatformBootManager.h
> + gEdkiiPlatformBootManagerProtocolGuid = { 0xaa17add4, 0x756c, 0x460d,
> + { 0x94, 0xb8, 0x43, 0x88, 0xd7, 0xfb, 0x3e, 0x59 } }
> +
> #
> # [Error.gEfiMdeModulePkgTokenSpaceGuid]
> # 0x80000001 | Invalid value provided.
> --
> 2.7.4
>
>
>
>
next prev parent reply other threads:[~2019-12-24 5:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-24 2:57 [PATCH v7] MdeModulePkg: Add EDK2 Platform Boot Manager Protocol Ashish Singhal
2019-12-24 4:43 ` [edk2-devel] " Wang, Sunny (HPS SW)
2019-12-24 5:41 ` Ni, Ray [this message]
2019-12-26 3:42 ` Ashish Singhal
2020-01-02 2:05 ` Ni, Ray
2020-01-08 5:17 ` Ashish Singhal
2020-01-08 9:35 ` Wang, Jian J
2019-12-24 5:41 ` Ni, Ray
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=734D49CCEBEEF84792F5B80ED585239D5C3A9F8F@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