// /**
//
// (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR>
// Copyright (c) 2010 - 2016, Intel Corporation. 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:
//
// UefiBcfgCommandsLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell 2.0 BCFG command
//
//
// **/

/=#

#langdef   en-US "english"

#string STR_GEN_NO_MEM            #language en-US "%H%s%N: Memory is not available.\r\n"
#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_PARAM_INV         #language en-US "%H%s%N: Invalid argument - '%H%s%N'\r\n"
#string STR_GEN_NO_DRIVER_BOOT    #language en-US "%H%s%N: Driver or Boot must be selected.\r\n"
#string STR_GEN_BOOT_ONLY         #language en-US "%H%s%N: Boot must be selected for hot key options.\r\n"
#string STR_GEN_TOO_FEW           #language en-US "%H%s%N: Too few arguments.\r\n"
#string STR_GEN_TOO_MANY          #language en-US "%H%s%N: Too many arguments\r\n"
#string STR_GEN_FILE_OPEN_FAIL    #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
#string STR_GEN_FIND_FAIL         #language en-US "%H%s%N: File not found - '%H%s%N'\r\n"
#string STR_GEN_OUT_MEM           #language en-US "%H%s%N: Memory allocation was not successful.\r\n"
#string STR_BCFG_WRITE_FAIL       #language en-US "%H%s%N: Unable to write to '%H%s%N'\r\n"
#string STR_BCFG_READ_FAIL        #language en-US "%H%s%N: Unable to read from '%H%s%N'\r\n"
#string STR_BCFG_VAR_CORRUPT      #language en-US "%H%s%N: Variable '%H%s%N' corrupt.\r\n"
#string STR_BCFG_HANDLE           #language en-US "%H%s%N: The handle [%H%02x%N] does not have DevicePath.\r\n"
#string STR_BCFG_FILE             #language en-US "%H%s%N: The file '%H%s%N' matches multiple files.\r\n"
#string STR_BCFG_FILE_OPEN        #language en-US "%H%s%N: The file '%H%s%N' did not open.\r\n"
#string STR_BCFG_FILE_DP          #language en-US "%H%s%N: The file '%H%s%N' could not convert to DevPath.\r\n"
#string STR_BCFG_TARGET_NF        #language en-US "%H%s%N: Could not find unused target index.\r\n"
#string STR_BCFG_TARGET           #language en-US "Target = %04x.\r\n"
#string STR_BCFG_SET_VAR_FAIL     #language en-US "%H%s%N: Unable to set %H%s%N\r\n"
#string STR_BCFG_VAR_NO_NUM       #language en-US "%H%s%N: Cannot create Key#### variable: All the numbers from 0x0000 - 0xFFFF have been used.\r\n"
#string STR_BCFG_NUMB_RANGE       #language en-US "%H%s%N: Numbers must be under %d.\r\n"
#string STR_BCFG_NONE             #language en-US "No options found.\r\n"

#string STR_BCFG_LOAD_OPTIONS     #language en-US "Option: %B%02x%N. Variable: %B%-11s%N\r\n"
                                                  "  Desc    - %s\r\n"
                                                  "  DevPath - %s\r\n"
                                                  "  Optional- %c\r\n"
#string STR_GET_HELP_BCFG         #language en-US ""
".TH bcfg 0 "configure boot and driver"\r\n"
".SH NAME\r\n"
"Manages the boot and driver options that are stored in NVRAM.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"BCFG driver|boot [dump [-v]] [add # file "desc"] [addp # file "desc"] \r\n"
"                 [addh # handle "desc"] [rm #] [mv # #] \r\n"
"                 [-opt # [[filename]|["data"]] | \r\n"
"                         [KeyData <ScanCode UnicodeChar>]]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -v          - Displays verbose information about options, including the optional\r\n"
"                data.\r\n"
"  -opt        - Displays or modifies the optional data associated with a \r\n"
"                driver or boot option. This parameter is followed by the file name of the\r\n"
"                file that contains the binary data to be associated with the\r\n"
"                driver or boot option optional data, or the quote\r\n"
"                delimited data to be associated with the driver or\r\n"
"                boot option optional data.\r\n"
"  driver      - Displays or modifies the driver option list.\r\n"
"  boot        - Displays or modifies the boot option list.\r\n"
"  dump        - Displays the option list.\r\n"
"  add         - Adds an option. The # is the number of options to add in\r\n"
"                hexadecimal format. The file name is the name of the UEFI application/driver for\r\n"
"                the option. The quoted parameter is the description of the\r\n"
"                option to be added.\r\n"
"  addh        - Adds an option that refers to the driver specified by a handle.\r\n"
"                The # is the number of options to add, in hexadecimal format. The\r\n"
"                handle is the driver handle, in hexadecimal format. The device path\r\n"
"                for the option is retrieved from the handle. The quoted\r\n"
"                parameter is the description of the option to be added.\r\n"
"  addp        - Adds an option that refers to a specific file. Only the portion\r\n"
"                of the device path starting with the hard drive partition is\r\n"
"                placed in the option. The # is the number of options to add,\r\n"
"                in hexadecimal format. The quoted parameter is the description of the\r\n"
"                option being added.\r\n"
"  rm          - Removes an option. The parameter lists the number of the options\r\n"
"                to remove in hexadecimal format.\r\n"
"  mv          - Moves an option. The first numeric parameter is the number of\r\n"
"                the option to move in hexadecimal format. The second numeric parameter\r\n"
"                is the new number of the option to be moved.\r\n"
"  KeyData     - Specifies the packed value associated with a hot-key.\r\n"
"  ScanCode    - Specifies the UEFI-defined scan code portion of the\r\n"
"                EFI_INPUT_KEY instruction. This value is directly associated\r\n"
"                with the preceding KeyData value. When one instance of this\r\n"
"                parameter has a non-zero value, the paired UnicodeChar value\r\n"
"                will have a zero-based value.\r\n"
"  UnicodeChar - Specifies the Unicode value for the character associated with\r\n"
"                the preceding KeyData value. When one instance of this\r\n"
"                parameter has a non-zero value, the paired ScanCode value\r\n"
"                will have a zero-based value.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command manages the boot and driver options stored in NVRAM.\r\n"
"  2. Use the dump option to display Boot#### or Driver#### environment variables.\r\n"
"  3. Use the add option to add a new Boot#### or Driver#### \r\n"
"     environment variable.\r\n"
"  4. Use the rm option to delete a Boot#### or Driver#### \r\n"
"     environment variable, and then the mv option to reorder\r\n"
"     the Boot#### and Driver#### environment variables.\r\n"
"  5. The add, rm, and mv options also update the BootOrder or DriverOrder\r\n"
"     environment variables, as appropriate.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display driver options:\r\n"
"    Shell> bcfg driver dump\r\n"
" \r\n"
"  * To display boot options:\r\n"
"    Shell> bcfg boot dump\r\n"
" \r\n"
"  * To display verbose information about boot options:\r\n"
"    Shell> bcfg boot dump -v\r\n"
" \r\n"
"  * To add a driver option #5:\r\n"
"    Shell> bcfg driver add 5 mydriver.efi "My Driver"\r\n"
" \r\n"
"  * To add a boot option #3:\r\n"
"    Shell> bcfg boot add 3 osloader.efi "My OS"\r\n"
" \r\n"
"  * To remove boot option #3:\r\n"
"    Shell> bcfg boot rm 3\r\n"
" \r\n"
"  * To move boot option #3 to boot option #7:\r\n"
"    Shell> bcfg boot mv 3 7\r\n"
" \r\n"
"  * To assign a CTRL-B hot-key to boot option #3:\r\n"
"    Shell> bcfg boot -opt 3 0x40000200 0 0x42\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_NOT_FOUND           The requested option was not found.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_UNSUPPORTED         The action as requested was unsupported.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_OUT_OF_RESOURCES    There was insufficient free space for the request\r\n"
"                            to be completed.\r\n"

