For new added RuntimeResetSystemLib.inf, please add it into MdeModulePkg.dsc and verify its build.
>-----Original Message----- >From: Ni, Ray >Sent: Monday, February 18, 2019 4:37 PM >To: Gao, Zhichao <zhichao....@intel.com>; edk2-devel@lists.01.org >Cc: Gao, Liming <liming....@intel.com> >Subject: RE: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of >ResetSystemLib > >Reviewed-by: Ray Ni <ray...@intel.com> > >> -----Original Message----- >> From: Gao, Zhichao <zhichao....@intel.com> >> Sent: Monday, February 18, 2019 3:33 PM >> To: edk2-devel@lists.01.org >> Cc: Ni, Ray <ray...@intel.com>; Gao, Liming <liming....@intel.com> >> Subject: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of >> ResetSystemLib >> >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1461 >> >> For now there is no ResetSystemLib instance that can be linked against >> Runtime driver. And it's improper to extend the existing DxeResetSystemLib >> to support Runtime driver because no one converts gRT when entering RT >> phase. >> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Zhichao Gao <zhichao....@intel.com> >> Cc: Ray Ni <ray...@intel.com> >> Cc: Liming Gao <liming....@intel.com> >> --- >> .../RuntimeResetSystemLib/RuntimeResetSystemLib.c | 216 >> +++++++++++++++++++++ >> .../RuntimeResetSystemLib.inf | 50 +++++ >> .../RuntimeResetSystemLib.uni | 21 ++ >> 3 files changed, 287 insertions(+) >> create mode 100644 >> >MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib.c >> create mode 100644 >> MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib.i >> nf >> create mode 100644 >> >MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib.u >> ni >> >> diff --git >> >a/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .c >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .c >> new file mode 100644 >> index 0000000000..17826cd6a9 >> --- /dev/null >> +++ >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .c >> @@ -0,0 +1,216 @@ >> +/** @file >> + DXE Reset System Library instance that calls gRT->ResetSystem(). >> + >> + Copyright (c) 2017 - 2019, 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 which 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. >> + >> +**/ >> + >> +#include <PiDxe.h> >> +#include <Library/ResetSystemLib.h> >> +#include <Library/UefiRuntimeServicesTableLib.h> >> +#include <Library/UefiBootServicesTableLib.h> >> +#include <Library/DebugLib.h> >> + >> +EFI_EVENT >mRuntimeResetSystemLibVirtualAddressChangeEvent; >> +EFI_RUNTIME_SERVICES *mInternalRT; >> + >> +/** >> + This function causes a system-wide reset (cold reset), in which >> + all circuitry within the system returns to its initial state. This >> +type of reset >> + is asynchronous to system operation and operates without regard to >> + cycle boundaries. >> + >> + If this function returns, it means that the system does not support cold >> reset. >> +**/ >> +VOID >> +EFIAPI >> +ResetCold ( >> + VOID >> + ) >> +{ >> + mInternalRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); } >> + >> +/** >> + This function causes a system-wide initialization (warm reset), in >> +which all processors >> + are set to their initial state. Pending cycles are not corrupted. >> + >> + If this function returns, it means that the system does not support warm >> reset. >> +**/ >> +VOID >> +EFIAPI >> +ResetWarm ( >> + VOID >> + ) >> +{ >> + mInternalRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL); } >> + >> +/** >> + This function causes the system to enter a power state equivalent >> + to the ACPI G2/S5 or G3 states. >> + >> + If this function returns, it means that the system does not support shut >> down reset. >> +**/ >> +VOID >> +EFIAPI >> +ResetShutdown ( >> + VOID >> + ) >> +{ >> + mInternalRT->ResetSystem (EfiResetShutdown, EFI_SUCCESS, 0, NULL); } >> + >> +/** >> + This function causes the system to enter S3 and then wake up >immediately. >> + >> + If this function returns, it means that the system does not support S3 >> feature. >> +**/ >> +VOID >> +EFIAPI >> +EnterS3WithImmediateWake ( >> + VOID >> + ) >> +{ >> +} >> + >> +/** >> + This function causes a systemwide reset. The exact type of the reset >> +is >> + defined by the EFI_GUID that follows the Null-terminated Unicode >> +string passed >> + into ResetData. If the platform does not recognize the EFI_GUID in >> +ResetData >> + the platform must pick a supported reset type to perform.The platform >> +may >> + optionally log the parameters from any non-normal reset that occurs. >> + >> + @param[in] DataSize The size, in bytes, of ResetData. >> + @param[in] ResetData The data buffer starts with a Null-terminated >> string, >> + followed by the EFI_GUID. >> +**/ >> +VOID >> +EFIAPI >> +ResetPlatformSpecific ( >> + IN UINTN DataSize, >> + IN VOID *ResetData >> + ) >> +{ >> + mInternalRT->ResetSystem (EfiResetPlatformSpecific, EFI_SUCCESS, >> +DataSize, ResetData); } >> + >> +/** >> + The ResetSystem function resets the entire platform. >> + >> + @param[in] ResetType The type of reset to perform. >> + @param[in] ResetStatus The status code for the reset. >> + @param[in] DataSize The size, in bytes, of ResetData. >> + @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, >> or EfiResetShutdown >> + the data buffer starts with a Null-terminated >> string, >optionally >> + followed by additional binary data. The string >> is a description >> + that the caller may use to further indicate the >> reason for the >> + system reset. ResetData is only valid if >> ResetStatus is >> something >> + other than EFI_SUCCESS unless the ResetType is >> EfiResetPlatformSpecific >> + where a minimum amount of ResetData is always >> required. >> +**/ >> +VOID >> +EFIAPI >> +ResetSystem ( >> + IN EFI_RESET_TYPE ResetType, >> + IN EFI_STATUS ResetStatus, >> + IN UINTN DataSize, >> + IN VOID *ResetData OPTIONAL >> + ) >> +{ >> + mInternalRT->ResetSystem (ResetType, ResetStatus, DataSize, >> +ResetData); } >> + >> +/** >> + Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. >> + >> + @param Event Event whose notification function is being invoked. >> + @param Context Pointer to the notification function's context >> + >> +**/ >> +VOID >> +EFIAPI >> +RuntimeResetSystemLibVirtualAddressChange ( >> + IN EFI_EVENT Event, >> + IN VOID *Context >> + ) >> +{ >> + mInternalRT->ConvertPointer (0, (VOID **) &mInternalRT); } >> + >> +/** >> + The constructor function of Runtime Reset System Lib. >> + >> + This function allocates memory for extended status code data, caches >> + the report status code service, and registers events. >> + >> + @param ImageHandle The firmware allocated handle for the EFI image. >> + @param SystemTable A pointer to the EFI System Table. >> + >> + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +RuntimeResetSystemLibConstruct ( >> + IN EFI_HANDLE ImageHandle, >> + IN EFI_SYSTEM_TABLE *SystemTable >> + ) >> +{ >> + EFI_STATUS Status; >> + >> + // >> + // Library should not use the gRT directly, for it may be converted by >> other >> library instance. >> + // >> + mInternalRT = gRT; >> + >> + // >> + // Register notify function for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE >> // >> + Status = gBS->CreateEventEx ( >> + EVT_NOTIFY_SIGNAL, >> + TPL_NOTIFY, >> + RuntimeResetSystemLibVirtualAddressChange, >> + NULL, >> + &gEfiEventVirtualAddressChangeGuid, >> + &mRuntimeResetSystemLibVirtualAddressChangeEvent >> + ); >> + ASSERT_EFI_ERROR (Status); >> + >> + return EFI_SUCCESS; >> +} >> + >> +/** >> + The Deconstructor function of Runtime Reset System Lib. >> + >> + The destructor function frees memory allocated by constructor, and >closes >> related events. >> + It will ASSERT() if that related operation fails and it will always return >> EFI_SUCCESS. >> + >> + @param ImageHandle The firmware allocated handle for the EFI image. >> + @param SystemTable A pointer to the EFI System Table. >> + >> + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. >> + >> +**/ >> +EFI_STATUS >> +EFIAPI >> +RuntimeResetSystemLibDeconstruct ( >> + IN EFI_HANDLE ImageHandle, >> + IN EFI_SYSTEM_TABLE *SystemTable >> + ) >> +{ >> + EFI_STATUS Status; >> + >> + ASSERT (gBS != NULL); >> + Status = gBS->CloseEvent >> + (mRuntimeResetSystemLibVirtualAddressChangeEvent); >> + ASSERT_EFI_ERROR (Status); >> + >> + return EFI_SUCCESS; >> +} >> diff --git >> >a/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .inf >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .inf >> new file mode 100644 >> index 0000000000..0a43b2827e >> --- /dev/null >> +++ >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .i >> +++ nf >> @@ -0,0 +1,50 @@ >> +## @file >> +# Runtime Reset System Library instance that calls gRT->ResetSystem(). >> +# >> +# Copyright (c) 2017 - 2019, 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 # which 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. >> +# >> +## >> + >> +[Defines] >> + INF_VERSION = 0x00010005 >> + BASE_NAME = RuntimeResetSystemLib >> + MODULE_UNI_FILE = RuntimeResetSystemLib.uni >> + FILE_GUID = DD5D0821-F343-4C85-9CD9-54B3C1A19CEA >> + MODULE_TYPE = DXE_RUNTIME_DRIVER >> + VERSION_STRING = 1.0 >> + LIBRARY_CLASS = ResetSystemLib|DXE_RUNTIME_DRIVER >> + >> + CONSTRUCTOR = RuntimeResetSystemLibConstruct >> + DESTRUCTOR = RuntimeResetSystemLibDeconstruct >> + >> + >> +# >> +# The following information is for reference only and not required by the >> build tools. >> +# >> +# VALID_ARCHITECTURES = IA32 X64 EBC >> +# >> + >> +[Sources] >> + RuntimeResetSystemLib.c >> + >> +[Packages] >> + MdePkg/MdePkg.dec >> + MdeModulePkg/MdeModulePkg.dec >> + >> +[LibraryClasses] >> + UefiRuntimeServicesTableLib >> + UefiBootServicesTableLib >> + DebugLib >> + >> +[Guids] >> + gEfiEventVirtualAddressChangeGuid ## CONSUMES ## Event >> + >> +[Depex] >> + gEfiResetArchProtocolGuid >> diff --git >> >a/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .uni >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .uni >> new file mode 100644 >> index 0000000000..e560643c10 >> --- /dev/null >> +++ >> >b/MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib >> .u >> +++ ni >> @@ -0,0 +1,21 @@ >> +// /** @file >> +// Runtime Reset System Library instance that calls gRT->ResetSystem(). >> +// >> +// Runtime Reset System Library instance that calls gRT->ResetSystem(). >> +// >> +// Copyright (c) 2019, 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 // which >> +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. >> +// >> +// **/ >> + >> + >> +#string STR_MODULE_ABSTRACT #language en-US "Runtime Reset >> System Library instance that calls gRT->ResetSystem()" >> + >> +#string STR_MODULE_DESCRIPTION #language en-US "Runtime Reset >> System Library instance that calls gRT->ResetSystem()." >> + >> -- >> 2.16.2.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel