From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from hqemgate14.nvidia.com (hqemgate14.nvidia.com [216.228.121.143]) by mx.groups.io with SMTP id smtpd.web12.8776.1572889872637153395 for ; Mon, 04 Nov 2019 09:51:12 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=n1 header.b=aIJX6kVN; spf=pass (domain: nvidia.com, ip: 216.228.121.143, mailfrom: ashishsingha@nvidia.com) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate14.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Mon, 04 Nov 2019 09:51:18 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Mon, 04 Nov 2019 09:51:12 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Mon, 04 Nov 2019 09:51:12 -0800 Received: from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 4 Nov 2019 17:51:11 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Mon, 4 Nov 2019 17:51:11 +0000 Received: from ashishsingha-lnx.nvidia.com (Not Verified[10.28.48.147]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Mon, 04 Nov 2019 09:51:11 -0800 From: "Ashish Singhal" To: , , CC: Ashish Singhal Subject: [PATCH] MdeModulePkg/UefiBootManagerLib: Support skipping BM enumeration Date: Mon, 4 Nov 2019 10:51:09 -0700 Message-ID: <2a5e270f960f365c66a4b4f5f04a911cd451f31f.1572889483.git.ashishsingha@nvidia.com> X-Mailer: git-send-email 2.7.4 X-NVConfidentiality: public Return-Path: ashishsingha@nvidia.com MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1572889878; bh=bbnfWqBMCGwxG4REl/NWxObGK7QGCF253Q41g6wdFZk=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: X-NVConfidentiality:MIME-Version:Content-Type; b=aIJX6kVNd2ZAvcXiyx2UXyKwOHCapgkUZfoI+86TwqZ/RFjJaIvgj43tHqVv16l86 DuoTss/vIhen0ScXu81kc3eu3ApgEfkB2ZFHkmfw8uih3AWbgq+MNygMjTsbp8/1i0 b1YPcLeCPz/rUKhI8g5pHqSCFfGntglp8kc/veC9NikqWjSjguOovJgsJcMDS+/rCW PCFbCFNiFkq3F2+ImCeDNAZAmZmsMPGfU9ZXQ7wxS7BbkahKRU/GrPtBgIy2zPbYK9 HK6w4yvXy8jW6ySYFZ2ua1r3No0SamT5cc6ZDPZuyIxrJVf2mKYbCIUdlJvddTFHo5 miDx10SkiRWOg== Content-Type: text/plain Allow support for skipping auto enumeration of a BlockIO or SimpleFileSystem or LoadFile protocol based on a new protocol installed on the same handle. EdkiiSkipBmAutoEnumerate protocol has been added for that purpose. Signed-off-by: Ashish Singhal --- .../Include/Protocol/SkipBmAutoEnumerate.h | 25 ++++++++++++++ MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 40 +++++++++++++++++++++- .../Library/UefiBootManagerLib/InternalBm.h | 1 + .../UefiBootManagerLib/UefiBootManagerLib.inf | 1 + MdeModulePkg/MdeModulePkg.dec | 3 ++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 MdeModulePkg/Include/Protocol/SkipBmAutoEnumerate.h diff --git a/MdeModulePkg/Include/Protocol/SkipBmAutoEnumerate.h b/MdeModulePkg/Include/Protocol/SkipBmAutoEnumerate.h new file mode 100644 index 0000000..7efca7a --- /dev/null +++ b/MdeModulePkg/Include/Protocol/SkipBmAutoEnumerate.h @@ -0,0 +1,25 @@ +/** @file + Skip Boot Manager Auto Enumerate protocol header file. + + This is used to skip auto boot manager enumeration. This protocol can + be installed on any handle having BlockIo or SimpleFileSystem or LoadFile + protocol and UEFI boot manager would skip its enumeration. + +Copyright (c) 2019, NVIDIA Corporation. All rights reserved. + +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _SKIP_BM_AUTO_ENUMERATE_PROTOCOL_H_ +#define _SKIP_BM_AUTO_ENUMERATE_PROTOCOL_H_ + +/// +/// Global ID for the EDKII SKIP BM AUTO ENUMERATE Protocol. +/// +#define EDKII_SKIP_BM_AUTO_ENUMERATE_PROTOCOL_GUID \ + { 0x2733f321, 0x5a7e, 0x4178, { 0x86, 0xcc, 0x21, 0x65, 0xd2, 0x0c, 0xec, 0x1e }} + +extern EFI_GUID gEdkiiSkipBmAutoEnumerateProtocolGuid; + +#endif diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c index 760d764..7b5f176 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c @@ -2080,6 +2080,7 @@ BmEnumerateBootOptions ( UINTN HandleCount; EFI_HANDLE *Handles; EFI_BLOCK_IO_PROTOCOL *BlkIo; + VOID *SkipBmAutoEnumerate; UINTN Removable; UINTN Index; CHAR16 *Description; @@ -2111,6 +2112,18 @@ BmEnumerateBootOptions ( continue; } + Status = gBS->HandleProtocol ( + Handles[Index], + &gEdkiiSkipBmAutoEnumerateProtocolGuid, + (VOID **) &SkipBmAutoEnumerate + ); + if (!EFI_ERROR (Status)) { + // + // Skip if the file system handle supports a SkipBmAutoEnumerate protocol + // + continue; + } + // // Skip the logical partitions // @@ -2169,12 +2182,25 @@ BmEnumerateBootOptions ( &gEfiBlockIoProtocolGuid, (VOID **) &BlkIo ); - if (!EFI_ERROR (Status)) { + if (!EFI_ERROR (Status)) { // // Skip if the file system handle supports a BlkIo protocol, which we've handled in above // continue; } + + Status = gBS->HandleProtocol ( + Handles[Index], + &gEdkiiSkipBmAutoEnumerateProtocolGuid, + (VOID **) &SkipBmAutoEnumerate + ); + if (!EFI_ERROR (Status)) { + // + // Skip if the file system handle supports a SkipBmAutoEnumerate protocol + // + continue; + } + Description = BmGetBootDescription (Handles[Index]); BootOptions = ReallocatePool ( sizeof (EFI_BOOT_MANAGER_LOAD_OPTION) * (*BootOptionCount), @@ -2212,6 +2238,18 @@ BmEnumerateBootOptions ( &Handles ); for (Index = 0; Index < HandleCount; Index++) { + Status = gBS->HandleProtocol ( + Handles[Index], + &gEdkiiSkipBmAutoEnumerateProtocolGuid, + (VOID **) &SkipBmAutoEnumerate + ); + if (!EFI_ERROR (Status)) { + // + // Skip if the file system handle supports a SkipBmAutoEnumerate protocol + // + continue; + } + // // Ignore BootManagerMenu. its boot option will be created by EfiBootManagerGetBootManagerMenu(). // diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h index 027eb25..f95e58f 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h @@ -41,6 +41,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include #include #include diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf index ed6b467..40c668c 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf +++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf @@ -107,6 +107,7 @@ gEfiFormBrowser2ProtocolGuid ## SOMETIMES_CONSUMES gEfiRamDiskProtocolGuid ## SOMETIMES_CONSUMES gEfiDeferredImageLoadProtocolGuid ## SOMETIMES_CONSUMES + gEdkiiSkipBmAutoEnumerateProtocolGuid ## SOMETIMES_CONSUMES [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index d6bac97..64ef22a 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -604,6 +604,9 @@ ## Include/Protocol/PeCoffImageEmulator.h gEdkiiPeCoffImageEmulatorProtocolGuid = { 0x96f46153, 0x97a7, 0x4793, { 0xac, 0xc1, 0xfa, 0x19, 0xbf, 0x78, 0xea, 0x97 } } + ## Include/Protocol/SkipBmAutoEnumerate.h + gEdkiiSkipBmAutoEnumerateProtocolGuid = { 0x2733f321, 0x5a7e, 0x4178, { 0x86, 0xcc, 0x21, 0x65, 0xd2, 0x0c, 0xec, 0x1e } } + # # [Error.gEfiMdeModulePkgTokenSpaceGuid] # 0x80000001 | Invalid value provided. -- 2.7.4