From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.24; helo=mga09.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 4D584223972C6 for ; Wed, 7 Feb 2018 04:15:23 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Feb 2018 04:21:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,473,1511856000"; d="scan'208";a="28109183" Received: from shzintpr01.sh.intel.com (HELO [10.253.24.48]) ([10.239.4.80]) by fmsmga004.fm.intel.com with ESMTP; 07 Feb 2018 04:21:05 -0800 To: Ruiyu Ni , edk2-devel@lists.01.org Cc: Michael D Kinney , Liming Gao , star.zeng@intel.com References: <20180202064530.407028-1-ruiyu.ni@intel.com> <20180202064530.407028-7-ruiyu.ni@intel.com> From: "Zeng, Star" Message-ID: <1e4b5376-b2ad-0187-00b7-d45ac0ca4472@intel.com> Date: Wed, 7 Feb 2018 20:20:34 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <20180202064530.407028-7-ruiyu.ni@intel.com> Subject: Re: [PATCH 06/10] MdeModulePkg: Add ResetSystemLib instances that call core services X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Feb 2018 12:15:23 -0000 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 2018/2/2 14:45, Ruiyu Ni wrote: > From: Michael D Kinney > > Add a PEI instance of ResetSystemLib that calls the ResetSystem2() > service in the PEI Services Table. > > Add a DXE instance of ResetSystemLib that calls the ResetSystem() > service in the UEFI Runtime Services Table. > > These 2 library instances should be the default ResetSystemLib > mapping for most PEIMs and DXE drivers so all reset system requests > go through the core service. > > Only the implementation of the core servies should use the > platform specific instance of the ResetSystemLib that actually > performs the hardware actions to reset the platform. > > Cc: Liming Gao > Reviewed-by: Ruiyu Ni > Cc: Star Zeng > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Michael D Kinney Could we remove DebugLib in *.inf and #include in *.c as the code seems not using any DebugLib interface at all? Thanks, Star > --- > .../Library/DxeResetSystemLib/DxeResetSystemLib.c | 100 +++++++++++++++++++++ > .../DxeResetSystemLib/DxeResetSystemLib.inf | 40 +++++++++ > .../DxeResetSystemLib/DxeResetSystemLib.uni | 21 +++++ > .../Library/PeiResetSystemLib/PeiResetSystemLib.c | 100 +++++++++++++++++++++ > .../PeiResetSystemLib/PeiResetSystemLib.inf | 40 +++++++++ > .../PeiResetSystemLib/PeiResetSystemLib.uni | 21 +++++ > 6 files changed, 322 insertions(+) > create mode 100644 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c > create mode 100644 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf > create mode 100644 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.uni > create mode 100644 MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.c > create mode 100644 MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf > create mode 100644 MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.uni > > diff --git a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c > new file mode 100644 > index 0000000000..70ee1175d5 > --- /dev/null > +++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c > @@ -0,0 +1,100 @@ > +/** @file > + DXE Reset System Library instance that calls gRT->ResetSystem(). > + > + Copyright (c) 2017, 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 > + > +/** > + 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 > + ) > +{ > + EfiResetSystem (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 > + ) > +{ > + EfiResetSystem (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 > + ) > +{ > + EfiResetSystem (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 > + ) > +{ > + EfiResetSystem (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData); > +} > diff --git a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf > new file mode 100644 > index 0000000000..f2e04cfd00 > --- /dev/null > +++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf > @@ -0,0 +1,40 @@ > +## @file > +# DXE Reset System Library instance that calls gRT->ResetSystem(). > +# > +# Copyright (c) 2017, 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 = 0x00010005 > + BASE_NAME = DxeResetSystemLib > + MODULE_UNI_FILE = DxeResetSystemLib.uni > + FILE_GUID = C2BDE4F6-65EE-440B-87B5-83ABF10EF45B > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = ResetSystemLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER > + > +# > +# The following information is for reference only and not required by the build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > +# > + > +[Sources] > + DxeResetSystemLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + DebugLib > + UefiRuntimeLib > + > diff --git a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.uni b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.uni > new file mode 100644 > index 0000000000..7c51ce0713 > --- /dev/null > +++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.uni > @@ -0,0 +1,21 @@ > +// /** @file > +// DXE Reset System Library instance that calls gRT->ResetSystem(). > +// > +// DXE Reset System Library instance that calls gRT->ResetSystem(). > +// > +// Copyright (c) 2017, 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 "DXE Reset System Library instance that calls gRT->ResetSystem()" > + > +#string STR_MODULE_DESCRIPTION #language en-US "DXE Reset System Library instance that calls gRT->ResetSystem()." > + > diff --git a/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.c b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.c > new file mode 100644 > index 0000000000..b7e10110b0 > --- /dev/null > +++ b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.c > @@ -0,0 +1,100 @@ > +/** @file > + PEI Reset System Library instance that calls the ResetSystem2() PEI Service. > + > + Copyright (c) 2017, 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 > + > +/** > + 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 > + ) > +{ > + PeiServicesResetSystem2 (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 > + ) > +{ > + PeiServicesResetSystem2 (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 > + ) > +{ > + PeiServicesResetSystem2 (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 > + ) > +{ > + PeiServicesResetSystem2 (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData); > +} > diff --git a/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf > new file mode 100644 > index 0000000000..e82ec6b2b6 > --- /dev/null > +++ b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf > @@ -0,0 +1,40 @@ > +## @file > +# PEI Reset System Library instance that calls the ResetSystem2() PEI Service. > +# > +# Copyright (c) 2017, 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 = 0x00010005 > + BASE_NAME = PeiResetSystemLib > + MODULE_UNI_FILE = PeiResetSystemLib.uni > + FILE_GUID = 3198FF36-FC72-42E7-B98A-A080D823AFBF > + MODULE_TYPE = PEIM > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = ResetSystemLib|PEI_CORE PEIM > + > +# > +# The following information is for reference only and not required by the build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > +# > + > +[Sources] > + PeiResetSystemLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + DebugLib > + PeiServicesLib > + > diff --git a/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.uni b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.uni > new file mode 100644 > index 0000000000..ac996b3cc8 > --- /dev/null > +++ b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.uni > @@ -0,0 +1,21 @@ > +// /** @file > +// PEI Reset System Library instance that calls the ResetSystem2() PEI Service. > +// > +// PEI Reset System Library instance that calls the ResetSystem2() PEI Service. > +// > +// Copyright (c) 2017, 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 "PEI Reset System Library instance that calls the ResetSystem2() PEI Service" > + > +#string STR_MODULE_DESCRIPTION #language en-US "PEI Reset System Library instance that calls the ResetSystem2() PEI Service." > + >