// /**
//
// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved.<BR>
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// 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]]] [-c] [-v] [-h Highlight]]\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.\r\n"
"         AcpiTable    : The required ACPI Table type.\r\n"
"  -d - Generate a binary file dump of the specified AcpiTable.\r\n"
"  -c - Consistency checking (enabled by default).\r\n"
"  -v - Display verbose data (enabled by default).\r\n"
"  -h - Enable/Disable Colour Highlighting.\r\n"
"         Highlight    : TRUE/ON enables highlighting;\r\n"
"                        FALSE/OFF (default) disables highlighting.\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 where\r\n"
"  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 consistency\r\n"
"  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 relevant\r\n"
"  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. Formatted display and checking is provided for these signature types:\r\n"
"       APIC  - Multiple APIC Description Table (MADT)\r\n"
"       BGRT  - Boot Graphics Resource Table\r\n"
"       DBG2  - Debug Port Table 2\r\n"
"       FACP  - Fixed ACPI Description Table (FADT)\r\n"
"       GTDT  - Generic Timer Description Table\r\n"
"       IORT  - IO Remapping Table\r\n"
"       MCFG  - Memory Mapped Config Space Base Address Description 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"
"       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 will\r\n"
"        be 'backwards compatible' with prior version of the specification in\r\n"
"        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"
".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"

