]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c
ShellPkg: Display VENDOR_ID in ASCII when parsing PPTT
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / AcpiView.c
CommitLineData
a6eaba4d 1/** @file\r
ee4dc24f
RN
2\r
3 Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.\r
56ba3746 4 SPDX-License-Identifier: BSD-2-Clause-Patent\r
ee4dc24f
RN
5**/\r
6\r
7#include <Library/PrintLib.h>\r
8#include <Library/UefiLib.h>\r
9#include <Library/ShellLib.h>\r
10#include <Library/UefiBootServicesTableLib.h>\r
11#include <Library/BaseMemoryLib.h>\r
12#include <Library/DebugLib.h>\r
13#include <Library/MemoryAllocationLib.h>\r
14#include "AcpiParser.h"\r
15#include "AcpiTableParser.h"\r
16#include "AcpiView.h"\r
17#include "UefiShellAcpiViewCommandLib.h"\r
18\r
19EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;\r
20\r
21// Report variables\r
22STATIC UINT32 mSelectedAcpiTable;\r
23STATIC CONST CHAR16* mSelectedAcpiTableName;\r
24STATIC BOOLEAN mSelectedAcpiTableFound;\r
25STATIC EREPORT_OPTION mReportType;\r
26STATIC UINT32 mTableCount;\r
27STATIC UINT32 mBinTableCount;\r
28STATIC BOOLEAN mVerbose;\r
29STATIC BOOLEAN mConsistencyCheck;\r
30STATIC BOOLEAN mColourHighlighting;\r
31\r
a6eaba4d
DB
32/**\r
33 An array of acpiview command line parameters.\r
34**/\r
ee4dc24f
RN
35STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
36 {L"/?", TypeFlag},\r
37 {L"-c", TypeFlag},\r
38 {L"-d", TypeFlag},\r
39 {L"-h", TypeValue},\r
40 {L"-l", TypeFlag},\r
41 {L"-s", TypeValue},\r
42 {L"-v", TypeFlag},\r
43 {NULL, TypeMax}\r
44};\r
45\r
a6eaba4d
DB
46/**\r
47 This function returns the colour highlighting status.\r
ee4dc24f
RN
48\r
49 @retval TRUE if colour highlighting is enabled.\r
a6eaba4d 50**/\r
ee4dc24f
RN
51BOOLEAN\r
52GetColourHighlighting (\r
53 VOID\r
54 )\r
55{\r
56 return mColourHighlighting;\r
57}\r
58\r
a6eaba4d
DB
59/**\r
60 This function sets the colour highlighting status.\r
ee4dc24f 61\r
a6eaba4d
DB
62 @param Highlight The Highlight status.\r
63\r
64**/\r
ee4dc24f
RN
65VOID\r
66SetColourHighlighting (\r
67 BOOLEAN Highlight\r
68 )\r
69{\r
70 mColourHighlighting = Highlight;\r
71}\r
72\r
a6eaba4d
DB
73/**\r
74 This function returns the report options.\r
ee4dc24f
RN
75\r
76 @retval Returns the report option.\r
a6eaba4d 77**/\r
ee4dc24f
RN
78STATIC\r
79EREPORT_OPTION\r
80GetReportOption (\r
81 VOID\r
82 )\r
83{\r
84 return mReportType;\r
85}\r
86\r
a6eaba4d
DB
87/**\r
88 This function returns the selected ACPI table.\r
ee4dc24f
RN
89\r
90 @retval Returns signature of the selected ACPI table.\r
a6eaba4d 91**/\r
ee4dc24f
RN
92STATIC\r
93UINT32\r
94GetSelectedAcpiTable (\r
95 VOID\r
96 )\r
97{\r
98 return mSelectedAcpiTable;\r
99}\r
100\r
a6eaba4d
DB
101/**\r
102 This function dumps the ACPI table to a file.\r
103\r
ee4dc24f
RN
104 @param [in] Ptr Pointer to the ACPI table data.\r
105 @param [in] Length The length of the ACPI table.\r
106\r
107 @retval TRUE Success.\r
108 @retval FALSE Failure.\r
a6eaba4d 109**/\r
ee4dc24f
RN
110STATIC\r
111BOOLEAN\r
112DumpAcpiTableToFile (\r
113 IN CONST UINT8* Ptr,\r
114 IN CONST UINTN Length\r
115 )\r
116{\r
117 EFI_STATUS Status;\r
118 CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];\r
f75c7478
DB
119 SHELL_FILE_HANDLE DumpFileHandle;\r
120 UINTN TransferBytes;\r
121\r
122 DumpFileHandle = NULL;\r
123 TransferBytes = Length;\r
ee4dc24f
RN
124\r
125 UnicodeSPrint (\r
126 FileNameBuffer,\r
127 sizeof (FileNameBuffer),\r
128 L".\\%s%04d.bin",\r
129 mSelectedAcpiTableName,\r
130 mBinTableCount++\r
131 );\r
132\r
133 Status = ShellOpenFileByName (\r
134 FileNameBuffer,\r
135 &DumpFileHandle,\r
136 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,\r
137 0\r
138 );\r
139 if (EFI_ERROR (Status)) {\r
140 ShellPrintHiiEx (\r
141 -1,\r
142 -1,\r
143 NULL,\r
144 STRING_TOKEN (STR_GEN_READONLY_MEDIA),\r
145 gShellAcpiViewHiiHandle,\r
146 L"acpiview"\r
147 );\r
148 return FALSE;\r
149 }\r
150\r
151 Print (L"Dumping ACPI table to : %s ... ", FileNameBuffer);\r
152\r
153 Status = ShellWriteFile (\r
154 DumpFileHandle,\r
155 &TransferBytes,\r
156 (VOID*)Ptr\r
157 );\r
158 if (EFI_ERROR (Status)) {\r
159 Print (L"ERROR: Failed to dump table to binary file.\n");\r
160 TransferBytes = 0;\r
161 } else {\r
162 Print (L"DONE.\n");\r
163 }\r
164\r
165 ShellCloseFile (&DumpFileHandle);\r
166 return (Length == TransferBytes);\r
167}\r
168\r
a6eaba4d
DB
169/**\r
170 This function processes the table reporting options for the ACPI table.\r
ee4dc24f
RN
171\r
172 @param [in] Signature The ACPI table Signature.\r
173 @param [in] TablePtr Pointer to the ACPI table data.\r
174 @param [in] Length The length fo the ACPI table.\r
175\r
176 @retval Returns TRUE if the ACPI table should be traced.\r
a6eaba4d 177**/\r
ee4dc24f
RN
178BOOLEAN\r
179ProcessTableReportOptions (\r
180 IN CONST UINT32 Signature,\r
181 IN CONST UINT8* TablePtr,\r
182 IN CONST UINT32 Length\r
183 )\r
184{\r
185 UINTN OriginalAttribute;\r
f75c7478
DB
186 UINT8* SignaturePtr;\r
187 BOOLEAN Log;\r
188 BOOLEAN HighLight;\r
189\r
190 SignaturePtr = (UINT8*)(UINTN)&Signature;\r
191 Log = FALSE;\r
192 HighLight = GetColourHighlighting ();\r
193\r
ee4dc24f 194 switch (GetReportOption ()) {\r
f75c7478 195 case ReportAll:\r
ee4dc24f
RN
196 Log = TRUE;\r
197 break;\r
f75c7478 198 case ReportSelected:\r
ee4dc24f
RN
199 if (Signature == GetSelectedAcpiTable ()) {\r
200 Log = TRUE;\r
201 mSelectedAcpiTableFound = TRUE;\r
202 }\r
203 break;\r
f75c7478 204 case ReportTableList:\r
ee4dc24f
RN
205 if (mTableCount == 0) {\r
206 if (HighLight) {\r
207 OriginalAttribute = gST->ConOut->Mode->Attribute;\r
208 gST->ConOut->SetAttribute (\r
209 gST->ConOut,\r
210 EFI_TEXT_ATTR(EFI_CYAN,\r
211 ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))\r
212 );\r
213 }\r
214 Print (L"\nInstalled Table(s):\n");\r
215 if (HighLight) {\r
216 gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);\r
217 }\r
218 }\r
219 Print (\r
220 L"\t%4d. %c%c%c%c\n",\r
221 ++mTableCount,\r
222 SignaturePtr[0],\r
223 SignaturePtr[1],\r
224 SignaturePtr[2],\r
225 SignaturePtr[3]\r
226 );\r
227 break;\r
f75c7478 228 case ReportDumpBinFile:\r
ee4dc24f
RN
229 if (Signature == GetSelectedAcpiTable ()) {\r
230 mSelectedAcpiTableFound = TRUE;\r
231 DumpAcpiTableToFile (TablePtr, Length);\r
232 }\r
233 break;\r
f75c7478 234 case ReportMax:\r
ee4dc24f
RN
235 // We should never be here.\r
236 // This case is only present to prevent compiler warning.\r
237 break;\r
238 } // switch\r
239\r
240 if (Log) {\r
241 if (HighLight) {\r
242 OriginalAttribute = gST->ConOut->Mode->Attribute;\r
243 gST->ConOut->SetAttribute (\r
244 gST->ConOut,\r
245 EFI_TEXT_ATTR(EFI_LIGHTBLUE,\r
246 ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))\r
247 );\r
248 }\r
249 Print (\r
250 L"\n\n --------------- %c%c%c%c Table --------------- \n\n",\r
251 SignaturePtr[0],\r
252 SignaturePtr[1],\r
253 SignaturePtr[2],\r
254 SignaturePtr[3]\r
255 );\r
256 if (HighLight) {\r
257 gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);\r
258 }\r
259 }\r
260\r
261 return Log;\r
262}\r
263\r
a6eaba4d
DB
264/**\r
265 This function converts a string to ACPI table signature.\r
ee4dc24f
RN
266\r
267 @param [in] Str Pointer to the string to be converted to the\r
268 ACPI table signature.\r
269\r
270 @retval The ACPI table signature.\r
a6eaba4d 271**/\r
ee4dc24f
RN
272STATIC\r
273UINT32\r
274ConvertStrToAcpiSignature (\r
275 IN CONST CHAR16* Str\r
276 )\r
277{\r
f75c7478 278 UINT8 Index;\r
ee4dc24f
RN
279 CHAR8 Ptr[4];\r
280\r
81038d50 281 ZeroMem (Ptr, sizeof (Ptr));\r
f75c7478
DB
282 Index = 0;\r
283\r
ee4dc24f
RN
284 // Convert to Upper case and convert to ASCII\r
285 while ((Index < 4) && (Str[Index] != 0)) {\r
286 if (Str[Index] >= L'a' && Str[Index] <= L'z') {\r
287 Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));\r
288 } else {\r
289 Ptr[Index] = (CHAR8)Str[Index];\r
290 }\r
291 Index++;\r
292 }\r
293 return *(UINT32*)Ptr;\r
294}\r
295\r
a6eaba4d
DB
296/**\r
297 This function iterates the configuration table entries in the\r
298 system table, retrieves the RSDP pointer and starts parsing the ACPI tables.\r
ee4dc24f
RN
299\r
300 @param [in] SystemTable Pointer to the EFI system table.\r
301\r
302 @retval Returns EFI_NOT_FOUND if the RSDP pointer is not found.\r
303 Returns EFI_UNSUPPORTED if the RSDP version is less than 2.\r
304 Returns EFI_SUCCESS if successful.\r
a6eaba4d 305**/\r
ee4dc24f
RN
306STATIC\r
307EFI_STATUS\r
308EFIAPI\r
309AcpiView (\r
310 IN EFI_SYSTEM_TABLE* SystemTable\r
311 )\r
312{\r
313 EFI_STATUS Status;\r
314 UINTN Index;\r
315 EFI_CONFIGURATION_TABLE* EfiConfigurationTable;\r
316 BOOLEAN FoundAcpiTable;\r
317 UINTN OriginalAttribute;\r
318 UINTN PrintAttribute;\r
319 EREPORT_OPTION ReportOption;\r
320 UINT8* RsdpPtr;\r
321 UINT32 RsdpLength;\r
322 UINT8 RsdpRevision;\r
323 PARSE_ACPI_TABLE_PROC RsdpParserProc;\r
324 BOOLEAN Trace;\r
325\r
326 // Search the table for an entry that matches the ACPI Table Guid\r
327 FoundAcpiTable = FALSE;\r
328 for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {\r
329 if (CompareGuid (&gEfiAcpiTableGuid,\r
330 &(SystemTable->ConfigurationTable[Index].VendorGuid))) {\r
331 EfiConfigurationTable = &SystemTable->ConfigurationTable[Index];\r
332 FoundAcpiTable = TRUE;\r
333 break;\r
334 }\r
335 }\r
336\r
337 if (FoundAcpiTable) {\r
338 RsdpPtr = (UINT8*)EfiConfigurationTable->VendorTable;\r
339\r
340 // The RSDP revision is 1 byte starting at offset 15\r
341 RsdpRevision = *(RsdpPtr + RSDP_REVISION_OFFSET);\r
342\r
343 if (RsdpRevision < 2) {\r
344 Print (\r
345 L"ERROR: RSDP version less than 2 is not supported.\n"\r
346 );\r
347 return EFI_UNSUPPORTED;\r
348 }\r
349\r
350 // The RSDP length is 4 bytes starting at offset 20\r
351 RsdpLength = *(UINT32*)(RsdpPtr + RSDP_LENGTH_OFFSET);\r
352\r
353 Trace = ProcessTableReportOptions (RSDP_TABLE_INFO, RsdpPtr, RsdpLength);\r
354\r
355 Status = GetParser (RSDP_TABLE_INFO, &RsdpParserProc);\r
356 if (EFI_ERROR (Status)) {\r
357 Print (\r
358 L"ERROR: No registered parser found for RSDP.\n"\r
359 );\r
360 return Status;\r
361 }\r
362\r
363 RsdpParserProc (\r
364 Trace,\r
365 RsdpPtr,\r
366 RsdpLength,\r
367 RsdpRevision\r
368 );\r
369\r
370 } else {\r
371 IncrementErrorCount ();\r
372 Print (\r
373 L"ERROR: Failed to find ACPI Table Guid in System Configuration Table.\n"\r
374 );\r
375 return EFI_NOT_FOUND;\r
376 }\r
377\r
378 ReportOption = GetReportOption ();\r
f75c7478
DB
379 if (ReportTableList != ReportOption) {\r
380 if (((ReportSelected == ReportOption) ||\r
381 (ReportDumpBinFile == ReportOption)) &&\r
ee4dc24f
RN
382 (!mSelectedAcpiTableFound)) {\r
383 Print (L"\nRequested ACPI Table not found.\n");\r
f75c7478 384 } else if (ReportDumpBinFile != ReportOption) {\r
ee4dc24f
RN
385 OriginalAttribute = gST->ConOut->Mode->Attribute;\r
386\r
387 Print (L"\nTable Statistics:\n");\r
388\r
389 if (GetColourHighlighting ()) {\r
390 PrintAttribute = (GetErrorCount () > 0) ?\r
391 EFI_TEXT_ATTR (\r
392 EFI_RED,\r
393 ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)\r
394 ) :\r
395 OriginalAttribute;\r
396 gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);\r
397 }\r
398 Print (L"\t%d Error(s)\n", GetErrorCount ());\r
399\r
400 if (GetColourHighlighting ()) {\r
401 PrintAttribute = (GetWarningCount () > 0) ?\r
402 EFI_TEXT_ATTR (\r
403 EFI_RED,\r
404 ((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)\r
405 ) :\r
406 OriginalAttribute;\r
407\r
408 gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);\r
409 }\r
410 Print (L"\t%d Warning(s)\n", GetWarningCount ());\r
411\r
412 if (GetColourHighlighting ()) {\r
413 gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);\r
414 }\r
415 }\r
416 }\r
417 return EFI_SUCCESS;\r
418}\r
419\r
420/**\r
421 Function for 'acpiview' command.\r
422\r
423 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
424 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
a6eaba4d 425**/\r
ee4dc24f
RN
426SHELL_STATUS\r
427EFIAPI\r
428ShellCommandRunAcpiView (\r
429 IN EFI_HANDLE ImageHandle,\r
430 IN EFI_SYSTEM_TABLE* SystemTable\r
431 )\r
432{\r
433 EFI_STATUS Status;\r
f75c7478
DB
434 SHELL_STATUS ShellStatus;\r
435 LIST_ENTRY* Package;\r
ee4dc24f
RN
436 CHAR16* ProblemParam;\r
437 CONST CHAR16* Temp;\r
438 CHAR8 ColourOption[8];\r
f75c7478 439 SHELL_FILE_HANDLE TmpDumpFileHandle;\r
ee4dc24f
RN
440\r
441 // Set Defaults\r
f75c7478 442 mReportType = ReportAll;\r
ee4dc24f
RN
443 mTableCount = 0;\r
444 mBinTableCount = 0;\r
445 mSelectedAcpiTable = 0;\r
446 mSelectedAcpiTableName = NULL;\r
447 mSelectedAcpiTableFound = FALSE;\r
448 mVerbose = TRUE;\r
449 mConsistencyCheck = TRUE;\r
450\r
f75c7478
DB
451 ShellStatus = SHELL_SUCCESS;\r
452 Package = NULL;\r
453 TmpDumpFileHandle = NULL;\r
454\r
ee4dc24f
RN
455 // Reset The error/warning counters\r
456 ResetErrorCount ();\r
457 ResetWarningCount ();\r
458\r
459 Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
460 if (EFI_ERROR (Status)) {\r
461 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
462 ShellPrintHiiEx (\r
463 -1,\r
464 -1,\r
465 NULL,\r
466 STRING_TOKEN (STR_GEN_PROBLEM),\r
467 gShellAcpiViewHiiHandle,\r
468 L"acpiview",\r
469 ProblemParam\r
470 );\r
471 FreePool (ProblemParam);\r
472 } else {\r
473 Print (L"acpiview: Error processing input parameter(s)\n");\r
474 }\r
475 ShellStatus = SHELL_INVALID_PARAMETER;\r
476 } else {\r
477 if (ShellCommandLineGetCount (Package) > 1) {\r
478 ShellPrintHiiEx (\r
479 -1,\r
480 -1,\r
481 NULL,\r
482 STRING_TOKEN (STR_GEN_TOO_MANY),\r
483 gShellAcpiViewHiiHandle,\r
484 L"acpiview"\r
485 );\r
486 ShellStatus = SHELL_INVALID_PARAMETER;\r
487 } else if (ShellCommandLineGetFlag (Package, L"-?")) {\r
488 ShellPrintHiiEx (\r
489 -1,\r
490 -1,\r
491 NULL,\r
492 STRING_TOKEN (STR_GET_HELP_ACPIVIEW),\r
493 gShellAcpiViewHiiHandle,\r
494 L"acpiview"\r
495 );\r
496 } else if (ShellCommandLineGetFlag (Package, L"-s") &&\r
497 ShellCommandLineGetValue (Package, L"-s") == NULL) {\r
498 ShellPrintHiiEx (\r
499 -1,\r
500 -1,\r
501 NULL,\r
502 STRING_TOKEN (STR_GEN_NO_VALUE),\r
503 gShellAcpiViewHiiHandle,\r
504 L"acpiview",\r
505 L"-s"\r
506 );\r
507 ShellStatus = SHELL_INVALID_PARAMETER;\r
508 } else if ((ShellCommandLineGetFlag (Package, L"-s") &&\r
509 ShellCommandLineGetFlag (Package, L"-l"))) {\r
510 ShellPrintHiiEx (\r
511 -1,\r
512 -1,\r
513 NULL,\r
514 STRING_TOKEN (STR_GEN_TOO_MANY),\r
515 gShellAcpiViewHiiHandle,\r
516 L"acpiview"\r
517 );\r
518 ShellStatus = SHELL_INVALID_PARAMETER;\r
519 } else if (ShellCommandLineGetFlag (Package, L"-h") &&\r
520 ShellCommandLineGetValue (Package, L"-h") == NULL) {\r
521 ShellPrintHiiEx (\r
522 -1,\r
523 -1,\r
524 NULL,\r
525 STRING_TOKEN (STR_GEN_NO_VALUE),\r
526 gShellAcpiViewHiiHandle,\r
527 L"acpiview",\r
528 L"-h"\r
529 );\r
530 ShellStatus = SHELL_INVALID_PARAMETER;\r
531 } else if (ShellCommandLineGetFlag (Package, L"-d") &&\r
532 !ShellCommandLineGetFlag (Package, L"-s")) {\r
533 ShellPrintHiiEx (\r
534 -1,\r
535 -1,\r
536 NULL,\r
537 STRING_TOKEN (STR_GEN_MISSING_OPTION),\r
538 gShellAcpiViewHiiHandle,\r
539 L"acpiview",\r
540 L"-s",\r
541 L"-d"\r
542 );\r
543 ShellStatus = SHELL_INVALID_PARAMETER;\r
544 } else {\r
545 // Check if the colour option is set\r
546 Temp = ShellCommandLineGetValue (Package, L"-h");\r
547 if (Temp != NULL) {\r
548 UnicodeStrToAsciiStrS (Temp, ColourOption, sizeof (ColourOption));\r
549 if ((AsciiStriCmp (ColourOption, "ON") == 0) ||\r
550 (AsciiStriCmp (ColourOption, "TRUE") == 0)) {\r
551 SetColourHighlighting (TRUE);\r
552 } else if ((AsciiStriCmp (ColourOption, "OFF") == 0) ||\r
553 (AsciiStriCmp (ColourOption, "FALSE") == 0)) {\r
554 SetColourHighlighting (FALSE);\r
555 }\r
556 }\r
557\r
558 if (ShellCommandLineGetFlag (Package, L"-l")) {\r
f75c7478 559 mReportType = ReportTableList;\r
ee4dc24f
RN
560 } else {\r
561 mSelectedAcpiTableName = ShellCommandLineGetValue (Package, L"-s");\r
562 if (mSelectedAcpiTableName != NULL) {\r
563 mSelectedAcpiTable = (UINT32)ConvertStrToAcpiSignature (\r
564 mSelectedAcpiTableName\r
565 );\r
f75c7478 566 mReportType = ReportSelected;\r
ee4dc24f
RN
567\r
568 if (ShellCommandLineGetFlag (Package, L"-d")) {\r
569 // Create a temporary file to check if the media is writable.\r
570 CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];\r
f75c7478 571 mReportType = ReportDumpBinFile;\r
ee4dc24f
RN
572\r
573 UnicodeSPrint (\r
574 FileNameBuffer,\r
575 sizeof (FileNameBuffer),\r
576 L".\\%s%04d.tmp",\r
577 mSelectedAcpiTableName,\r
578 mBinTableCount\r
579 );\r
580\r
581 Status = ShellOpenFileByName (\r
582 FileNameBuffer,\r
583 &TmpDumpFileHandle,\r
584 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |\r
585 EFI_FILE_MODE_CREATE,\r
586 0\r
587 );\r
588\r
589 if (EFI_ERROR (Status)) {\r
590 ShellStatus = SHELL_INVALID_PARAMETER;\r
591 TmpDumpFileHandle = NULL;\r
592 ShellPrintHiiEx (\r
593 -1,\r
594 -1,\r
595 NULL,\r
596 STRING_TOKEN (STR_GEN_READONLY_MEDIA),\r
597 gShellAcpiViewHiiHandle,\r
598 L"acpiview"\r
599 );\r
600 goto Done;\r
601 }\r
602 // Delete Temporary file.\r
603 ShellDeleteFile (&TmpDumpFileHandle);\r
604 } // -d\r
605 } // -s\r
606 }\r
607\r
608 // Parse ACPI Table information\r
609 Status = AcpiView (SystemTable);\r
610 if (EFI_ERROR (Status)) {\r
611 ShellStatus = SHELL_NOT_FOUND;\r
612 }\r
613 }\r
614 }\r
615\r
616Done:\r
617 if (Package != NULL) {\r
618 ShellCommandLineFreeVarList (Package);\r
619 }\r
620 return ShellStatus;\r
621}\r