1a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey/** @file 2a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Main file for Ver shell level 3 function. 3a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 4c011b6c9e2baf57fc0557117e9875ceb3dca55a3Tapan Shah (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR> 5a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> 6a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey This program and the accompanying materials 7a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey are licensed and made available under the terms and conditions of the BSD License 8a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey which accompanies this distribution. The full text of the license may be found at 9a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey http://opensource.org/licenses/bsd-license.php 10a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 11a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 14a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey**/ 15a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 16a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey#include "UefiShellLevel3CommandsLib.h" 17a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 18a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey#include <Library/ShellLib.h> 19a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 20a405b86d274d32b92f69842bfb9a1ab143128f57jcarseySTATIC CONST SHELL_PARAM_ITEM ParamList[] = { 21a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey {L"-s", TypeFlag}, 22a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey {L"-terse", TypeFlag}, 23a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey {L"-t", TypeFlag}, 24a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey {L"-_pa", TypeFlag}, 25a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey {NULL, TypeMax} 26a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey }; 27a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 28a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey/** 29a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Function for 'ver' command. 30a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 31a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] ImageHandle Handle to the Image (NULL if Internal). 32a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] SystemTable Pointer to the System Table (NULL if Internal). 33a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey**/ 34a405b86d274d32b92f69842bfb9a1ab143128f57jcarseySHELL_STATUS 35a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyEFIAPI 36a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyShellCommandRunVer ( 37a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN EFI_HANDLE ImageHandle, 38a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN EFI_SYSTEM_TABLE *SystemTable 39a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ) 40a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey{ 41a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey EFI_STATUS Status; 42a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey LIST_ENTRY *Package; 43a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey CHAR16 *ProblemParam; 44a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey SHELL_STATUS ShellStatus; 45a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey UINT8 Level; 46a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 47a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Level = PcdGet8(PcdShellSupportLevel); 48a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ProblemParam = NULL; 49a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_SUCCESS; 50a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 51a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 52a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // initialize the shell lib (we must be in non-auto-init...) 53a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 54a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = ShellInitialize(); 55a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT_EFI_ERROR(Status); 56a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 57a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = CommandInit(); 58a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT_EFI_ERROR(Status); 59a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 60a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 61a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // parse the command line 62a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 63a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE); 64a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (EFI_ERROR(Status)) { 65a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { 66e54a10bbcaa3e2ee3d8e3ee2e7763a59f0e4d216Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"ver", ProblemParam); 67a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey FreePool(ProblemParam); 68a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_INVALID_PARAMETER; 69a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 70a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT(FALSE); 71a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 72a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 73a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 74a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // check for "-?" 75a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 76a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellCommandLineGetFlag(Package, L"-?")) { 77a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT(FALSE); 78a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 79a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellCommandLineGetRawValue(Package, 1) != NULL) { 80a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 81a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // we have too many parameters 82a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 83e54a10bbcaa3e2ee3d8e3ee2e7763a59f0e4d216Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"ver"); 84a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_INVALID_PARAMETER; 85a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 86a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellCommandLineGetFlag(Package, L"-s")) { 87a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintHiiEx ( 88a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 0, 89a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gST->ConOut->Mode->CursorRow, 90a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey NULL, 91a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey STRING_TOKEN (STR_VER_OUTPUT_SIMPLE), 92a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gShellLevel3HiiHandle, 93a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gEfiShellProtocol->MajorVersion, 94a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gEfiShellProtocol->MinorVersion 95a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ); 96a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 97a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintHiiEx ( 98a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 0, 99a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gST->ConOut->Mode->CursorRow, 100a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey NULL, 101a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey STRING_TOKEN (STR_VER_OUTPUT_SHELL), 102a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gShellLevel3HiiHandle, 103a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey SupportLevel[Level], 104a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gEfiShellProtocol->MajorVersion, 105a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gEfiShellProtocol->MinorVersion 106a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ); 107a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (!ShellCommandLineGetFlag(Package, L"-terse") && !ShellCommandLineGetFlag(Package, L"-t")){ 108a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintHiiEx( 109a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey -1, 110a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey -1, 111a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey NULL, 112284e034f4f43530e85b38c74322772e669f561d6Chris Phillips STRING_TOKEN (STR_VER_OUTPUT_SUPPLIER), 113284e034f4f43530e85b38c74322772e669f561d6Chris Phillips gShellLevel3HiiHandle, 114284e034f4f43530e85b38c74322772e669f561d6Chris Phillips (CHAR16 *) PcdGetPtr (PcdShellSupplier) 115a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ); 116a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 117a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 118a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintHiiEx ( 119a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey -1, 120a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey -1, 121a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey NULL, 122a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey STRING_TOKEN (STR_VER_OUTPUT_UEFI), 123a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gShellLevel3HiiHandle, 124a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey (gST->Hdr.Revision&0xffff0000)>>16, 125a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey (gST->Hdr.Revision&0x0000ffff), 126a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gST->FirmwareVendor, 127a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey gST->FirmwareRevision 128a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ); 129a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 130a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 131a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 132a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // implementation specific support for displaying processor architecture 133a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 134a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellCommandLineGetFlag(Package, L"-_pa")) { 135a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintEx(-1, -1, L"%d\r\n", sizeof(UINTN)==sizeof(UINT64)?64:32); 136a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 137a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 138a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 139a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 140a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // free the command line package 141a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 142a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellCommandLineFreeVarList (Package); 143a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 144a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 145a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey return (ShellStatus); 146a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey} 147a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 148