]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellDriver1CommandsLib / DrvDiag.c
CommitLineData
4ba49616 1/** @file\r
2 Main file for DrvDiag shell Driver1 function.\r
3\r
c011b6c9 4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
ba0014b9 5 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
56ba3746 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
4ba49616 7\r
8**/\r
9\r
10#include "UefiShellDriver1CommandsLib.h"\r
11\r
47d20b54 12STATIC CONST EFI_GUID *DiagGuidList[] = { &gEfiDriverDiagnosticsProtocolGuid, &gEfiDriverDiagnostics2ProtocolGuid, NULL };\r
4ba49616 13//\r
14// We need 1 more item on the list...\r
15//\r
16typedef enum {\r
361a8267 17 TestModeStandard = EfiDriverDiagnosticTypeStandard,\r
18 TestModeExtended = EfiDriverDiagnosticTypeExtended,\r
19 TestModeManufacturing = EfiDriverDiagnosticTypeManufacturing,\r
20 TestModeList,\r
21 TestModeMax\r
4ba49616 22} DRV_DIAG_TEST_MODE;\r
23\r
361a8267 24/**\r
25 Do the diagnostics call for some set of handles.\r
26\r
27 @param[in] Mode The type of diagnostic test to run.\r
28 @param[in] Lang The language code to use.\r
29 @param[in] AllChilds Should the test be on all children.\r
30 @param[in] DriverHandle The driver handle to test with.\r
31 @param[in] ControllerHandle The specific controller handle to test.\r
32 @param[in] ChildHandle The specific child handle to test.\r
33\r
34 @retval EFI_SUCCESS The operation was successful.\r
35 @retval EFI_INVALID_PARAMETER A parameter had an invalid value.\r
36 @retval EFI_NOT_FOUND No diagnostic handle could be found.\r
37**/\r
4ba49616 38EFI_STATUS\r
4ba49616 39DoDiagnostics (\r
47d20b54
MK
40 IN CONST DRV_DIAG_TEST_MODE Mode,\r
41 IN CONST CHAR8 *Lang,\r
42 IN CONST BOOLEAN AllChilds,\r
43 IN CONST EFI_HANDLE DriverHandle,\r
44 IN CONST EFI_HANDLE ControllerHandle,\r
45 IN CONST EFI_HANDLE ChildHandle\r
4ba49616 46 )\r
47{\r
47d20b54
MK
48 EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics;\r
49 EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2;\r
50 EFI_HANDLE *DriverHandleList;\r
51 EFI_HANDLE *ControllerHandleList;\r
52 EFI_HANDLE *ChildHandleList;\r
53 EFI_HANDLE *Walker;\r
54 UINTN DriverHandleListCount;\r
55 UINTN ControllerHandleListCount;\r
56 UINTN ChildHandleListCount;\r
57 UINTN DriverHandleListLoop;\r
58 UINTN ControllerHandleListLoop;\r
59 UINTN ChildHandleListLoop;\r
60 EFI_STATUS Status;\r
61 EFI_STATUS Status2;\r
62 EFI_GUID *ErrorType;\r
63 UINTN OutBufferSize;\r
64 CHAR16 *OutBuffer;\r
65 UINTN HandleIndex1;\r
66 UINTN HandleIndex2;\r
67 CHAR8 *Language;\r
68 BOOLEAN Found;\r
69\r
70 if (((ChildHandle != NULL) && AllChilds) || (Mode >= TestModeMax)) {\r
4ba49616 71 return (EFI_INVALID_PARAMETER);\r
72 }\r
73\r
47d20b54
MK
74 DriverDiagnostics = NULL;\r
75 DriverDiagnostics2 = NULL;\r
76 Status = EFI_SUCCESS;\r
77 Status2 = EFI_SUCCESS;\r
78 DriverHandleList = NULL;\r
79 ControllerHandleList = NULL;\r
80 ChildHandleList = NULL;\r
81 Language = NULL;\r
82 OutBuffer = NULL;\r
83 ErrorType = NULL;\r
84 DriverHandleListCount = 0;\r
85 ControllerHandleListCount = 0;\r
86 ChildHandleListCount = 0;\r
4ba49616 87\r
88 if (DriverHandle != NULL) {\r
47d20b54 89 DriverHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE));\r
26ca45a8
RN
90 if (DriverHandleList == NULL) {\r
91 return EFI_OUT_OF_RESOURCES;\r
92 }\r
47d20b54
MK
93\r
94 DriverHandleList[0] = DriverHandle;\r
4ba49616 95 DriverHandleListCount = 1;\r
96 } else {\r
47d20b54 97 DriverHandleList = GetHandleListByProtocolList (DiagGuidList);\r
4ba49616 98 if (DriverHandleList == NULL) {\r
47d20b54
MK
99 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROTOCOL_NF), gShellDriver1HiiHandle, L"drvdiag", L"gEfiDriverDiagnosticsProtocolGuid", &gEfiDriverDiagnosticsProtocolGuid);\r
100 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROTOCOL_NF), gShellDriver1HiiHandle, L"drvdiag", L"gEfiDriverDiagnostics2ProtocolGuid", &gEfiDriverDiagnostics2ProtocolGuid);\r
4ba49616 101 return (EFI_NOT_FOUND);\r
ba0014b9 102 }\r
47d20b54
MK
103\r
104 for (Walker = DriverHandleList; Walker != NULL && *Walker != NULL; DriverHandleListCount++, Walker++) {\r
105 }\r
4ba49616 106 }\r
107\r
108 if (ControllerHandle != NULL) {\r
47d20b54 109 ControllerHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE));\r
26ca45a8
RN
110 if (ControllerHandleList == NULL) {\r
111 SHELL_FREE_NON_NULL (DriverHandleList);\r
112 return EFI_OUT_OF_RESOURCES;\r
113 }\r
47d20b54
MK
114\r
115 ControllerHandleList[0] = ControllerHandle;\r
4ba49616 116 ControllerHandleListCount = 1;\r
117 } else {\r
118 ControllerHandleList = NULL;\r
119 }\r
120\r
121 if (ChildHandle != NULL) {\r
47d20b54 122 ChildHandleList = AllocateZeroPool (2*sizeof (EFI_HANDLE));\r
cb9f3a59 123 if (ChildHandleList == NULL) {\r
26ca45a8
RN
124 SHELL_FREE_NON_NULL (ControllerHandleList);\r
125 SHELL_FREE_NON_NULL (DriverHandleList);\r
126 return EFI_OUT_OF_RESOURCES;\r
127 }\r
47d20b54
MK
128\r
129 ChildHandleList[0] = ChildHandle;\r
4ba49616 130 ChildHandleListCount = 1;\r
131 } else if (AllChilds) {\r
132 ChildHandleList = NULL;\r
133 //\r
134 // This gets handled in the loop below.\r
135 //\r
136 } else {\r
137 ChildHandleList = NULL;\r
138 }\r
139\r
361a8267 140 if (Mode == TestModeList) {\r
47d20b54 141 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_HEADER), gShellDriver1HiiHandle);\r
361a8267 142 }\r
47d20b54 143\r
4ba49616 144 for (DriverHandleListLoop = 0\r
47d20b54
MK
145 ; DriverHandleListLoop < DriverHandleListCount\r
146 ; DriverHandleListLoop++\r
147 )\r
148 {\r
361a8267 149 if (Mode == TestModeList) {\r
47d20b54 150 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_HEADER), gShellDriver1HiiHandle, ConvertHandleToHandleIndex (DriverHandleList[DriverHandleListLoop]));\r
361a8267 151 }\r
47d20b54 152\r
4ba49616 153 if (ControllerHandle == NULL) {\r
47d20b54 154 PARSE_HANDLE_DATABASE_DEVICES (DriverHandleList[DriverHandleListLoop], &ControllerHandleListCount, &ControllerHandleList);\r
ba0014b9 155 }\r
47d20b54 156\r
361a8267 157 if (ControllerHandleListCount == 0) {\r
158 if (Mode == TestModeList) {\r
47d20b54 159 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DRVDIAG_DRIVER_NO_HANDLES), gShellDriver1HiiHandle);\r
361a8267 160 }\r
161 } else {\r
162 if (Mode == TestModeList) {\r
47d20b54 163 ShellPrintEx (-1, -1, L"\r\n");\r
4ba49616 164 }\r
47d20b54 165\r
361a8267 166 for (ControllerHandleListLoop = 0\r
47d20b54
MK
167 ; ControllerHandleListLoop < ControllerHandleListCount\r
168 ; ControllerHandleListLoop++\r
169 )\r
170 {\r
361a8267 171 if (AllChilds) {\r
47d20b54
MK
172 ASSERT (ChildHandleList == NULL);\r
173 PARSE_HANDLE_DATABASE_MANAGED_CHILDREN (\r
ba0014b9 174 DriverHandleList[DriverHandleListLoop],\r
361a8267 175 ControllerHandleList[ControllerHandleListLoop],\r
176 &ChildHandleListCount,\r
47d20b54
MK
177 &ChildHandleList\r
178 );\r
361a8267 179 }\r
47d20b54 180\r
361a8267 181 for (ChildHandleListLoop = 0\r
47d20b54
MK
182 ; (ChildHandleListLoop < ChildHandleListCount || ChildHandleList == NULL)\r
183 ; ChildHandleListLoop++\r
184 )\r
185 {\r
361a8267 186 Found = FALSE;\r
187 if (Mode != TestModeList) {\r
47d20b54 188 if ((Lang == NULL) || (Lang[2] == '-')) {\r
361a8267 189 //\r
190 // Get the protocol pointer and call the function\r
191 //\r
47d20b54
MK
192 Status = gBS->OpenProtocol (\r
193 DriverHandleList[DriverHandleListLoop],\r
194 &gEfiDriverDiagnostics2ProtocolGuid,\r
195 (VOID **)&DriverDiagnostics2,\r
196 gImageHandle,\r
197 NULL,\r
198 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
199 );\r
200 if (!EFI_ERROR (Status) && (DriverDiagnostics2 != NULL)) {\r
201 Language = GetBestLanguageForDriver (DriverDiagnostics2->SupportedLanguages, Lang, FALSE);\r
202 Found = TRUE;\r
203 Status = DriverDiagnostics2->RunDiagnostics (\r
204 DriverDiagnostics2,\r
205 ControllerHandleList[ControllerHandleListLoop],\r
206 ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop],\r
207 (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
208 Language,\r
209 &ErrorType,\r
210 &OutBufferSize,\r
211 &OutBuffer\r
212 );\r
213 FreePool (Language);\r
361a8267 214 }\r
ba0014b9 215 }\r
47d20b54
MK
216\r
217 if (!Found && ((Lang == NULL) || ((Lang != NULL) && (Lang[2] != '-')))) {\r
218 Status = gBS->OpenProtocol (\r
219 DriverHandleList[DriverHandleListLoop],\r
220 &gEfiDriverDiagnosticsProtocolGuid,\r
221 (VOID **)&DriverDiagnostics,\r
222 gImageHandle,\r
223 NULL,\r
224 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
225 );\r
226 if (!EFI_ERROR (Status)) {\r
227 Language = GetBestLanguageForDriver (DriverDiagnostics->SupportedLanguages, Lang, FALSE);\r
228 Status = DriverDiagnostics->RunDiagnostics (\r
229 DriverDiagnostics,\r
230 ControllerHandleList[ControllerHandleListLoop],\r
231 ChildHandleList == NULL ? NULL : ChildHandleList[ChildHandleListLoop],\r
232 (EFI_DRIVER_DIAGNOSTIC_TYPE)Mode,\r
233 Language,\r
234 &ErrorType,\r
235 &OutBufferSize,\r
236 &OutBuffer\r
237 );\r
238 FreePool (Language);\r
361a8267 239 }\r
240 }\r
47d20b54
MK
241\r
242 if (EFI_ERROR (Status)) {\r
361a8267 243 Status2 = Status;\r
244 }\r
47d20b54
MK
245\r
246 HandleIndex1 = ConvertHandleToHandleIndex (DriverHandleList[DriverHandleListLoop]);\r
247 HandleIndex2 = ConvertHandleToHandleIndex (ControllerHandleList[ControllerHandleListLoop]);\r
248 ShellPrintHiiEx (\r
361a8267 249 -1,\r
250 -1,\r
4ba49616 251 NULL,\r
361a8267 252 STRING_TOKEN (STR_3P_RESULT),\r
253 gShellDriver1HiiHandle,\r
254 L"DrvDiag",\r
255 HandleIndex1,\r
256 HandleIndex2,\r
47d20b54
MK
257 ChildHandleList == NULL ? 0 : ConvertHandleToHandleIndex (ChildHandleList[ChildHandleListLoop]),\r
258 Status\r
259 );\r
260 if (OutBuffer != NULL) {\r
261 FreePool (OutBuffer);\r
361a8267 262 OutBuffer = NULL;\r
263 }\r
47d20b54
MK
264\r
265 if (ErrorType != NULL) {\r
266 FreePool (ErrorType);\r
361a8267 267 ErrorType = NULL;\r
4ba49616 268 }\r
269 } else {\r
47d20b54
MK
270 HandleIndex1 = ConvertHandleToHandleIndex (DriverHandleList[DriverHandleListLoop]);\r
271 HandleIndex2 = ConvertHandleToHandleIndex (ControllerHandleList[ControllerHandleListLoop]);\r
361a8267 272 //\r
273 // Print out the information that this set can be tested\r
274 //\r
47d20b54 275 ShellPrintHiiEx (\r
361a8267 276 -1,\r
277 -1,\r
4ba49616 278 NULL,\r
361a8267 279 STRING_TOKEN (STR_DRV_DIAG_ITEM_LINE),\r
280 gShellDriver1HiiHandle,\r
281 HandleIndex1,\r
282 HandleIndex2,\r
47d20b54
MK
283 ChildHandleList == NULL ? 0 : ConvertHandleToHandleIndex (ChildHandleList[ChildHandleListLoop])\r
284 );\r
4ba49616 285 }\r
361a8267 286\r
4ba49616 287 //\r
361a8267 288 // If we are doing a single pass with NULL child jump out after a single loop\r
4ba49616 289 //\r
361a8267 290 if (ChildHandleList == NULL) {\r
291 break;\r
292 }\r
4ba49616 293 }\r
47d20b54 294\r
361a8267 295 if (AllChilds) {\r
47d20b54
MK
296 SHELL_FREE_NON_NULL (ChildHandleList);\r
297 ChildHandleList = NULL;\r
298 ChildHandleListCount = 0;\r
4ba49616 299 }\r
300 }\r
47d20b54 301\r
361a8267 302 if (ControllerHandle == NULL) {\r
47d20b54 303 SHELL_FREE_NON_NULL (ControllerHandleList);\r
361a8267 304 ControllerHandleList = NULL;\r
305 ControllerHandleListCount = 0;\r
306 }\r
47d20b54 307 }\r
4ba49616 308 }\r
309\r
310 if (DriverHandleList != NULL) {\r
47d20b54 311 FreePool (DriverHandleList);\r
4ba49616 312 }\r
47d20b54 313\r
4ba49616 314 if (ControllerHandleList != NULL) {\r
47d20b54 315 FreePool (ControllerHandleList);\r
4ba49616 316 }\r
47d20b54 317\r
4ba49616 318 if (ChildHandleList != NULL) {\r
47d20b54 319 FreePool (ChildHandleList);\r
4ba49616 320 }\r
47d20b54 321\r
4ba49616 322 return (Status2);\r
323}\r
324\r
47d20b54
MK
325STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
326 { L"-c", TypeFlag },\r
327 { L"-s", TypeFlag },\r
328 { L"-e", TypeFlag },\r
329 { L"-m", TypeFlag },\r
330 { L"-l", TypeValue },\r
331 { NULL, TypeMax }\r
332};\r
4ba49616 333\r
361a8267 334/**\r
335 Function for 'drvdiag' command.\r
336\r
337 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
338 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
339**/\r
4ba49616 340SHELL_STATUS\r
341EFIAPI\r
342ShellCommandRunDrvDiag (\r
343 IN EFI_HANDLE ImageHandle,\r
344 IN EFI_SYSTEM_TABLE *SystemTable\r
345 )\r
346{\r
347 EFI_STATUS Status;\r
348 LIST_ENTRY *Package;\r
349 CHAR16 *ProblemParam;\r
350 SHELL_STATUS ShellStatus;\r
351 DRV_DIAG_TEST_MODE Mode;\r
352 CHAR8 *Language;\r
353 CONST CHAR16 *DriverHandleStr;\r
354 CONST CHAR16 *ControllerHandleStr;\r
355 CONST CHAR16 *ChildHandleStr;\r
356 CONST CHAR16 *Lang;\r
357 EFI_HANDLE Handle1;\r
358 EFI_HANDLE Handle2;\r
359 EFI_HANDLE Handle3;\r
361a8267 360 UINT64 Intermediate;\r
4ba49616 361\r
47d20b54
MK
362 ShellStatus = SHELL_SUCCESS;\r
363 Mode = TestModeMax;\r
364 Language = NULL;\r
4ba49616 365\r
366 //\r
367 // initialize the shell lib (we must be in non-auto-init...)\r
368 //\r
47d20b54
MK
369 Status = ShellInitialize ();\r
370 ASSERT_EFI_ERROR (Status);\r
4ba49616 371\r
47d20b54
MK
372 Status = CommandInit ();\r
373 ASSERT_EFI_ERROR (Status);\r
4ba49616 374\r
375 //\r
376 // parse the command line\r
377 //\r
378 Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
47d20b54
MK
379 if (EFI_ERROR (Status)) {\r
380 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
381 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"drvdiag", ProblemParam);\r
382 FreePool (ProblemParam);\r
4ba49616 383 ShellStatus = SHELL_INVALID_PARAMETER;\r
384 } else {\r
47d20b54 385 ASSERT (FALSE);\r
4ba49616 386 }\r
387 } else {\r
388 //\r
389 // if more than 3 'value' parameters (plus the name one) or we have any 2 mode flags\r
390 //\r
47d20b54
MK
391 if ( (ShellCommandLineGetCount (Package) > 4)\r
392 || (ShellCommandLineGetFlag (Package, L"-s") && ShellCommandLineGetFlag (Package, L"-e"))\r
393 || (ShellCommandLineGetFlag (Package, L"-s") && ShellCommandLineGetFlag (Package, L"-m"))\r
394 || (ShellCommandLineGetFlag (Package, L"-e") && ShellCommandLineGetFlag (Package, L"-m"))\r
395 )\r
396 {\r
4ba49616 397 //\r
398 // error for too many parameters\r
399 //\r
47d20b54 400 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"drvdiag");\r
4ba49616 401 ShellStatus = SHELL_INVALID_PARAMETER;\r
47d20b54
MK
402 } else if ( (ShellCommandLineGetFlag (Package, L"-s"))\r
403 || (ShellCommandLineGetFlag (Package, L"-e"))\r
404 || (ShellCommandLineGetFlag (Package, L"-m"))\r
405 )\r
406 {\r
4ba49616 407 //\r
1d322461 408 // Run the appropriate test\r
4ba49616 409 //\r
47d20b54 410 if (ShellCommandLineGetFlag (Package, L"-s")) {\r
361a8267 411 Mode = TestModeStandard;\r
47d20b54 412 } else if (ShellCommandLineGetFlag (Package, L"-e")) {\r
361a8267 413 Mode = TestModeExtended;\r
47d20b54 414 } else if (ShellCommandLineGetFlag (Package, L"-m")) {\r
361a8267 415 Mode = TestModeManufacturing;\r
4ba49616 416 } else {\r
47d20b54 417 ASSERT (FALSE);\r
4ba49616 418 }\r
419 } else {\r
420 //\r
421 // Do a listing of what's available to test\r
422 //\r
361a8267 423 Mode = TestModeList;\r
4ba49616 424 }\r
425\r
47d20b54
MK
426 Lang = ShellCommandLineGetValue (Package, L"-l");\r
427 if (ShellCommandLineGetFlag (Package, L"-l") && (Lang == NULL)) {\r
428 ASSERT (Language == NULL);\r
429 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvdiag", L"-l");\r
4ba49616 430 ShellCommandLineFreeVarList (Package);\r
431 return (SHELL_INVALID_PARAMETER);\r
361a8267 432 } else if (Lang != NULL) {\r
47d20b54
MK
433 Language = AllocateZeroPool (StrSize (Lang));\r
434 AsciiSPrint (Language, StrSize (Lang), "%S", Lang);\r
4ba49616 435 }\r
436\r
47d20b54
MK
437 DriverHandleStr = ShellCommandLineGetRawValue (Package, 1);\r
438 ControllerHandleStr = ShellCommandLineGetRawValue (Package, 2);\r
439 ChildHandleStr = ShellCommandLineGetRawValue (Package, 3);\r
4ba49616 440\r
441 if (DriverHandleStr == NULL) {\r
442 Handle1 = NULL;\r
443 } else {\r
47d20b54
MK
444 ShellConvertStringToUint64 (DriverHandleStr, &Intermediate, TRUE, FALSE);\r
445 Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
4ba49616 446 }\r
47d20b54 447\r
4ba49616 448 if (ControllerHandleStr == NULL) {\r
449 Handle2 = NULL;\r
450 } else {\r
47d20b54
MK
451 ShellConvertStringToUint64 (ControllerHandleStr, &Intermediate, TRUE, FALSE);\r
452 Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
4ba49616 453 }\r
47d20b54 454\r
4ba49616 455 if (ChildHandleStr == NULL) {\r
456 Handle3 = NULL;\r
457 } else {\r
47d20b54
MK
458 ShellConvertStringToUint64 (ChildHandleStr, &Intermediate, TRUE, FALSE);\r
459 Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate);\r
4ba49616 460 }\r
461\r
462 Status = DoDiagnostics (\r
47d20b54
MK
463 Mode,\r
464 Language,\r
465 ShellCommandLineGetFlag (Package, L"-c"),\r
466 Handle1,\r
467 Handle2,\r
468 Handle3\r
469 );\r
4ba49616 470\r
47d20b54
MK
471 SHELL_FREE_NON_NULL (Language);\r
472 ShellCommandLineFreeVarList (Package);\r
4ba49616 473 }\r
47d20b54 474\r
4ba49616 475 if (ShellStatus == SHELL_SUCCESS) {\r
476 if (Status == EFI_SECURITY_VIOLATION) {\r
477 ShellStatus = SHELL_SECURITY_VIOLATION;\r
478 } else if (Status == EFI_INVALID_PARAMETER) {\r
479 ShellStatus = SHELL_INVALID_PARAMETER;\r
480 } else if (Status == EFI_NOT_FOUND) {\r
481 ShellStatus = SHELL_NOT_FOUND;\r
47d20b54 482 } else if (EFI_ERROR (Status)) {\r
4ba49616 483 ShellStatus = SHELL_NOT_FOUND;\r
484 }\r
485 }\r
486\r
487 return (ShellStatus);\r
488}\r