]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystem.c
MdeModulePkg/ResetSystemRuntimeDxe: Add more info in debug message
[mirror_edk2.git] / MdeModulePkg / Universal / ResetSystemRuntimeDxe / ResetSystem.c
index fed527fac2dbca7f9dfd1e50fbe82b90c504cbcc..afc35587fc2801050ee68691c44db2022647786b 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Reset Architectural and Reset Notification protocols implementation.\r
 \r
-  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2006 - 2018, 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
 \r
 #include "ResetSystem.h"\r
 \r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mResetTypeStr[] = {\r
+  L"Cold", L"Warm", L"Shutdown", L"PlatformSpecific"\r
+};\r
+\r
 //\r
 // The current ResetSystem() notification recursion depth\r
 //\r
@@ -158,9 +162,9 @@ RESET_NOTIFICATION_INSTANCE mPlatformSpecificResetHandler = {
 \r
   It initializes the Reset Architectural Protocol.\r
 \r
-  @param[in] ImageHandle  The firmware allocated handle for the EFI image.  \r
+  @param[in] ImageHandle  The firmware allocated handle for the EFI image.\r
   @param[in] SystemTable  A pointer to the EFI System Table.\r
-  \r
+\r
   @retval EFI_SUCCESS     The entry point is executed successfully.\r
   @retval other           Cannot install ResetArch protocol.\r
 \r
@@ -203,7 +207,7 @@ InitializeResetSystem (
 }\r
 \r
 /**\r
-  Put the system into S3 power state.                            \r
+  Put the system into S3 power state.\r
 **/\r
 VOID\r
 DoS3 (\r
@@ -251,16 +255,6 @@ ResetSystem (
   LIST_ENTRY          *Link;\r
   RESET_NOTIFY_ENTRY  *Entry;\r
 \r
-  //\r
-  // Above the maximum recursion depth, so do the smallest amount of\r
-  // work to perform a cold reset.\r
-  //\r
-  if (mResetNotifyDepth >= MAX_RESET_NOTIFY_DEPTH) {\r
-    ResetCold ();\r
-    ASSERT (FALSE);\r
-    return;\r
-  }\r
-\r
   //\r
   // Only do REPORT_STATUS_CODE() on first call to ResetSystem()\r
   //\r
@@ -272,40 +266,50 @@ ResetSystem (
   }\r
 \r
   mResetNotifyDepth++;\r
-  if (!EfiAtRuntime () && mResetNotifyDepth < MAX_RESET_NOTIFY_DEPTH) {\r
-    //\r
-    // Call reset notification functions registered through the\r
-    // 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
-      Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
-      Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\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
-      Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
-      Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\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
-      Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
-      Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\r
+  DEBUG ((\r
+    DEBUG_INFO, "DXE ResetSystem2: ResetType %s, Call Depth = %d.\n",\r
+    mResetTypeStr[ResetType], mResetNotifyDepth\r
+    ));\r
+\r
+  if (mResetNotifyDepth <= MAX_RESET_NOTIFY_DEPTH) {\r
+    if (!EfiAtRuntime ()) {\r
+      //\r
+      // Call reset notification functions registered through the\r
+      // 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
+        Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
+        Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\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
+        Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
+        Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\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
+        Entry = RESET_NOTIFY_ENTRY_FROM_LINK (Link);\r
+        Entry->ResetNotify (ResetType, ResetStatus, DataSize, ResetData);\r
+      }\r
     }\r
+  } else {\r
+    ASSERT (ResetType < ARRAY_SIZE (mResetTypeStr));\r
+    DEBUG ((DEBUG_ERROR, "DXE ResetSystem2: Maximum reset call depth is met. Use the current reset type: %s!\n", mResetTypeStr[ResetType]));\r
   }\r
 \r
   switch (ResetType) {\r
@@ -331,7 +335,6 @@ ResetSystem (
     }\r
 \r
     ResetWarm ();\r
-\r
     break;\r
 \r
  case EfiResetCold:\r