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.115; helo=mga14.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 26662201B03FC for ; Mon, 18 Feb 2019 00:45:26 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Feb 2019 00:45:26 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,384,1544515200"; d="scan'208";a="147712621" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 18 Feb 2019 00:45:26 -0800 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 18 Feb 2019 00:45:26 -0800 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 18 Feb 2019 00:45:25 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.102]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.174]) with mapi id 14.03.0415.000; Mon, 18 Feb 2019 16:45:24 +0800 From: "Gao, Liming" To: "Ni, Ray" , "Gao, Zhichao" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib Thread-Index: AQHUx1xgUMGzoE9VMUKy5h912dD+8aXktUqAgACIXoA= Date: Mon, 18 Feb 2019 08:45:24 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3E092C@SHSMSX104.ccr.corp.intel.com> References: <20190218073251.1272-1-zhichao.gao@intel.com> <20190218073251.1272-3-zhichao.gao@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US 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:45:27 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable For new added RuntimeResetSystemLib.inf, please add it into MdeModulePkg.ds= c and verify its build.=20 >-----Original Message----- >From: Ni, Ray >Sent: Monday, February 18, 2019 4:37 PM >To: Gao, Zhichao ; edk2-devel@lists.01.org >Cc: Gao, Liming >Subject: RE: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of >ResetSystemLib > >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 >> >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1461 >> >> For now there is no ResetSystemLib instance that can be linked against >> Runtime driver. And it's improper to extend the existing DxeResetSystemL= ib >> 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 >> 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 >> >> 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 >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 c= old >> 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 w= arm >> 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 s= hut >> 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 S= 3 >> 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, EfiResetWa= rm, >> or EfiResetShutdown >> + the data buffer starts with a Null-terminat= ed string, >optionally >> + followed by additional binary data. The str= ing is a description >> + that the caller may use to further indicate= the reason for the >> + system reset. ResetData is only valid if Re= setStatus is >> something >> + other than EFI_SUCCESS unless the ResetType= is >> EfiResetPlatformSpecific >> + where a minimum amount of ResetData is alwa= ys 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 invok= ed. >> + @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 b= y 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 >closes >> related events. >> + It will ASSERT() if that related operation fails and it will always r= eturn >> 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-54B3C1A19C= EA >> + 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 t= he >> 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