// /**
//
// Copyright (c) 2016 - 2023, Arm Limited. All rights reserved.<BR>
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Module Name:
//
// UefiShellAcpiViewCommandLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell acpiview command
//
//
// */

/=#

#langdef   en-US "english"

#string STR_GEN_PROBLEM           #language en-US "%H%s%N: Unknown flag - '%H%s%N'\r\n"
#string STR_GEN_NO_VALUE          #language en-US "%H%s%N: Missing argument for flag - '%H%s%N'\r\n"
#string STR_GEN_TOO_MANY          #language en-US "%H%s%N: Too many arguments.\r\n"
#string STR_GEN_MISSING_OPTION    #language en-US "%H%s%N: Missing option '%H%s%N' required by flag - '%H%s%N'\r\n"
#string STR_GEN_READONLY_MEDIA    #language en-US "%H%s%N: Unable to write to the current directory, check if media is writable.\r\n"

#string STR_GET_HELP_ACPIVIEW   #language en-US ""
".TH acpiview 0 "Display ACPI information."\r\n"
".SH NAME\r\n"
"Display ACPI Table information.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"ACPIVIEW [[-?] | [[[[-l] | [-s AcpiTable [-d]]] [-q] [-h]] [-r Spec]]]\r\n"
" \r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -l - Display list of installed ACPI Tables.\r\n"
"  -s - Display only the specified AcpiTable type and only support single\r\n"
"       invocation option.\r\n"
"         AcpiTable    : The required ACPI Table type.\r\n"
"  -d - Generate a binary file dump of the specified AcpiTable.\r\n"
"  -q - Quiet. Suppress errors and warnings. Disables consistency checks.\r\n"
"  -h - Enable colour highlighting.\r\n"
"  -r - Validate that all required ACPI tables are installed\r\n"
"         Spec  : Specification to validate against.\r\n"
"                 For Arm, the possible values are:\r\n"
"                   0 - Server Base Boot Requirements v1.0\r\n"
"                   1 - Server Base Boot Requirements v1.1\r\n"
"                   2 - Server Base Boot Requirements v1.2\r\n"
"  -? - Show help.\r\n"
" \r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"  This program is provided to allow examination of ACPI table values from the\r\n"
"  UEFI Shell.  This can help with investigations, especially at that stage\r\n"
"  where the tables are not enabling an OS to boot.\r\n"
"  The program is not exhaustive, and only encapsulates detailed knowledge of a\r\n"
"  limited number of table types.\r\n"
" \r\n"
"  Default behaviour is to display the content of all tables installed.\r\n"
"  'Known' table types (listed in NOTES below) will be parsed and displayed\r\n"
"  with descriptions and field values.  Where appropriate a degree of\r\n"
"  consistency checking is done and errors may be reported in the output.\r\n"
"  Other table types will be displayed as an array of Hexadecimal bytes.\r\n"
" \r\n"
"  To facilitate debugging, the -s and -d options can be used to generate a\r\n"
"  binary file image of a table that can be copied elsewhere for investigation\r\n"
"  using tools such as those provided by acpica.org.  This is especially\r\n"
"  relevant for AML type tables like DSDT and SSDT.\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The AcpiTable parameter can match any installed table type.\r\n"
"     Tables without specific handling will be displayed as a raw hex dump (or\r\n"
"     dumped to a file if -d is used).\r\n"
"  2. -s option supports to display the specified AcpiTable type that is present\r\n"
"     in the system. For normal type AcpiTable, it would display the data of the\r\n"
"     AcpiTable and AcpiTable header. The following type may contain header type\r\n"
"     other than AcpiTable header. The actual header can refer to the ACPI spec\r\n"
"     6.2\r\n"
"     Extra A. Particular types:\r\n"
"       AEST  - Arm Error Source Table\r\n"
"       APIC  - Multiple APIC Description Table (MADT)\r\n"
"       APMT  - Arm Performance Monitoring Unit Table\r\n"
"       BGRT  - Boot Graphics Resource Table\r\n"
"       DBG2  - Debug Port Table 2\r\n"
"       DSDT  - Differentiated System Description Table\r\n"
"       FACP  - Fixed ACPI Description Table (FADT)\r\n"
"       GTDT  - Generic Timer Description Table\r\n"
"       HMAT  - Heterogeneous Memory Attributes Table\r\n"
"       IORT  - IO Remapping Table\r\n"
"       MCFG  - Memory Mapped Config Space Base Address Description Table\r\n"
"       MPAM  - Memory System Resource Partitioning and Monitoring Table\r\n"
"       PPTT  - Processor Properties Topology Table\r\n"
"       RIMT  - RISC-V IO Mapping Table\r\n"
"       RSDP  - Root System Description Pointer\r\n"
"       SLIT  - System Locality Information Table\r\n"
"       SPCR  - Serial Port Console Redirection Table\r\n"
"       SRAT  - System Resource Affinity Table\r\n"
"       SSDT  - Secondary SystemDescription Table\r\n"
"       XSDT  - Extended System Description Table\r\n"
" \r\n"
".SH STANDARDS\r\n"
" \r\n"
"  Table details correspond to those in 'Advanced Configuration and Power\r\n"
"  Interface Specification' Version 6.2 Errata A, [September 2017]\r\n"
"  (http://www.uefi.org/sites/default/files/resources/ACPI%206_2_A_Sept29.pdf)\r\n"
" \r\n"
"  NOTE: The nature of the ACPI standard means that almost all tables in 6.1\r\n"
"        will be 'backwards compatible' with prior version of the specification\r\n"
"        in terms of structure, so formatted output should be correct.  The main\r\n"
"        exception will be that previously 'reserved' fields will be reported\r\n"
"        with new names, where they have been added in later versions of the\r\n"
"        specification.\r\n"
" \r\n"
".SH EXAMPLES\r\n"
" \r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display a list of the installed table types:\r\n"
"    fs0:\> acpiview -l\r\n"
" \r\n"
"  * To parse and display a specific table type:\r\n"
"    fs0:\> acpiview -s GTDT\r\n"
" \r\n"
"  * To save a binary dump of the contents of a table to a file\r\n"
"    in the current working directory:\r\n"
"    fs0:\> acpiview -s DSDT -d\r\n"
" \r\n"
"  * To display contents of all ACPI tables:\r\n"
"    fs0:\> acpiview\r\n"
" \r\n"
"  * To check if all Server Base Boot Requirements (SBBR) v1.2 mandatory\r\n"
"    ACPI tables are installed (Arm only):\r\n"
"    fs0:\> acpiview -r 2\r\n"
" \r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             Data was displayed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   ACPI Table parsing failed.\r\n"
" \r\n"

