From c23f114d3cfbb29b8734b87213d1ec0de404197b Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Thu, 27 Apr 2017 11:05:07 +0800 Subject: MdeModulePkg: Move to new location Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../Universal/ResetSystemRuntimeDxe/ResetSystem.c | 163 +++++++++++++++++++++ .../Universal/ResetSystemRuntimeDxe/ResetSystem.h | 74 ++++++++++ .../ResetSystemRuntimeDxe.inf | 65 ++++++++ .../ResetSystemRuntimeDxe.uni | 22 +++ .../ResetSystemRuntimeDxeExtra.uni | 20 +++ 5 files changed, 344 insertions(+) create mode 100644 Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c create mode 100644 Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h create mode 100644 Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf create mode 100644 Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.uni create mode 100644 Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxeExtra.uni (limited to 'Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe') diff --git a/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c new file mode 100644 index 0000000000..f61e65e151 --- /dev/null +++ b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c @@ -0,0 +1,163 @@ +/** @file + Reset Architectural Protocol implementation + + Copyright (c) 2006 - 2016, 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 "ResetSystem.h" + +// +// The handle onto which the Reset Architectural Protocol is installed +// +EFI_HANDLE mResetHandle = NULL; + +/** + The driver's entry point. + + It initializes the Reset Architectural Protocol. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Cannot install ResetArch protocol. + +**/ +EFI_STATUS +EFIAPI +InitializeResetSystem ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Make sure the Reset Architectural Protocol is not already installed in the system + // + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiResetArchProtocolGuid); + + // + // Hook the runtime service table + // + gRT->ResetSystem = ResetSystem; + + // + // Now install the Reset RT AP on a new handle + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &mResetHandle, + &gEfiResetArchProtocolGuid, + NULL, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +/** + Put the system into S3 power state. +**/ +VOID +DoS3 ( + VOID + ) +{ + EnterS3WithImmediateWake (); + + // + // Should not return + // + CpuDeadLoop (); +} + +/** + 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 + ) +{ + EFI_STATUS Status; + UINTN Size; + UINTN CapsuleDataPtr; + + // + // Indicate reset system runtime service is called. + // + REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_RESET_SYSTEM)); + + switch (ResetType) { + case EfiResetWarm: + + // + //Check if there are pending capsules to process + // + Size = sizeof (CapsuleDataPtr); + Status = EfiGetVariable ( + EFI_CAPSULE_VARIABLE_NAME, + &gEfiCapsuleVendorGuid, + NULL, + &Size, + (VOID *) &CapsuleDataPtr + ); + + if (Status == EFI_SUCCESS) { + // + //Process capsules across a system reset. + // + DoS3(); + } + + ResetWarm (); + + break; + + case EfiResetCold: + ResetCold (); + break; + + case EfiResetShutdown: + ResetShutdown (); + return ; + + case EfiResetPlatformSpecific: + ResetPlatformSpecific (DataSize, ResetData); + return; + + default: + return ; + } + + // + // Given we should have reset getting here would be bad + // + ASSERT (FALSE); +} diff --git a/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h new file mode 100644 index 0000000000..c3a2a7f127 --- /dev/null +++ b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.h @@ -0,0 +1,74 @@ +/** @file + + Copyright (c) 2006 - 2012, 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. + +**/ + +#ifndef _RESET_SYSTEM_H_ +#define _RESET_SYSTEM_H_ + + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + The driver's entry point. + + It initializes the Reset Architectural Protocol. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Cannot install ResetArch protocol. + +**/ +EFI_STATUS +EFIAPI +InitializeResetSystem ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ); + +/** + 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 WatchdogData. + @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. + +**/ +VOID +EFIAPI +ResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ); + +#endif diff --git a/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf new file mode 100644 index 0000000000..7ef52b3283 --- /dev/null +++ b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf @@ -0,0 +1,65 @@ +## @file +# This driver implements Reset Architectural Protocol. +# +# Copyright (c) 2006 - 2014, 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 = ResetSystemRuntimeDxe + MODULE_UNI_FILE = ResetSystemRuntimeDxe.uni + FILE_GUID = 4B28E4C7-FF36-4e10-93CF-A82159E777C5 + MODULE_TYPE = DXE_RUNTIME_DRIVER + VERSION_STRING = 1.0 + + ENTRY_POINT = InitializeResetSystem + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 EBC +# + +[Sources] + ResetSystem.h + ResetSystem.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + ResetSystemLib + UefiRuntimeServicesTableLib + UefiRuntimeLib + UefiBootServicesTableLib + UefiDriverEntryPoint + IoLib + UefiLib + DebugLib + BaseLib + ReportStatusCodeLib + + +[Guids] + gEfiCapsuleVendorGuid ## SOMETIMES_CONSUMES ## Variable:L"CapsuleUpdateData" + + +[Protocols] + gEfiResetArchProtocolGuid ## PRODUCES + + +[Depex] + TRUE + +[UserExtensions.TianoCore."ExtraFiles"] + ResetSystemRuntimeDxeExtra.uni diff --git a/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.uni b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.uni new file mode 100644 index 0000000000..e55ffd97ef --- /dev/null +++ b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.uni @@ -0,0 +1,22 @@ +// /** @file +// This driver implements Reset Architectural Protocol. +// +// This driver implements Reset Architectural Protocol. +// +// Copyright (c) 2006 - 2014, 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 "Implements Reset Architectural Protocol" + +#string STR_MODULE_DESCRIPTION #language en-US "This driver implements Reset Architectural Protocol." + diff --git a/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxeExtra.uni b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxeExtra.uni new file mode 100644 index 0000000000..32448f24ec --- /dev/null +++ b/Core/MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxeExtra.uni @@ -0,0 +1,20 @@ +// /** @file +// ResetSystemRuntimeDxe Localized Strings and Content +// +// Copyright (c) 2013 - 2014, 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_PROPERTIES_MODULE_NAME +#language en-US +"Reset System DXE Driver" + + -- cgit v1.2.3