]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.c
ShellPkg: Update Acpiview GTDT parser to ACPI 6.4
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / UefiShellAcpiViewCommandLib.c
index c3942ad24e5b9c885dc78fbe97434a87147e306e..dcc98f1f1345cdf2d085060f0967eecf7342a7c7 100644 (file)
@@ -1,12 +1,13 @@
 /** @file\r
   Main file for 'acpiview' Shell command function.\r
 \r
-  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.<BR>\r
+  Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.<BR>\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #include <Guid/ShellLibHiiGuid.h>\r
 #include <IndustryStandard/Acpi.h>\r
+#include <IndustryStandard/ArmErrorSourceTable.h>\r
 \r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/HiiLib.h>\r
 #include <Library/ShellLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiLib.h>\r
+#include <Library/AcpiViewCommandLib.h>\r
 #include <Uefi.h>\r
 \r
 #include "AcpiParser.h"\r
 #include "AcpiTableParser.h"\r
 #include "AcpiView.h"\r
 #include "AcpiViewConfig.h"\r
-#include "UefiShellAcpiViewCommandLib.h"\r
 \r
 CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";\r
+EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;\r
 \r
 /**\r
   An array of acpiview command line parameters.\r
@@ -45,17 +47,21 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
 STATIC\r
 CONST\r
 ACPI_TABLE_PARSER ParserList[] = {\r
+  {EFI_ACPI_6_3_ARM_ERROR_SOURCE_TABLE_SIGNATURE, ParseAcpiAest},\r
   {EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE, ParseAcpiBgrt},\r
   {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, ParseAcpiDbg2},\r
   {EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,\r
    ParseAcpiDsdt},\r
   {EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, ParseAcpiFacs},\r
   {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiFadt},\r
-  {EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt},\r
+  {EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt},\r
+  {EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE, ParseAcpiHmat},\r
   {EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE, ParseAcpiIort},\r
   {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiMadt},\r
   {EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,\r
    ParseAcpiMcfg},\r
+  {EFI_ACPI_6_2_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE,\r
+   ParseAcpiPcct},\r
   {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,\r
    ParseAcpiPptt},\r
   {RSDP_TABLE_INFO, ParseAcpiRsdp},\r
@@ -98,6 +104,64 @@ RegisterAllParsers (
   return Status;\r
 }\r
 \r
+/**\r
+  Dump a buffer to a file. Print error message if a file cannot be created.\r
+\r
+  @param[in] FileName   The filename that shall be created to contain the buffer.\r
+  @param[in] Buffer     Pointer to buffer that shall be dumped.\r
+  @param[in] BufferSize The size of buffer to be dumped in bytes.\r
+\r
+  @return The number of bytes that were written\r
+**/\r
+UINTN\r
+EFIAPI\r
+ShellDumpBufferToFile (\r
+  IN CONST CHAR16* FileNameBuffer,\r
+  IN CONST VOID*   Buffer,\r
+  IN CONST UINTN   BufferSize\r
+  )\r
+{\r
+  EFI_STATUS          Status;\r
+  SHELL_FILE_HANDLE   DumpFileHandle;\r
+  UINTN               TransferBytes;\r
+\r
+  Status = ShellOpenFileByName (\r
+             FileNameBuffer,\r
+             &DumpFileHandle,\r
+             EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,\r
+             0\r
+             );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN (STR_GEN_READONLY_MEDIA),\r
+      gShellAcpiViewHiiHandle,\r
+      L"acpiview"\r
+      );\r
+    return 0;\r
+  }\r
+\r
+  TransferBytes = BufferSize;\r
+  Status = ShellWriteFile (\r
+             DumpFileHandle,\r
+             &TransferBytes,\r
+             (VOID *) Buffer\r
+             );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    Print (L"ERROR: Failed to write binary file.\n");\r
+    TransferBytes = 0;\r
+  } else {\r
+    Print (L"DONE.\n");\r
+  }\r
+\r
+  ShellCloseFile (&DumpFileHandle);\r
+  return TransferBytes;\r
+}\r
+\r
 /**\r
   Return the file name of the help text file if not using HII.\r
 \r