MdeModulePkg/ResetSystemPei: Add reset notifications in PEI

The Reset Notification protocol is added in UEFI spec to support
reset notification mechanism in the DXE phase.
This patch adds similar EDKII specific Reset Notification PPI to PEI
phase to provide the same support.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bret Barkelew <Bret.Barkelew@microsoft.com>
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
Bret Barkelew 2018-01-31 18:31:40 -08:00 committed by Ruiyu Ni
parent 052c98ce24
commit ce2697abeb
8 changed files with 65 additions and 11 deletions

View File

@ -3,9 +3,9 @@
for ResetSystem(). A reset filter evaluates the parameters passed to
ResetSystem() and converts a ResetType of EfiResetPlatformSpecific to a
non-platform specific reset type. The registered filters are processed before
EDKII_PLATFORM_SPECIFIC_RESET_HANDLER_PPI handlers.
EDKII_PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI handlers.
Copyright (c) 2017 Intel Corporation. All rights reserved.<BR>
Copyright (c) 2017 - 2018 Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at

View File

@ -1,9 +1,9 @@
/** @file
This PPI provides services to register a platform specific handler for
ResetSystem(). The registered handlers are processed after
EDKII_PLATFORM_SPECIFIC_RESET_FILTER_PPI notifications.
EDKII_PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI notifications.
Copyright (c) 2017 Intel Corporation. All rights reserved.<BR>
Copyright (c) 2017 - 2018 Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at

View File

@ -0,0 +1,32 @@
/** @file
This PPI provides services to register a platform specific notification callback for
ResetSystem(). The registered handlers are processed after
EDKII_PLATFORM_SPECIFIC_RESET_FILTER_PPI notifications and before
EDKII_PLATFORM_SPECIFIC_RESET_HANDLER_PPI notifications.
Copyright (c) 2017 - 2018 Intel Corporation. All rights reserved.<BR>
Copyright (c) 2017 Microsoft Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI_H_
#define _PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI_H_
#include <Protocol/ResetNotification.h>
#define EDKII_PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI_GUID \
{ 0xe09f355d, 0xdae8, 0x4910, { 0xb1, 0x4a, 0x92, 0x78, 0x0f, 0xdc, 0xf7, 0xcb } }
typedef EFI_RESET_NOTIFICATION_PROTOCOL EDKII_PLATFORM_SPECIFIC_RESET_NOTIFICATION_PPI;
extern EFI_GUID gEdkiiPlatformSpecificResetNotificationPpiGuid;
#endif

View File

@ -450,6 +450,9 @@
## Include/Ppi/PlatformSpecificResetFilter.h
gEdkiiPlatformSpecificResetFilterPpiGuid = { 0x8c9f4de3, 0x7b90, 0x47ef, { 0x93, 0x8, 0x28, 0x7c, 0xec, 0xd6, 0x6d, 0xe8 } }
## Include/Ppi/PlatformSpecificResetNotification.h
gEdkiiPlatformSpecificResetNotificationPpiGuid = { 0xe09f355d, 0xdae8, 0x4910, { 0xb1, 0x4a, 0x92, 0x78, 0xf, 0xdc, 0xf7, 0xcb } }
## Include/Ppi/PlatformSpecificResetHandler.h
gEdkiiPlatformSpecificResetHandlerPpiGuid = { 0x75cf14ae, 0x3441, 0x49dc, { 0xaa, 0x10, 0xbb, 0x35, 0xa7, 0xba, 0x8b, 0xab } }
@ -1431,8 +1434,8 @@
# @Prompt String FPDT Record Enable Only
gEfiMdeModulePkgTokenSpaceGuid.PcdEdkiiFpdtStringRecordEnableOnly|FALSE|BOOLEAN|0x00000109
## Indicates the allowable maximum number of Reset Filters or Reset Handlers in PEI phase.
# @Prompt Maximum Number of PEI Reset Filters or Reset Handlers.
## Indicates the allowable maximum number of Reset Filters, Reset Notifications or Reset Handlers in PEI phase.
# @Prompt Maximum Number of PEI Reset Filters, Reset Notifications or Reset Handlers.
gEfiMdeModulePkgTokenSpaceGuid.PcdMaximumPeiResetNotifies|0x10|UINT32|0x0000010A
[PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]

View File

@ -1059,9 +1059,10 @@
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdCapsuleMax_HELP #language en-US "CapsuleMax value in capsule report variable."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdMaximumPeiResetNotifies_PROMPT #language en-US "Maximum Number of PEI Reset Filters or Reset Handlers."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdMaximumPeiResetNotifies_PROMPT #language en-US "Maximum Number of PEI Reset Filters, Reset Notifications or Reset Handlers."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdMaximumPeiResetNotifies_HELP #language en-US "Indicates the allowable maximum number of Reset Filters or Reset Handlers in PEI phase."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdMaximumPeiResetNotifies_HELP #language en-US "Indicates the allowable maximum number of Reset Filters, <BR>\n"
"Reset Notifications or Reset Handlers in PEI phase."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdRecoveryFileName_PROMPT #language en-US "Recover file name in PEI phase"

View File

@ -25,6 +25,7 @@ EFI_PEI_RESET2_PPI mPpiReset2 = {
EFI_GUID *mProcessingOrder[] = {
&gEdkiiPlatformSpecificResetFilterPpiGuid,
&gEdkiiPlatformSpecificResetNotificationPpiGuid,
&gEdkiiPlatformSpecificResetHandlerPpiGuid
};
@ -36,6 +37,14 @@ RESET_FILTER_INSTANCE mResetFilter = {
&gEdkiiPlatformSpecificResetFilterPpiGuid
};
RESET_FILTER_INSTANCE mResetNotification = {
{
RegisterResetNotify,
UnregisterResetNotify
},
&gEdkiiPlatformSpecificResetNotificationPpiGuid
};
RESET_FILTER_INSTANCE mResetHandler = {
{
RegisterResetNotify,
@ -55,6 +64,11 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListReset[] = {
&gEdkiiPlatformSpecificResetFilterPpiGuid,
&mResetFilter.ResetFilter
},
{
EFI_PEI_PPI_DESCRIPTOR_PPI,
&gEdkiiPlatformSpecificResetNotificationPpiGuid,
&mResetNotification.ResetFilter
},
{
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
&gEdkiiPlatformSpecificResetHandlerPpiGuid,
@ -101,6 +115,7 @@ RegisterResetNotify (
ResetFilter = (RESET_FILTER_INSTANCE *) This;
ASSERT (CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetFilterPpiGuid) ||
CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetNotificationPpiGuid) ||
CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetHandlerPpiGuid)
);
@ -187,6 +202,7 @@ UnregisterResetNotify (
ResetFilter = (RESET_FILTER_INSTANCE *)This;
ASSERT (CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetFilterPpiGuid) ||
CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetNotificationPpiGuid) ||
CompareGuid (ResetFilter->Guid, &gEdkiiPlatformSpecificResetHandlerPpiGuid)
);

View File

@ -21,6 +21,7 @@
#include <Ppi/Reset2.h>
#include <Ppi/PlatformSpecificResetFilter.h>
#include <Ppi/PlatformSpecificResetNotification.h>
#include <Ppi/PlatformSpecificResetHandler.h>
#include <Library/BaseLib.h>

View File

@ -48,9 +48,10 @@
ReportStatusCodeLib
[Ppis]
gEfiPeiReset2PpiGuid ## PRODUCES
gEdkiiPlatformSpecificResetFilterPpiGuid ## PRODUCES
gEdkiiPlatformSpecificResetHandlerPpiGuid ## PRODUCES
gEfiPeiReset2PpiGuid ## PRODUCES
gEdkiiPlatformSpecificResetFilterPpiGuid ## PRODUCES
gEdkiiPlatformSpecificResetHandlerPpiGuid ## PRODUCES
gEdkiiPlatformSpecificResetNotificationPpiGuid ## PRODUCES
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaximumPeiResetNotifies