From: "Gao, Liming" <liming.gao@intel.com>
To: "Ni, Ray" <ray.ni@intel.com>,
"Gao, Zhichao" <zhichao.gao@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH 2/2] MdeModulePkg: Add a runtime library instance of ResetSystemLib
Date: Mon, 18 Feb 2019 08:45:24 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3E092C@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C021E81@SHSMSX104.ccr.corp.intel.com>
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.gao@intel.com>; 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
>
>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
prev parent reply other threads:[~2019-02-18 8:45 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
2019-02-18 8:45 ` Gao, Liming [this message]
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=4A89E2EF3DFEDB4C8BFDE51014F606A14E3E092C@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