From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (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 E8E60210D8507 for ; Tue, 3 Jul 2018 18:27:26 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jul 2018 18:27:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,306,1526367600"; d="scan'208";a="213228180" Received: from ray-dev.ccr.corp.intel.com (HELO [10.239.9.4]) ([10.239.9.4]) by orsmga004.jf.intel.com with ESMTP; 03 Jul 2018 18:27:25 -0700 To: Laszlo Ersek , "edk2-devel@lists.01.org" Cc: Anthony Perard , "Justen, Jordan L" References: <20180703063743.373172-1-ruiyu.ni@intel.com> <20180703063743.373172-4-ruiyu.ni@intel.com> From: "Ni, Ruiyu" Message-ID: Date: Wed, 4 Jul 2018 09:27:49 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: Subject: Re: [PATCH v3 3/7] OvmfPkg/PlatformBds: Implement PlatformBootManagerUnableToBoot 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: Wed, 04 Jul 2018 01:27:27 -0000 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 7/3/2018 11:37 PM, Laszlo Ersek wrote: > On 07/03/18 08:37, Ruiyu Ni wrote: >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Ruiyu Ni >> Cc: Jordan Justen >> Cc: Laszlo Ersek >> Cc: Ard Biesheuvel >> Cc: Anthony Perard >> Cc: Julien Grall >> --- >> .../Library/PlatformBootManagerLib/BdsPlatform.c | 61 +++++++++++++++++++++- >> 1 file changed, 60 insertions(+), 1 deletion(-) >> >> diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c >> index 57870cb856..e56ffc141a 100644 >> --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c >> +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c >> @@ -1,7 +1,7 @@ >> /** @file >> Platform BDS customizations. >> >> - Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
>> + Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
>> 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 >> @@ -1676,3 +1676,62 @@ PlatformBootManagerWaitCallback ( >> ); >> } >> >> +/** >> + 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 attempts to enter an infinite loop. >> +**/ >> +VOID >> +EFIAPI >> +PlatformBootManagerUnableToBoot ( >> + VOID >> + ) >> +{ >> + EFI_STATUS Status; >> + EFI_INPUT_KEY Key; >> + EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; >> + UINTN Index; >> + >> + // >> + // BootManagerMenu doesn't contain the correct information when return status is EFI_NOT_FOUND. >> + // > > Before you commit this patch, can you please rewrap this long comment, like this: > > // > // BootManagerMenu doesn't contain the correct information when return status > // is EFI_NOT_FOUND. > // Sure. > > With that: > > Reviewed-by: Laszlo Ersek > > Thank you! > Laszlo > >> + Status = EfiBootManagerGetBootManagerMenu (&BootManagerMenu); >> + if (EFI_ERROR (Status)) { >> + return; >> + } >> + // >> + // Normally BdsDxe does not print anything to the system console, but this is >> + // a last resort -- the end-user will likely not see any DEBUG messages >> + // logged in this situation. >> + // >> + // AsciiPrint() will NULL-check gST->ConOut internally. We check gST->ConIn >> + // here to see if it makes sense to request and wait for a keypress. >> + // >> + if (gST->ConIn != NULL) { >> + AsciiPrint ( >> + "%a: No bootable option or device was found.\n" >> + "%a: Press any key to enter the Boot Manager Menu.\n", >> + gEfiCallerBaseName, >> + gEfiCallerBaseName >> + ); >> + Status = gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &Index); >> + ASSERT_EFI_ERROR (Status); >> + ASSERT (Index == 0); >> + >> + // >> + // Drain any queued keys. >> + // >> + while (!EFI_ERROR (gST->ConIn->ReadKeyStroke (gST->ConIn, &Key))) { >> + // >> + // just throw away Key >> + // >> + } >> + } >> + >> + for (;;) { >> + EfiBootManagerBoot (&BootManagerMenu); >> + } >> +} >> + >> > -- Thanks, Ray