From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 16223211F888A for ; Fri, 29 Jun 2018 05:40:49 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C3C980125CE; Fri, 29 Jun 2018 12:40:48 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-43.rdu2.redhat.com [10.10.120.43]) by smtp.corp.redhat.com (Postfix) with ESMTP id 903262026D68; Fri, 29 Jun 2018 12:40:47 +0000 (UTC) To: Ruiyu Ni , edk2-devel@lists.01.org Cc: Michael Turner References: <20180629060344.105716-1-ruiyu.ni@intel.com> <20180629060344.105716-2-ruiyu.ni@intel.com> From: Laszlo Ersek Message-ID: <0d0ca9c2-88fd-a69d-b22e-66a60cd37bee@redhat.com> Date: Fri, 29 Jun 2018 14:40:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180629060344.105716-2-ruiyu.ni@intel.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 29 Jun 2018 12:40:48 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 29 Jun 2018 12:40:48 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lersek@redhat.com' RCPT:'' Subject: Re: [PATCH v2 1/2] MdeModulePkg/UefiBootManagerLib: new APIs for ultimate boot failure X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jun 2018 12:40:49 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Hi Ray, thanks for this patch; I only have a request for updating a comment: On 06/29/18 08:03, Ruiyu Ni wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=982 > > When no boot option could be launched including platform recovery > options and options pointing to applications built into firmware > volumes, a platform callback registered through > EfiBootManagerRegisterUnableToBootHandler() is called. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Sean Brogan > Cc: Michael Turner > Cc: Laszlo Ersek > Cc: Sunny Wang > --- > MdeModulePkg/Include/Library/UefiBootManagerLib.h | 48 +++++++++++++++++++++++ > MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 41 +++++++++++++++++++ > 2 files changed, 89 insertions(+) > > diff --git a/MdeModulePkg/Include/Library/UefiBootManagerLib.h b/MdeModulePkg/Include/Library/UefiBootManagerLib.h > index bfc0cb86f8..453893e030 100644 > --- a/MdeModulePkg/Include/Library/UefiBootManagerLib.h > +++ b/MdeModulePkg/Include/Library/UefiBootManagerLib.h > @@ -800,4 +800,52 @@ EFIAPI > EfiBootManagerDispatchDeferredImages ( > VOID > ); > + > +/** > + The function is called when no boot option could be launched, > + including platform recovery options and options pointing to applications > + built into firmware volumes. > + > + The platform may register this function to inform the user about the above fact. > + If this function returns, BDS core attempts to enter an infinite loop of pulling > + up the Boot Manager Menu (if the platform includes the Boot Manager Menu). > + If the Boot Manager Menu is unavailable, BDS will hang. > +**/ > +typedef > +VOID > +(EFIAPI *EFI_BOOT_MANAGER_UNABLE_TO_BOOT) ( > + VOID > + ); > + > +/** > + Register the callback function when no boot option could be launched, > + including platform recovery options and options pointing to applications > + built into firmware volumes. > + > + @param Handler The callback function. > +**/ > +VOID > +EFIAPI > +EfiBootManagerRegisterUnableToBootHandler ( > + EFI_BOOT_MANAGER_UNABLE_TO_BOOT Handler > + ); > + > +/** > + The function is called when no boot option could be launched, > + including platform recovery options and options pointing to applications > + built into firmware volumes. > + > + If this function returns, BDS core attempts to enter an infinite loop of pulling > + up the Boot Manager Menu (if the platform includes the Boot Manager Menu). > + If the Boot Manager Menu is unavailable, BDS will hang. This comment paragraph should state the following: If this function returns EFI_UNSUPPORTED, BDS core attempts to enter an infinite loop of pulling up the Boot Manager Menu (if the platform includes the Boot Manager Menu). If the Boot Manager Menu is unavailable, BDS will hang. If this function returns EFI_SUCCESS, BDS will hang immediately. The same update should be done to the "BmBoot.c" file, below. With this update: Reviewed-by: Laszlo Ersek Thanks! Laszlo > + > + @retval EFI_SUCCESS The unable-to-boot callback is called successfully. > + @retval EFI_UNSUPPORTED There is no unable-to-boot callback registered. > +**/ > +EFI_STATUS > +EFIAPI > +EfiBootManagerUnableToBoot ( > + VOID > + ); > + > #endif > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > index 6a23477eb8..e59d790122 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > @@ -19,6 +19,7 @@ EFI_RAM_DISK_PROTOCOL *mRamDisk = NULL; > > EFI_BOOT_MANAGER_REFRESH_LEGACY_BOOT_OPTION mBmRefreshLegacyBootOption = NULL; > EFI_BOOT_MANAGER_LEGACY_BOOT mBmLegacyBoot = NULL; > +EFI_BOOT_MANAGER_UNABLE_TO_BOOT mBmUnableToBoot = NULL; > > /// > /// This GUID is used for an EFI Variable that stores the front device pathes > @@ -2461,3 +2462,43 @@ EfiBootManagerGetBootManagerMenu ( > } > } > > +/** > + Register the callback function when no boot option could be launched, > + including platform recovery options and options pointing to applications > + built into firmware volumes. > + > + @param Handler The callback function. > +**/ > +VOID > +EFIAPI > +EfiBootManagerRegisterUnableToBootHandler ( > + EFI_BOOT_MANAGER_UNABLE_TO_BOOT Handler > + ) > +{ > + mBmUnableToBoot = Handler; > +} > + > +/** > + The function is called when no boot option could be launched, > + including platform recovery options and options pointing to applications > + built into firmware volumes. > + > + If this function returns, BDS core attempts to enter an infinite loop of pulling > + up the Boot Manager Menu (if the platform includes the Boot Manager Menu). > + If the Boot Manager Menu is unavailable, BDS will hang. > + > + @retval EFI_SUCCESS The unable-to-boot callback is called successfully. > + @retval EFI_UNSUPPORTED There is no unable-to-boot callback registered. > +**/ > +EFI_STATUS > +EFIAPI > +EfiBootManagerUnableToBoot ( > + VOID > + ) > +{ > + if (mBmUnableToBoot != NULL) { > + mBmUnableToBoot (); > + return EFI_SUCCESS; > + } > + return EFI_UNSUPPORTED; > +} >