]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel2CommandsLib/Reset.c
ShellPkg/UefiShellDebug1CommandsLib
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Reset.c
index f010b7033c3f68238567765a2e258a6ca39fe82d..8412af721ec31b846da704703a993919865547a7 100644 (file)
@@ -1,24 +1,20 @@
 /** @file\r
   Main file for attrib shell level 2 function.\r
 \r
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\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
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include "UefiShellLevel2CommandsLib.h"\r
 \r
 STATIC CONST SHELL_PARAM_ITEM ResetParamList[] = {\r
-  {L"-w", TypeValue},\r
-  {L"-s", TypeValue},\r
-  {L"-c", TypeValue},\r
-  {NULL, TypeMax}\r
+  {L"-w",    TypeValue},\r
+  {L"-s",    TypeValue},\r
+  {L"-c",    TypeValue},\r
+  {L"-fwui", TypeFlag },\r
+  {NULL,     TypeMax  }\r
   };\r
 \r
 /**\r
@@ -39,6 +35,9 @@ ShellCommandRunReset (
   CONST CHAR16  *String;\r
   CHAR16        *ProblemParam;\r
   SHELL_STATUS  ShellStatus;\r
+  UINT64        OsIndications;\r
+  UINT32        Attr;\r
+  UINTN         DataSize;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   ProblemParam = NULL;\r
@@ -55,7 +54,7 @@ ShellCommandRunReset (
   Status = ShellCommandLineParse (ResetParamList, &Package, &ProblemParam, TRUE);\r
   if (EFI_ERROR(Status)) {\r
     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, ProblemParam);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"reset", ProblemParam);\r
       FreePool(ProblemParam);\r
       return (SHELL_INVALID_PARAMETER);\r
     } else {\r
@@ -68,15 +67,48 @@ ShellCommandRunReset (
     if (ShellCommandLineGetFlag(Package, L"-?")) {\r
       ASSERT(FALSE);\r
     } else if (ShellCommandLineGetRawValue(Package, 1) != NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
+\r
+      if (ShellCommandLineGetFlag (Package, L"-fwui")) {\r
+\r
+        DataSize  = sizeof (OsIndications);\r
+        Status = gRT->GetVariable (\r
+                        EFI_OS_INDICATIONS_SUPPORT_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
+                        &Attr, &DataSize, &OsIndications\r
+                        );\r
+        if (!EFI_ERROR (Status)) {\r
+          if ((OsIndications & EFI_OS_INDICATIONS_BOOT_TO_FW_UI) != 0) {\r
+            DataSize = sizeof (OsIndications);\r
+            Status = gRT->GetVariable (\r
+                            EFI_OS_INDICATIONS_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
+                            &Attr, &DataSize, &OsIndications\r
+                            );\r
+            if (!EFI_ERROR (Status)) {\r
+              OsIndications |= EFI_OS_INDICATIONS_BOOT_TO_FW_UI;\r
+            } else {\r
+              OsIndications = EFI_OS_INDICATIONS_BOOT_TO_FW_UI;\r
+            }\r
+            Status = gRT->SetVariable (\r
+                            EFI_OS_INDICATIONS_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
+                            EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+                            sizeof (OsIndications), &OsIndications\r
+                            );\r
+          }\r
+        }\r
+        if (EFI_ERROR (Status)) {\r
+          ShellStatus = SHELL_UNSUPPORTED;\r
+          goto Error;\r
+        }\r
+      }\r
+\r
       //\r
       // check for warm reset flag, then shutdown reset flag, then cold (default) reset flag\r
       //\r
       if (ShellCommandLineGetFlag(Package, L"-w")) {\r
         if (ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-c")) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
           String = ShellCommandLineGetValue(Package, L"-w");\r
@@ -88,7 +120,7 @@ ShellCommandRunReset (
         }\r
       } else if (ShellCommandLineGetFlag(Package, L"-s")) {\r
         if (ShellCommandLineGetFlag(Package, L"-c")) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
           String = ShellCommandLineGetValue(Package, L"-s");\r
@@ -118,6 +150,7 @@ ShellCommandRunReset (
   // as the ResetSystem function should not return...\r
   //\r
 \r
+Error:\r
   //\r
   // free the command line package\r
   //\r