From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=ray.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 7A0A7202E5315 for ; Mon, 18 Feb 2019 00:36:41 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Feb 2019 00:36:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,384,1544515200"; d="scan'208";a="139482353" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga001.jf.intel.com with ESMTP; 18 Feb 2019 00:36:40 -0800 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 18 Feb 2019 00:36:39 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.102]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.253]) with mapi id 14.03.0415.000; Mon, 18 Feb 2019 16:36:37 +0800 From: "Ni, Ray" To: "Gao, Zhichao" , "edk2-devel@lists.01.org" CC: "Gao, Liming" Thread-Topic: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib Thread-Index: AQHUx1xg2DsS0SmMvU6eG0DVj4zKYKXlO/Sw Date: Mon, 18 Feb 2019 08:36:37 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com> References: <20190218073251.1272-1-zhichao.gao@intel.com> <20190218073251.1272-3-zhichao.gao@intel.com> In-Reply-To: <20190218073251.1272-3-zhichao.gao@intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Feb 2019 08:36:41 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ray Ni > -----Original Message----- > From: Gao, Zhichao > Sent: Monday, February 18, 2019 3:33 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ray ; Gao, Liming > Subject: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of > ResetSystemLib >=20 > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1461 >=20 > For now there is no ResetSystemLib instance that can be linked against > Runtime driver. And it's improper to extend the existing DxeResetSystemLi= b > to support Runtime driver because no one converts gRT when entering RT > phase. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Zhichao Gao > Cc: Ray Ni > Cc: Liming Gao > --- > .../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 >=20 > 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.
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 > +#include > +#include > +#include > +#include > + > +EFI_EVENT mRuntimeResetSystemLibVirtualAddressChange= Event; > +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 co= ld > 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 wa= rm > 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 sh= ut > 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 immediate= ly. > + > + 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, EfiResetWar= m, > or EfiResetShutdown > + the data buffer starts with a Null-terminate= d string, optionally > + followed by additional binary data. The stri= ng is a description > + that the caller may use to further indicate = the reason for the > + system reset. ResetData is only valid if Res= etStatus is > something > + other than EFI_SUCCESS unless the ResetType = is > EfiResetPlatformSpecific > + where a minimum amount of ResetData is alway= s 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 invoke= d. > + @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 =3D gRT; > + > + // > + // Register notify function for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE > // > + Status =3D 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 clo= ses > related events. > + It will ASSERT() if that related operation fails and it will always re= turn > 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 !=3D NULL); > + Status =3D 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.
# # 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 =3D 0x00010005 > + BASE_NAME =3D RuntimeResetSystemLib > + MODULE_UNI_FILE =3D RuntimeResetSystemLib.uni > + FILE_GUID =3D DD5D0821-F343-4C85-9CD9-54B3C1A19CE= A > + MODULE_TYPE =3D DXE_RUNTIME_DRIVER > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D ResetSystemLib|DXE_RUNTIME_DRIVER > + > + CONSTRUCTOR =3D RuntimeResetSystemLibConstruct > + DESTRUCTOR =3D RuntimeResetSystemLibDeconstruct > + > + > +# > +# The following information is for reference only and not required by th= e > build tools. > +# > +# VALID_ARCHITECTURES =3D 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.
// > +// 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