/** @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
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
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