Do you have real requirement about the boot failure notify?
Have you considered to use report status handler?

Thanks,
Ray

> 在 2015年10月27日,23:18,El-Haj-Mahmoud, Samer <samer.el-haj-mahm...@hpe.com> 写道:
> 
> Reviewed-by: Samer El-Haj-Mahmoud <el...@hpe.com>
> 
> -----Original Message-----
> From: Wang, Sunny (HPS SW) 
> Sent: Tuesday, October 27, 2015 4:21 AM
> To: edk2-devel@lists.01.org
> Cc: El-Haj-Mahmoud, Samer <samer.el-haj-mahm...@hpe.com>; Wang, Sunny (HPS 
> SW) <sunnyw...@hpe.com>
> Subject: [PATCH] MdeModulePkg: Add a BDS platform hook function 
> PlatformBootManagerDefaultBootFail to PlatformBootManagerLib
> 
> Add a BDS platform hook function PlatformBootManagerDefaultBootFail to 
> PlatformBootManagerLib
> 
> Why we need this hook function :
> 1) According to UEFI 2.5 Section 3.4.3, the 3rd paragraph, It seems we need 
> to have a hook function (PlatformBootManagerDefaultBootFail) for platform 
> firmware to do platform action like recovering or setting to a known set of 
> boot options.
> 2) This hook function is similar to IntelFrameworkModulePkg's 
> PlatformBdsLib's PlatformBdsBootFail function which was used in several 
> platforms in EDK2, so it would be helpful for other platforms to change their 
> BDS platform library from IntelFrameworkModulePkg's PlatformBdsLib to 
> MdeModulePkg's PlatformBootManagerLib in the future.
> 
> Where we call/run this hook function:
> 1) According to UEFI 2.5 Section 3.1.1, the 5th paragraph, we need to present 
> a boot manager menu to the user for the successful boot attempt, so we only 
> call PlatformBootManagerDefaultBootFail when booting enumerated boot options 
> fails.
> 
> Reference:
> 1) UEFI 2.5 Section 3.4.3, the 3rd paragraph:
>    - It is expected that this default boot will load an operating system or a 
> maintenance utility. If this is an operating system setup program it is then 
> responsible for setting the requisite environment variables for subsequent 
> boots. The platform firmware may also decide to recover or set to a known set 
> of boot options.
> 2) UEFI 2.5 Section 3.1.1, the 5th paragraph:
>    - If the boot via Boot#### returns with a status of EFI_SUCCESS, platform 
> firmware supports boot manager menu, and if firmware is configured to boot in 
> an interactive mode, the boot manager will stop processing the BootOrder 
> variable and present a boot manager menu to the user.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> 
> Signed-off-by: Sunny Wang <sunnyw...@hpe.com>
> ---
> MdeModulePkg/Include/Library/PlatformBootManagerLib.h  | 15 +++++++++++++++
> .../PlatformBootManagerLibNull/PlatformBootManager.c   | 18 ++++++++++++++++++
> MdeModulePkg/Universal/BdsDxe/BdsEntry.c               | 18 ++++++++++++++++--
> .../PlatformBootManagerLib/PlatformBootManager.c       | 18 ++++++++++++++++++
> 4 files changed, 67 insertions(+), 2 deletions(-)
> 
> diff --git a/MdeModulePkg/Include/Library/PlatformBootManagerLib.h 
> b/MdeModulePkg/Include/Library/PlatformBootManagerLib.h
> index 5274503..974dcc5 100644
> --- a/MdeModulePkg/Include/Library/PlatformBootManagerLib.h
> +++ b/MdeModulePkg/Include/Library/PlatformBootManagerLib.h
> @@ -3,6 +3,7 @@
>   instances to support platform-specific behavior.
> 
> Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<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 @@ -59,4 +60,18 
> @@ PlatformBootManagerWaitCallback (
>   UINT16          TimeoutRemain
>   );
> 
> +/**
> +  Do the platform specific action after all the boot attempts are failed to 
> boot.
> +
> +  Such as:
> +    Print specific string
> +    Show the Boot Manager Menu
> +
> +**/
> +VOID
> +EFIAPI
> +PlatformBootManagerDefaultBootFail (
> +  VOID
> +  );
> +
> #endif
> diff --git 
> a/MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManager.c 
> b/MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManager.c
> index 1390e19..b9e5a71 100644
> --- a/MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManager.c
> +++ b/MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManage
> +++ r.c
> @@ -3,6 +3,7 @@
>   by IBV/OEM.
> 
> Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<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 @@ -65,3 +66,20 
> @@ PlatformBootManagerWaitCallback (  {
>   return;
> }
> +
> +/**
> +  Do the platform specific action after all the boot attempts are failed to 
> boot.
> +
> +  Such as:
> +    Print specific string
> +    Show the Boot Manager Menu
> +
> +**/
> +VOID
> +EFIAPI
> +PlatformBootManagerDefaultBootFail (
> +  VOID
> +  )
> +{
> +  return;
> +}
> diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c 
> b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> index c889892..729a220 100644
> --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> @@ -5,8 +5,8 @@
>   After DxeCore finish DXE phase, gEfiBdsArchProtocolGuid->BdsEntry will be 
> invoked
>   to enter BDS phase.
> 
> -(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>  Copyright 
> (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<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 @@ -532,6 +532,12 
> @@ DefaultBootBehavior (
>     //
>     // Show the Boot Manager Menu after successful boot
>     //
> +    // If the boot via Boot#### returns with a status of EFI_SUCCESS, 
> platform firmware 
> +    // supports boot manager menu, and if firmware is configured to boot in 
> an interactive 
> +    // mode, the boot manager will stop processing the BootOrder variable 
> and present a 
> +    // boot manager menu to the user.
> +    //                 -- UEFI 2.5 Section 3.1.1 Boot Manager Programming, 
> the 5th paragraph
> +    //
>     EfiBootManagerBoot (&BootManagerMenu);
>   } else {
>     EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); @@ -542,13 
> +548,21 @@ DefaultBootBehavior (
>     // devices followed by all fixed media devices. The order within each 
> group is undefined.
>     // These new default boot options are not saved to non volatile 
> storage.The boot manger
>     // will then attempt toboot from each boot option.
> -    //                            -- Chapter 3.3 Boot Manager Programming, 
> the 2nd paragraph
> +    //                   -- UEFI 2.4 Section 3.3 Boot Manager Programming, 
> the 2nd paragraph
>     //
>     EfiBootManagerConnectAll ();
>     BootOptions = BdsEnumerateBootOptions (&BootOptionCount);
> 
>     if (!BootAllBootOptions (BootOptions, BootOptionCount)) {
>       DEBUG ((EFI_D_ERROR, "[Bds]No bootable device!\n"));
> +      //
> +      // The platform firmware may decide to recover or set to a known set 
> of boot options.
> +      //
> +      PlatformBootManagerDefaultBootFail ();
> +    } else {
> +      //
> +      // Show the Boot Manager Menu after successful boot.
> +      //
>       EfiBootManagerBoot (&BootManagerMenu);
>     }
>   }
> diff --git a/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c 
> b/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> index e944105..db973c0 100644
> --- a/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> +++ b/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> @@ -3,6 +3,7 @@
>   by IBV/OEM.
> 
> Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<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 @@ -280,3 +281,20 
> @@ PlatformBootManagerWaitCallback (
>     0
>     );
> }
> +
> +/**
> +  Do the platform specific action after all the boot attempts are failed to 
> boot.
> +
> +  Such as:
> +    Print specific string
> +    Show the Boot Manager Menu
> +
> +**/
> +VOID
> +EFIAPI
> +PlatformBootManagerDefaultBootFail (
> +  VOID
> +  )
> +{
> +  return;
> +}
> --
> 2.5.0.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to