]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellLevel2CommandsLib/Reset.c
EmulatorPkg: Remove framework pkgs dependency from EmulatorPkg
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Reset.c
CommitLineData
a405b86d 1/** @file\r
2 Main file for attrib shell level 2 function.\r
3\r
c011b6c9 4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
ba0014b9 5 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
56ba3746 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a405b86d 7\r
8**/\r
9\r
10#include "UefiShellLevel2CommandsLib.h"\r
11\r
12STATIC CONST SHELL_PARAM_ITEM ResetParamList[] = {\r
f675a1b4
CC
13 {L"-w", TypeValue},\r
14 {L"-s", TypeValue},\r
15 {L"-c", TypeValue},\r
16 {L"-fwui", TypeFlag },\r
17 {NULL, TypeMax }\r
a405b86d 18 };\r
19\r
20/**\r
21 Function for 'reset' command.\r
22\r
23 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
24 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
25**/\r
26SHELL_STATUS\r
27EFIAPI\r
28ShellCommandRunReset (\r
29 IN EFI_HANDLE ImageHandle,\r
30 IN EFI_SYSTEM_TABLE *SystemTable\r
31 )\r
32{\r
33 EFI_STATUS Status;\r
34 LIST_ENTRY *Package;\r
35 CONST CHAR16 *String;\r
36 CHAR16 *ProblemParam;\r
37 SHELL_STATUS ShellStatus;\r
f675a1b4
CC
38 UINT64 OsIndications;\r
39 UINT32 Attr;\r
40 UINTN DataSize;\r
a405b86d 41\r
42 ShellStatus = SHELL_SUCCESS;\r
43 ProblemParam = NULL;\r
44\r
45 //\r
46 // initialize the shell lib (we must be in non-auto-init...)\r
47 //\r
48 Status = ShellInitialize();\r
49 ASSERT_EFI_ERROR(Status);\r
50\r
51 //\r
52 // parse the command line\r
53 //\r
54 Status = ShellCommandLineParse (ResetParamList, &Package, &ProblemParam, TRUE);\r
55 if (EFI_ERROR(Status)) {\r
56 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
ba0014b9 57 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"reset", ProblemParam);\r
a405b86d 58 FreePool(ProblemParam);\r
59 return (SHELL_INVALID_PARAMETER);\r
60 } else {\r
61 ASSERT(FALSE);\r
62 }\r
63 } else {\r
64 //\r
65 // check for "-?"\r
66 //\r
67 if (ShellCommandLineGetFlag(Package, L"-?")) {\r
68 ASSERT(FALSE);\r
69 } else if (ShellCommandLineGetRawValue(Package, 1) != NULL) {\r
ba0014b9 70 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
a405b86d 71 ShellStatus = SHELL_INVALID_PARAMETER;\r
72 } else {\r
f675a1b4
CC
73\r
74 if (ShellCommandLineGetFlag (Package, L"-fwui")) {\r
75\r
76 DataSize = sizeof (OsIndications);\r
77 Status = gRT->GetVariable (\r
78 EFI_OS_INDICATIONS_SUPPORT_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
79 &Attr, &DataSize, &OsIndications\r
80 );\r
81 if (!EFI_ERROR (Status)) {\r
82 if ((OsIndications & EFI_OS_INDICATIONS_BOOT_TO_FW_UI) != 0) {\r
83 DataSize = sizeof (OsIndications);\r
84 Status = gRT->GetVariable (\r
85 EFI_OS_INDICATIONS_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
86 &Attr, &DataSize, &OsIndications\r
87 );\r
88 if (!EFI_ERROR (Status)) {\r
89 OsIndications |= EFI_OS_INDICATIONS_BOOT_TO_FW_UI;\r
90 } else {\r
91 OsIndications = EFI_OS_INDICATIONS_BOOT_TO_FW_UI;\r
92 }\r
93 Status = gRT->SetVariable (\r
94 EFI_OS_INDICATIONS_VARIABLE_NAME, &gEfiGlobalVariableGuid,\r
95 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
96 sizeof (OsIndications), &OsIndications\r
97 );\r
98 }\r
99 }\r
100 if (EFI_ERROR (Status)) {\r
101 ShellStatus = SHELL_UNSUPPORTED;\r
102 goto Error;\r
103 }\r
104 }\r
105\r
a405b86d 106 //\r
33728406 107 // check for warm reset flag, then shutdown reset flag, then cold (default) reset flag\r
a405b86d 108 //\r
33728406 109 if (ShellCommandLineGetFlag(Package, L"-w")) {\r
110 if (ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-c")) {\r
ba0014b9 111 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
a405b86d 112 ShellStatus = SHELL_INVALID_PARAMETER;\r
113 } else {\r
33728406 114 String = ShellCommandLineGetValue(Package, L"-w");\r
a405b86d 115 if (String != NULL) {\r
d8fdd524 116 gRT->ResetSystem(EfiResetWarm, EFI_SUCCESS, StrSize(String), (VOID*)String);\r
a405b86d 117 } else {\r
d8fdd524 118 gRT->ResetSystem(EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
a405b86d 119 }\r
120 }\r
121 } else if (ShellCommandLineGetFlag(Package, L"-s")) {\r
33728406 122 if (ShellCommandLineGetFlag(Package, L"-c")) {\r
ba0014b9 123 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"reset");\r
a405b86d 124 ShellStatus = SHELL_INVALID_PARAMETER;\r
125 } else {\r
126 String = ShellCommandLineGetValue(Package, L"-s");\r
127 DEBUG_CODE(ShellPrintEx(-1,-1,L"Reset with %s (%d bytes)", String, String!=NULL?StrSize(String):0););\r
128 if (String != NULL) {\r
129 gRT->ResetSystem(EfiResetShutdown, EFI_SUCCESS, StrSize(String), (VOID*)String);\r
130 } else {\r
131 gRT->ResetSystem(EfiResetShutdown, EFI_SUCCESS, 0, NULL);\r
132 }\r
133 }\r
134 } else {\r
135 //\r
136 // this is default so dont worry about flag...\r
137 //\r
33728406 138 String = ShellCommandLineGetValue(Package, L"-c");\r
a405b86d 139 if (String != NULL) {\r
d8fdd524 140 gRT->ResetSystem(EfiResetCold, EFI_SUCCESS, StrSize(String), (VOID*)String);\r
a405b86d 141 } else {\r
d8fdd524 142 gRT->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);\r
a405b86d 143 }\r
144 }\r
145 }\r
146 }\r
147\r
148 //\r
149 // we should never get here... so the free and return are for formality more than use\r
150 // as the ResetSystem function should not return...\r
151 //\r
152\r
f675a1b4 153Error:\r
a405b86d 154 //\r
155 // free the command line package\r
156 //\r
157 ShellCommandLineFreeVarList (Package);\r
158\r
159 //\r
160 // return the status\r
161 //\r
162 return (ShellStatus);\r
163}\r
164\r