]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / ResetSystemRuntimeDxe / ResetSystem.c
index 4c7107faeab1812ffc8354cea010bd497f8db3ba..42f1b1d0158f08e3a7563ada7d53d40b945c27c5 100644 (file)
@@ -3,19 +3,13 @@
 \r
   Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include "ResetSystem.h"\r
 \r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mResetTypeStr[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR16  *mResetTypeStr[] = {\r
   L"Cold", L"Warm", L"Shutdown", L"PlatformSpecific"\r
 };\r
 \r
@@ -48,13 +42,13 @@ UINTN  mResetNotifyDepth = 0;
 EFI_STATUS\r
 EFIAPI\r
 RegisterResetNotify (\r
-  IN EFI_RESET_NOTIFICATION_PROTOCOL *This,\r
-  IN EFI_RESET_SYSTEM                ResetFunction\r
+  IN EFI_RESET_NOTIFICATION_PROTOCOL  *This,\r
+  IN EFI_RESET_SYSTEM                 ResetFunction\r
   )\r
 {\r
-  RESET_NOTIFICATION_INSTANCE        *Instance;\r
-  LIST_ENTRY                         *Link;\r
-  RESET_NOTIFY_ENTRY                 *Entry;\r
+  RESET_NOTIFICATION_INSTANCE  *Instance;\r
+  LIST_ENTRY                   *Link;\r
+  RESET_NOTIFY_ENTRY           *Entry;\r
 \r
   if (ResetFunction == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -63,9 +57,10 @@ RegisterResetNotify (
   Instance = RESET_NOTIFICATION_INSTANCE_FROM_THIS (This);\r
 \r
   for ( Link = GetFirstNode (&Instance->ResetNotifies)\r
-      ; !IsNull (&Instance->ResetNotifies, Link)\r
-      ; Link = GetNextNode (&Instance->ResetNotifies, Link)\r
-      ) {\r
+        ; !IsNull (&Instance->ResetNotifies, Link)\r
+        ; Link = GetNextNode (&Instance->ResetNotifies, Link)\r
+        )\r
+  {\r
     Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
     if (Entry->ResetNotify == ResetFunction) {\r
       return EFI_ALREADY_STARTED;\r
@@ -77,6 +72,7 @@ RegisterResetNotify (
   if (Entry == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
+\r
   Entry->Signature   = RESET_NOTIFY_ENTRY_SIGNATURE;\r
   Entry->ResetNotify = ResetFunction;\r
   InsertTailList (&Instance->ResetNotifies, &Entry->Link);\r
@@ -101,13 +97,13 @@ RegisterResetNotify (
 EFI_STATUS\r
 EFIAPI\r
 UnregisterResetNotify (\r
-  IN EFI_RESET_NOTIFICATION_PROTOCOL *This,\r
-  IN EFI_RESET_SYSTEM                ResetFunction\r
+  IN EFI_RESET_NOTIFICATION_PROTOCOL  *This,\r
+  IN EFI_RESET_SYSTEM                 ResetFunction\r
   )\r
 {\r
-  RESET_NOTIFICATION_INSTANCE        *Instance;\r
-  LIST_ENTRY                         *Link;\r
-  RESET_NOTIFY_ENTRY                 *Entry;\r
+  RESET_NOTIFICATION_INSTANCE  *Instance;\r
+  LIST_ENTRY                   *Link;\r
+  RESET_NOTIFY_ENTRY           *Entry;\r
 \r
   if (ResetFunction == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -116,9 +112,10 @@ UnregisterResetNotify (
   Instance = RESET_NOTIFICATION_INSTANCE_FROM_THIS (This);\r
 \r
   for ( Link = GetFirstNode (&Instance->ResetNotifies)\r
-      ; !IsNull (&Instance->ResetNotifies, Link)\r
-      ; Link = GetNextNode (&Instance->ResetNotifies, Link)\r
-      ) {\r
+        ; !IsNull (&Instance->ResetNotifies, Link)\r
+        ; Link = GetNextNode (&Instance->ResetNotifies, Link)\r
+        )\r
+  {\r
     Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
     if (Entry->ResetNotify == ResetFunction) {\r
       RemoveEntryList (&Entry->Link);\r
@@ -130,7 +127,7 @@ UnregisterResetNotify (
   return EFI_INVALID_PARAMETER;\r
 }\r
 \r
-RESET_NOTIFICATION_INSTANCE mResetNotification = {\r
+RESET_NOTIFICATION_INSTANCE  mResetNotification = {\r
   RESET_NOTIFICATION_INSTANCE_SIGNATURE,\r
   {\r
     RegisterResetNotify,\r
@@ -139,7 +136,7 @@ RESET_NOTIFICATION_INSTANCE mResetNotification = {
   INITIALIZE_LIST_HEAD_VARIABLE (mResetNotification.ResetNotifies)\r
 };\r
 \r
-RESET_NOTIFICATION_INSTANCE mPlatformSpecificResetFilter = {\r
+RESET_NOTIFICATION_INSTANCE  mPlatformSpecificResetFilter = {\r
   RESET_NOTIFICATION_INSTANCE_SIGNATURE,\r
   {\r
     RegisterResetNotify,\r
@@ -148,7 +145,7 @@ RESET_NOTIFICATION_INSTANCE mPlatformSpecificResetFilter = {
   INITIALIZE_LIST_HEAD_VARIABLE (mPlatformSpecificResetFilter.ResetNotifies)\r
 };\r
 \r
-RESET_NOTIFICATION_INSTANCE mPlatformSpecificResetHandler = {\r
+RESET_NOTIFICATION_INSTANCE  mPlatformSpecificResetHandler = {\r
   RESET_NOTIFICATION_INSTANCE_SIGNATURE,\r
   {\r
     RegisterResetNotify,\r
@@ -195,10 +192,14 @@ InitializeResetSystem (
   Handle = NULL;\r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &Handle,\r
-                  &gEfiResetArchProtocolGuid,         NULL,\r
-                  &gEfiResetNotificationProtocolGuid, &mResetNotification.ResetNotification,\r
-                  &gEdkiiPlatformSpecificResetFilterProtocolGuid, &mPlatformSpecificResetFilter.ResetNotification,\r
-                  &gEdkiiPlatformSpecificResetHandlerProtocolGuid, &mPlatformSpecificResetHandler.ResetNotification,\r
+                  &gEfiResetArchProtocolGuid,\r
+                  NULL,\r
+                  &gEfiResetNotificationProtocolGuid,\r
+                  &mResetNotification.ResetNotification,\r
+                  &gEdkiiPlatformSpecificResetFilterProtocolGuid,\r
+                  &mPlatformSpecificResetFilter.ResetNotification,\r
+                  &gEdkiiPlatformSpecificResetHandlerProtocolGuid,\r
+                  &mPlatformSpecificResetHandler.ResetNotification,\r
                   NULL\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
@@ -206,22 +207,6 @@ InitializeResetSystem (
   return Status;\r
 }\r
 \r
-/**\r
-  Put the system into S3 power state.\r
-**/\r
-VOID\r
-DoS3 (\r
-  VOID\r
-  )\r
-{\r
-  EnterS3WithImmediateWake ();\r
-\r
-  //\r
-  // Should not return\r
-  //\r
-  CpuDeadLoop ();\r
-}\r
-\r
 /**\r
   Resets the entire platform.\r
 \r
@@ -232,10 +217,7 @@ DoS3 (
                                 EfiResetShutdown the data buffer starts with a Null-terminated\r
                                 string, optionally followed by additional binary data.\r
                                 The string is a description that the caller may use to further\r
-                                indicate the reason for the system reset. ResetData is only\r
-                                valid if ResetStatus is something other than EFI_SUCCESS\r
-                                unless the ResetType is EfiResetPlatformSpecific\r
-                                where a minimum amount of ResetData is always required.\r
+                                indicate the reason for the system reset.\r
                                 For a ResetType of EfiResetPlatformSpecific the data buffer\r
                                 also starts with a Null-terminated string that is followed\r
                                 by an EFI_GUID that describes the specific type of reset to perform.\r
@@ -243,15 +225,12 @@ DoS3 (
 VOID\r
 EFIAPI\r
 RuntimeServiceResetSystem (\r
-  IN EFI_RESET_TYPE   ResetType,\r
-  IN EFI_STATUS       ResetStatus,\r
-  IN UINTN            DataSize,\r
-  IN VOID             *ResetData OPTIONAL\r
+  IN EFI_RESET_TYPE  ResetType,\r
+  IN EFI_STATUS      ResetStatus,\r
+  IN UINTN           DataSize,\r
+  IN VOID            *ResetData OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  UINTN               Size;\r
-  UINTN               CapsuleDataPtr;\r
   LIST_ENTRY          *Link;\r
   RESET_NOTIFY_ENTRY  *Entry;\r
 \r
@@ -267,8 +246,10 @@ RuntimeServiceResetSystem (
 \r
   mResetNotifyDepth++;\r
   DEBUG ((\r
-    DEBUG_INFO, "DXE ResetSystem2: ResetType %s, Call Depth = %d.\n",\r
-    mResetTypeStr[ResetType], mResetNotifyDepth\r
+    DEBUG_INFO,\r
+    "DXE ResetSystem2: ResetType %s, Call Depth = %d.\n",\r
+    mResetTypeStr[ResetType],\r
+    mResetNotifyDepth\r
     ));\r
 \r
   if (mResetNotifyDepth <= MAX_RESET_NOTIFY_DEPTH) {\r
@@ -278,31 +259,36 @@ RuntimeServiceResetSystem (
       // EDKII_PLATFORM_SPECIFIC_RESET_FILTER_PROTOCOL.\r
       //\r
       for ( Link = GetFirstNode (&mPlatformSpecificResetFilter.ResetNotifies)\r
-          ; !IsNull (&mPlatformSpecificResetFilter.ResetNotifies, Link)\r
-          ; Link = GetNextNode (&mPlatformSpecificResetFilter.ResetNotifies, Link)\r
-          ) {\r
+            ; !IsNull (&mPlatformSpecificResetFilter.ResetNotifies, Link)\r
+            ; Link = GetNextNode (&mPlatformSpecificResetFilter.ResetNotifies, Link)\r
+            )\r
+      {\r
         Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
         Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\r
       }\r
+\r
       //\r
       // Call reset notification functions registered through the\r
       // EFI_RESET_NOTIFICATION_PROTOCOL.\r
       //\r
       for ( Link = GetFirstNode (&mResetNotification.ResetNotifies)\r
-          ; !IsNull (&mResetNotification.ResetNotifies, Link)\r
-          ; Link = GetNextNode (&mResetNotification.ResetNotifies, Link)\r
-          ) {\r
+            ; !IsNull (&mResetNotification.ResetNotifies, Link)\r
+            ; Link = GetNextNode (&mResetNotification.ResetNotifies, Link)\r
+            )\r
+      {\r
         Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
         Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\r
       }\r
+\r
       //\r
       // call reset notification functions registered through the\r
       // EDKII_PLATFORM_SPECIFIC_RESET_HANDLER_PROTOCOL.\r
       //\r
       for ( Link = GetFirstNode (&mPlatformSpecificResetHandler.ResetNotifies)\r
-          ; !IsNull (&mPlatformSpecificResetHandler.ResetNotifies, Link)\r
-          ; Link = GetNextNode (&mPlatformSpecificResetHandler.ResetNotifies, Link)\r
-          ) {\r
+            ; !IsNull (&mPlatformSpecificResetHandler.ResetNotifies, Link)\r
+            ; Link = GetNextNode (&mPlatformSpecificResetHandler.ResetNotifies, Link)\r
+            )\r
+      {\r
         Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
         Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\r
       }\r
@@ -313,44 +299,25 @@ RuntimeServiceResetSystem (
   }\r
 \r
   switch (ResetType) {\r
-  case EfiResetWarm:\r
-\r
-    //\r
-    //Check if there are pending capsules to process\r
-    //\r
-    Size = sizeof (CapsuleDataPtr);\r
-    Status =  EfiGetVariable (\r
-                 EFI_CAPSULE_VARIABLE_NAME,\r
-                 &gEfiCapsuleVendorGuid,\r
-                 NULL,\r
-                 &Size,\r
-                 (VOID *) &CapsuleDataPtr\r
-                 );\r
-\r
-    if (Status == EFI_SUCCESS) {\r
-      //\r
-      //Process capsules across a system reset.\r
-      //\r
-      DoS3();\r
-    }\r
+    case EfiResetWarm:\r
 \r
-    ResetWarm ();\r
-    break;\r
+      ResetWarm ();\r
+      break;\r
 \r
- case EfiResetCold:\r
-    ResetCold ();\r
-    break;\r
   case EfiResetCold:\r
+      ResetCold ();\r
+      break;\r
 \r
-  case EfiResetShutdown:\r
-    ResetShutdown ();\r
-    return ;\r
+    case EfiResetShutdown:\r
+      ResetShutdown ();\r
+      return;\r
 \r
-  case EfiResetPlatformSpecific:\r
-    ResetPlatformSpecific (DataSize, ResetData);\r
-    return;\r
+    case EfiResetPlatformSpecific:\r
+      ResetPlatformSpecific (DataSize, ResetData);\r
+      return;\r
 \r
-  default:\r
-    return ;\r
+    default:\r
+      return;\r
   }\r
 \r
   //\r