public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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



      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