1a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey/** @file 2a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Main file for GetMtc shell level 3 function. 3a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 4c011b6c9e2baf57fc0557117e9875ceb3dca55a3Tapan Shah (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR> 5cbcccd2c9d93a35884c344a3feaa773338675dfflgao Copyright (c) 2009 - 2013, 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 20a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey/** 21a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Function for 'getmtc' command. 22a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 23a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] ImageHandle Handle to the Image (NULL if Internal). 24a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey @param[in] SystemTable Pointer to the System Table (NULL if Internal). 25a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey**/ 26a405b86d274d32b92f69842bfb9a1ab143128f57jcarseySHELL_STATUS 27a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyEFIAPI 28a405b86d274d32b92f69842bfb9a1ab143128f57jcarseyShellCommandRunGetMtc ( 29a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN EFI_HANDLE ImageHandle, 30a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey IN EFI_SYSTEM_TABLE *SystemTable 31a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ) 32a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey{ 33a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey EFI_STATUS Status; 34a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey LIST_ENTRY *Package; 35a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey CHAR16 *ProblemParam; 36a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey SHELL_STATUS ShellStatus; 37a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey UINT64 Mtc; 38a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 39a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ProblemParam = NULL; 40a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_SUCCESS; 41a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 42a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 43a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // initialize the shell lib (we must be in non-auto-init...) 44a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 45a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = ShellInitialize(); 46a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT_EFI_ERROR(Status); 47a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 48a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 49a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // parse the command line 50a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 51a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE); 52a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (EFI_ERROR(Status)) { 53a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { 54e54a10bbcaa3e2ee3d8e3ee2e7763a59f0e4d216Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"getmtc", ProblemParam); 55a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey FreePool(ProblemParam); 56a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_INVALID_PARAMETER; 57a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 58a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT(FALSE); 59a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 60a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 61a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 62a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // check for "-?" 63a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 64a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellCommandLineGetFlag(Package, L"-?")) { 65a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ASSERT(FALSE); 66a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else if (ShellCommandLineGetRawValue(Package, 1) != NULL) { 67e54a10bbcaa3e2ee3d8e3ee2e7763a59f0e4d216Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"getmtc"); 68a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellStatus = SHELL_INVALID_PARAMETER; 69a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } else { 70a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 71a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // Get the monotonic counter count 72a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 73a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey Status = gBS->GetNextMonotonicCount(&Mtc); 74cbcccd2c9d93a35884c344a3feaa773338675dfflgao if (Status == EFI_DEVICE_ERROR) { 75cbcccd2c9d93a35884c344a3feaa773338675dfflgao ShellStatus = SHELL_DEVICE_ERROR; 76cbcccd2c9d93a35884c344a3feaa773338675dfflgao } else if (Status == EFI_SECURITY_VIOLATION) { 77cbcccd2c9d93a35884c344a3feaa773338675dfflgao ShellStatus = SHELL_SECURITY_VIOLATION; 78cbcccd2c9d93a35884c344a3feaa773338675dfflgao } else if (EFI_ERROR(Status)) { 79cbcccd2c9d93a35884c344a3feaa773338675dfflgao ShellStatus = SHELL_DEVICE_ERROR; 80a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 81a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 82a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 83a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // print it... 84a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 85a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey if (ShellStatus == SHELL_SUCCESS) { 86a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GET_MTC_OUTPUT), gShellLevel3HiiHandle, Mtc); 87a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 88a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 89a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 90a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // free the command line package 91a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey // 92a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey ShellCommandLineFreeVarList (Package); 93a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey } 94a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 95a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey return (ShellStatus); 96a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey} 97a405b86d274d32b92f69842bfb9a1ab143128f57jcarsey 98