From: "Ni, Ray" <ray.ni@intel.com>
To: "Gao, Zhichao" <zhichao.gao@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Gao, Liming" <liming.gao@intel.com>
Subject: Re: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib
Date: Mon, 18 Feb 2019 08:36:37 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190218073251.1272-3-zhichao.gao@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
> -----Original Message-----
> From: Gao, Zhichao <zhichao.gao@intel.com>
> Sent: Monday, February 18, 2019 3:33 PM
> To: edk2-devel@lists.01.org
> Cc: Ni, Ray <ray.ni@intel.com>; Gao, Liming <liming.gao@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.gao@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Liming Gao <liming.gao@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
next prev parent reply other threads:[~2019-02-18 8:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-18 7:32 [PATCH 0/2] ResetSystemLib changings Zhichao Gao
2019-02-18 7:32 ` [PATCH 1/2] MdeModulePkg: Add a new API ResetSystem Zhichao Gao
2019-02-18 8:34 ` Ni, Ray
2019-02-18 7:32 ` [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib Zhichao Gao
2019-02-18 8:36 ` Ni, Ray [this message]
2019-02-18 8:45 ` Gao, Liming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox