Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen A Chen <chen.a.chen@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Ruiyu Ni <Ruiyu.ni@intel.com>
		
			
				
	
	
		
			1006 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1006 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Tools of clarify the content of the smbios table.
 | |
| 
 | |
|   (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
 | |
|   Copyright (c) 2005 - 2012, 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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include "../UefiShellDebug1CommandsLib.h"
 | |
| #include "LibSmbiosView.h"
 | |
| #include "SmbiosView.h"
 | |
| #include "PrintInfo.h"
 | |
| #include "QueryTable.h"
 | |
| 
 | |
| UINT8                       gShowType         = SHOW_DETAIL;
 | |
| STATIC STRUCTURE_STATISTICS *mStatisticsTable = NULL;
 | |
| STATIC STRUCTURE_STATISTICS *mSmbios64BitStatisticsTable = NULL;
 | |
| 
 | |
| UINT8  SmbiosMajorVersion;
 | |
| UINT8  SmbiosMinorVersion;
 | |
| 
 | |
| UINTN  mNumberOfSmbios64BitStructures;
 | |
| UINTN  mSmbios64BitTableLength;
 | |
| 
 | |
| STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
 | |
|   {L"-t", TypeValue},
 | |
|   {L"-h", TypeValue},
 | |
|   {L"-s", TypeFlag},
 | |
|   {L"-a", TypeFlag},
 | |
|   {NULL, TypeMax}
 | |
|   };
 | |
| 
 | |
| /**
 | |
|   Function for 'smbiosview' command.
 | |
| 
 | |
|   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
 | |
|   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
 | |
| **/
 | |
| SHELL_STATUS
 | |
| EFIAPI
 | |
| ShellCommandRunSmbiosView (
 | |
|   IN EFI_HANDLE        ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE  *SystemTable
 | |
|   )
 | |
| {
 | |
|   UINT8               StructType;
 | |
|   UINT16              StructHandle;
 | |
|   EFI_STATUS          Status;
 | |
|   EFI_STATUS          Status1;
 | |
|   EFI_STATUS          Status2;
 | |
|   BOOLEAN             RandomView;
 | |
|   LIST_ENTRY          *Package;
 | |
|   CHAR16              *ProblemParam;
 | |
|   SHELL_STATUS        ShellStatus;
 | |
|   CONST CHAR16        *Temp;
 | |
| 
 | |
|   mStatisticsTable            = NULL;
 | |
|   mSmbios64BitStatisticsTable = NULL;
 | |
|   Package                     = NULL;
 | |
|   ShellStatus                 = SHELL_SUCCESS;
 | |
| 
 | |
|   Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
 | |
|   if (EFI_ERROR(Status)) {
 | |
|     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
 | |
|       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"smbiosview", ProblemParam);  
 | |
|       FreePool(ProblemParam);
 | |
|       ShellStatus = SHELL_INVALID_PARAMETER;
 | |
|     } else {
 | |
|       ASSERT(FALSE);
 | |
|     }
 | |
|   } else {
 | |
|     if (ShellCommandLineGetCount(Package) > 1) {
 | |
|       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"smbiosview");  
 | |
|       ShellStatus = SHELL_INVALID_PARAMETER;
 | |
|     } else if (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetValue(Package, L"-t") == NULL) {
 | |
|       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"smbiosview", L"-t");  
 | |
|       ShellStatus = SHELL_INVALID_PARAMETER;
 | |
|     } else if (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetValue(Package, L"-h") == NULL) {
 | |
|       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle,  L"smbiosview", L"-h");  
 | |
|       ShellStatus = SHELL_INVALID_PARAMETER;
 | |
|     } else if (
 | |
|         (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-h")) ||
 | |
|         (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-s")) ||
 | |
|         (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-a")) ||
 | |
|         (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetFlag(Package, L"-s")) ||
 | |
|         (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetFlag(Package, L"-a")) ||
 | |
|         (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetFlag(Package, L"-a"))
 | |
|       ) {
 | |
|       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"smbiosview");  
 | |
|       ShellStatus = SHELL_INVALID_PARAMETER;
 | |
|     } else {
 | |
| 
 | |
|       //
 | |
|       // Init Lib
 | |
|       //
 | |
|       Status1 = LibSmbiosInit ();
 | |
|       Status2 = LibSmbios64BitInit ();
 | |
|       if (EFI_ERROR (Status1) && EFI_ERROR (Status2)) {
 | |
|       	ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_CANNOT_GET_TABLE), gShellDebug1HiiHandle);
 | |
|         ShellStatus = SHELL_NOT_FOUND;
 | |
|         goto Done;
 | |
|       }
 | |
|       
 | |
|       StructType    = STRUCTURE_TYPE_RANDOM;
 | |
|       RandomView    = TRUE;
 | |
|       
 | |
|       Temp          = ShellCommandLineGetValue(Package, L"-t");
 | |
|       if (Temp != NULL) {
 | |
|         StructType = (UINT8) ShellStrToUintn (Temp);
 | |
|       }
 | |
|       
 | |
|       if (ShellCommandLineGetFlag(Package, L"-a")) {
 | |
|         gShowType = SHOW_ALL;
 | |
|       }
 | |
|       
 | |
|       if (!EFI_ERROR (Status1)) {
 | |
|         //
 | |
|         // Initialize the StructHandle to be the first handle
 | |
|         //
 | |
|         StructHandle  = INVALID_HANDLE;
 | |
|         LibGetSmbiosStructure (&StructHandle, NULL, NULL);
 | |
|         
 | |
|         Temp = ShellCommandLineGetValue(Package, L"-h");
 | |
|         if (Temp != NULL) {
 | |
|           RandomView   = FALSE;
 | |
|           StructHandle = (UINT16) ShellStrToUintn(Temp);
 | |
|         }
 | |
|         //
 | |
|         // build statistics table
 | |
|         //
 | |
|         Status = InitSmbiosTableStatistics ();
 | |
|         if (EFI_ERROR (Status)) {
 | |
|           ShellStatus = SHELL_NOT_FOUND;
 | |
|           goto Done;
 | |
|         }
 | |
|         
 | |
|         if (ShellCommandLineGetFlag(Package, L"-s")) {
 | |
|           Status = DisplayStatisticsTable (SHOW_DETAIL);
 | |
|           if (EFI_ERROR(Status)) {
 | |
|             ShellStatus = SHELL_NOT_FOUND;
 | |
|           }
 | |
|           goto Show64Bit;
 | |
|         }
 | |
|         
 | |
|         //
 | |
|         // Show SMBIOS structure information
 | |
|         //
 | |
|         Status = SMBiosView (StructType, StructHandle, gShowType, RandomView);
 | |
|         if (EFI_ERROR(Status)) {
 | |
|           ShellStatus = SHELL_NOT_FOUND;
 | |
|           goto Done;
 | |
|         }
 | |
|       }
 | |
| 
 | |
| Show64Bit:
 | |
|       if (!EFI_ERROR (Status2)) {
 | |
|         //
 | |
|         // build statistics table
 | |
|         //
 | |
|         Status = InitSmbios64BitTableStatistics ();
 | |
|         if (EFI_ERROR (Status)) {
 | |
|           ShellStatus = SHELL_NOT_FOUND;
 | |
|           goto Done;
 | |
|         }
 | |
|         //
 | |
|         // Initialize the StructHandle to be the first handle
 | |
|         //
 | |
|         StructHandle  = INVALID_HANDLE;
 | |
|         LibGetSmbios64BitStructure (&StructHandle, NULL, NULL);
 | |
|         
 | |
|         Temp = ShellCommandLineGetValue(Package, L"-h");
 | |
|         if (Temp != NULL) {
 | |
|           RandomView   = FALSE;
 | |
|           StructHandle = (UINT16) ShellStrToUintn(Temp);
 | |
|         }
 | |
|         
 | |
|         if (ShellCommandLineGetFlag(Package, L"-s")) {
 | |
|           Status = DisplaySmbios64BitStatisticsTable (SHOW_DETAIL);
 | |
|           if (EFI_ERROR(Status)) {
 | |
|             ShellStatus = SHELL_NOT_FOUND;
 | |
|           }
 | |
|           goto Done;
 | |
|         }
 | |
|         
 | |
|         //
 | |
|         // Show SMBIOS structure information
 | |
|         //
 | |
|         Status = SMBios64View (StructType, StructHandle, gShowType, RandomView);
 | |
|         if (EFI_ERROR(Status)) {
 | |
|           ShellStatus = SHELL_NOT_FOUND;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| Done:
 | |
|   //
 | |
|   // Release resources
 | |
|   //
 | |
|   if (mStatisticsTable != NULL) {
 | |
|     //
 | |
|     // Release statistics table
 | |
|     //
 | |
|     FreePool (mStatisticsTable);
 | |
|     mStatisticsTable = NULL;
 | |
|   }
 | |
| 
 | |
|   if (mSmbios64BitStatisticsTable != NULL) {
 | |
|     //
 | |
|     // Release statistics table
 | |
|     //
 | |
|     FreePool (mSmbios64BitStatisticsTable);
 | |
|     mSmbios64BitStatisticsTable = NULL;
 | |
|   }
 | |
| 
 | |
|   if (Package != NULL) {
 | |
|     ShellCommandLineFreeVarList (Package);
 | |
|   }
 | |
| 
 | |
|   LibSmbiosCleanup ();
 | |
|   LibSmbios64BitCleanup ();
 | |
| 
 | |
|   return ShellStatus;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Query all structures Data from SMBIOS table and Display
 | |
|   the information to users as required display option.
 | |
| 
 | |
|   @param[in] QueryType      Structure type to view.
 | |
|   @param[in] QueryHandle    Structure handle to view.
 | |
|   @param[in] Option         Display option: none,outline,normal,detail.
 | |
|   @param[in] RandomView     Support for -h parameter.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
|   @retval EFI_BAD_BUFFER_SIZE   structure is out of the range of SMBIOS table.
 | |
| **/
 | |
| EFI_STATUS
 | |
| SMBiosView (
 | |
|   IN  UINT8   QueryType,
 | |
|   IN  UINT16  QueryHandle,
 | |
|   IN  UINT8   Option,
 | |
|   IN  BOOLEAN RandomView
 | |
|   )
 | |
| {
 | |
|   UINT16                    Handle;
 | |
|   UINT8                     *Buffer;
 | |
|   UINT16                    Length;
 | |
|   UINTN                     Index;
 | |
| 
 | |
|   SMBIOS_STRUCTURE_POINTER  SmbiosStruct;
 | |
|   SMBIOS_TABLE_ENTRY_POINT  *SMBiosTable;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   LibSmbiosGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_BAD_BUFFER_SIZE;
 | |
|   }
 | |
| 
 | |
|   if (CompareMem (SMBiosTable->AnchorString, "_SM_", 4) == 0) {
 | |
|     //
 | |
|     // Have got SMBIOS table
 | |
|     //
 | |
|     SmbiosPrintEPSInfo (SMBiosTable, Option);
 | |
| 
 | |
|     SmbiosMajorVersion = SMBiosTable->MajorVersion;
 | |
|     SmbiosMinorVersion = SMBiosTable->MinorVersion;
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"=========================================================\n");
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gShellDebug1HiiHandle);
 | |
| 
 | |
|     if (QueryType == STRUCTURE_TYPE_RANDOM) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gShellDebug1HiiHandle);
 | |
|     } else {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gShellDebug1HiiHandle, QueryType);
 | |
|     }
 | |
| 
 | |
|     if (RandomView) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gShellDebug1HiiHandle);
 | |
|     } else {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gShellDebug1HiiHandle, QueryHandle);
 | |
|     }
 | |
| 
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gShellDebug1HiiHandle);
 | |
|     ShellPrintEx(-1,-1,GetShowTypeString (gShowType));
 | |
|     ShellPrintEx(-1,-1,L"\n\n");
 | |
| 
 | |
| /*
 | |
|     //
 | |
|     // Get internal commands, such as change options.
 | |
|     //
 | |
|     Status = WaitEnter ();
 | |
|     if (EFI_ERROR (Status)) {
 | |
|       if (Status == EFI_ABORTED) {
 | |
|         return EFI_SUCCESS;
 | |
|       }
 | |
| 
 | |
|       return Status;
 | |
|     }
 | |
| */
 | |
| 
 | |
|     //
 | |
|     // Searching and display structure info
 | |
|     //
 | |
|     Handle    = QueryHandle;
 | |
|     for (Index = 0; Index < SMBiosTable->NumberOfSmbiosStructures; Index++) {
 | |
|       //
 | |
|       // if reach the end of table, break..
 | |
|       //
 | |
|       if (Handle == INVALID_HANDLE) {
 | |
|         break;
 | |
|       }
 | |
|       //
 | |
|       // handle then point to the next!
 | |
|       //
 | |
|       if (LibGetSmbiosStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {
 | |
|         break;
 | |
|       }
 | |
| 
 | |
|       SmbiosStruct.Raw = Buffer;
 | |
| 
 | |
|       //
 | |
|       // if QueryType==Random, print this structure.
 | |
|       // if QueryType!=Random, but Hdr->Type==QueryType, also print it.
 | |
|       // only if QueryType != Random and Hdr->Type != QueryType, skiped it.
 | |
|       //
 | |
|       if (QueryType != STRUCTURE_TYPE_RANDOM && SmbiosStruct.Hdr->Type != QueryType) {
 | |
|         continue;
 | |
|       }
 | |
| 
 | |
|       ShellPrintEx(-1,-1,L"\n=========================================================\n");
 | |
|       ShellPrintHiiEx(-1,-1,NULL,
 | |
|         STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),
 | |
|         gShellDebug1HiiHandle,
 | |
|         SmbiosStruct.Hdr->Type,
 | |
|         SmbiosStruct.Hdr->Handle
 | |
|        );
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gShellDebug1HiiHandle, Index, Length);
 | |
|       //
 | |
|       // Addr of structure in structure in table
 | |
|       //
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gShellDebug1HiiHandle, (UINTN) Buffer);
 | |
|       DumpHex (0, 0, Length, Buffer);
 | |
| 
 | |
| /*
 | |
|       //
 | |
|       // Get internal commands, such as change options.
 | |
|       //
 | |
|       Status = WaitEnter ();
 | |
|       if (EFI_ERROR (Status)) {
 | |
|         if (Status == EFI_ABORTED) {
 | |
|           return EFI_SUCCESS;
 | |
|         }
 | |
| 
 | |
|         return Status;
 | |
|       }
 | |
| */
 | |
| 
 | |
|       if (gShowType != SHOW_NONE) {
 | |
|         //
 | |
|         // Print structure information
 | |
|         //
 | |
|         SmbiosPrintStructure (&SmbiosStruct, gShowType);
 | |
|         ShellPrintEx(-1,-1,L"\n");
 | |
| 
 | |
| /*
 | |
|         //
 | |
|         // Get internal commands, such as change options.
 | |
|         //
 | |
|         Status = WaitEnter ();
 | |
|         if (EFI_ERROR (Status)) {
 | |
|           if (Status == EFI_ABORTED) {
 | |
|             return EFI_SUCCESS;
 | |
|           }
 | |
| 
 | |
|           return Status;
 | |
|         }
 | |
| */
 | |
|       }
 | |
|       if (!RandomView) {
 | |
|         break;
 | |
|       }
 | |
|       //
 | |
|       // Support Execution Interrupt.
 | |
|       //
 | |
|       if (ShellGetExecutionBreakFlag ()) {
 | |
|         return EFI_ABORTED;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"\n=========================================================\n");
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   return EFI_BAD_BUFFER_SIZE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Query all structures Data from SMBIOS table and Display
 | |
|   the information to users as required display option.
 | |
| 
 | |
|   @param[in] QueryType      Structure type to view.
 | |
|   @param[in] QueryHandle    Structure handle to view.
 | |
|   @param[in] Option         Display option: none,outline,normal,detail.
 | |
|   @param[in] RandomView     Support for -h parameter.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
|   @retval EFI_BAD_BUFFER_SIZE   structure is out of the range of SMBIOS table.
 | |
| **/
 | |
| EFI_STATUS
 | |
| SMBios64View (
 | |
|   IN  UINT8   QueryType,
 | |
|   IN  UINT16  QueryHandle,
 | |
|   IN  UINT8   Option,
 | |
|   IN  BOOLEAN RandomView
 | |
|   )
 | |
| {
 | |
|   UINT16                        Handle;
 | |
|   UINT8                         *Buffer;
 | |
|   UINT16                        Length;
 | |
|   UINTN                         Index;
 | |
|   SMBIOS_STRUCTURE_POINTER      SmbiosStruct;
 | |
|   SMBIOS_TABLE_3_0_ENTRY_POINT  *SMBiosTable;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   LibSmbios64BitGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_BAD_BUFFER_SIZE;
 | |
|   }
 | |
| 
 | |
|   if (CompareMem (SMBiosTable->AnchorString, "_SM3_", 5) == 0) {
 | |
|     //
 | |
|     // Have got SMBIOS table
 | |
|     //
 | |
|     Smbios64BitPrintEPSInfo (SMBiosTable, Option);
 | |
| 
 | |
|     SmbiosMajorVersion = SMBiosTable->MajorVersion;
 | |
|     SmbiosMinorVersion = SMBiosTable->MinorVersion;
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"=========================================================\n");
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gShellDebug1HiiHandle);
 | |
| 
 | |
|     if (QueryType == STRUCTURE_TYPE_RANDOM) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gShellDebug1HiiHandle);
 | |
|     } else {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gShellDebug1HiiHandle, QueryType);
 | |
|     }
 | |
| 
 | |
|     if (RandomView) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gShellDebug1HiiHandle);
 | |
|     } else {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gShellDebug1HiiHandle, QueryHandle);
 | |
|     }
 | |
| 
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gShellDebug1HiiHandle);
 | |
|     ShellPrintEx(-1,-1,GetShowTypeString (gShowType));
 | |
|     ShellPrintEx(-1,-1,L"\n\n");
 | |
| 
 | |
| /*
 | |
|     //
 | |
|     // Get internal commands, such as change options.
 | |
|     //
 | |
|     Status = WaitEnter ();
 | |
|     if (EFI_ERROR (Status)) {
 | |
|       if (Status == EFI_ABORTED) {
 | |
|         return EFI_SUCCESS;
 | |
|       }
 | |
| 
 | |
|       return Status;
 | |
|     }
 | |
| */
 | |
| 
 | |
|     //
 | |
|     // Searching and display structure info
 | |
|     //
 | |
|     Handle    = QueryHandle;
 | |
|     for (Index = 0; Index < mNumberOfSmbios64BitStructures; Index++) {
 | |
|       //
 | |
|       // if reach the end of table, break..
 | |
|       //
 | |
|       if (Handle == INVALID_HANDLE) {
 | |
|         break;
 | |
|       }
 | |
|       //
 | |
|       // handle then point to the next!
 | |
|       //
 | |
|       if (LibGetSmbios64BitStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {
 | |
|         break;
 | |
|       }
 | |
| 
 | |
|       SmbiosStruct.Raw = Buffer;
 | |
| 
 | |
|       //
 | |
|       // if QueryType==Random, print this structure.
 | |
|       // if QueryType!=Random, but Hdr->Type==QueryType, also print it.
 | |
|       // only if QueryType != Random and Hdr->Type != QueryType, skiped it.
 | |
|       //
 | |
|       if (QueryType != STRUCTURE_TYPE_RANDOM && SmbiosStruct.Hdr->Type != QueryType) {
 | |
|         continue;
 | |
|       }
 | |
| 
 | |
|       ShellPrintEx(-1,-1,L"\n=========================================================\n");
 | |
|       ShellPrintHiiEx(-1,-1,NULL,
 | |
|         STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),
 | |
|         gShellDebug1HiiHandle,
 | |
|         SmbiosStruct.Hdr->Type,
 | |
|         SmbiosStruct.Hdr->Handle
 | |
|        );
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gShellDebug1HiiHandle, Index, Length);
 | |
|       //
 | |
|       // Addr of structure in structure in table
 | |
|       //
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gShellDebug1HiiHandle, (UINTN) Buffer);
 | |
|       DumpHex (0, 0, Length, Buffer);
 | |
| 
 | |
| /*
 | |
|       //
 | |
|       // Get internal commands, such as change options.
 | |
|       //
 | |
|       Status = WaitEnter ();
 | |
|       if (EFI_ERROR (Status)) {
 | |
|         if (Status == EFI_ABORTED) {
 | |
|           return EFI_SUCCESS;
 | |
|         }
 | |
| 
 | |
|         return Status;
 | |
|       }
 | |
| */
 | |
| 
 | |
|       if (gShowType != SHOW_NONE) {
 | |
|         //
 | |
|         // Print structure information
 | |
|         //
 | |
|         SmbiosPrintStructure (&SmbiosStruct, gShowType);
 | |
|         ShellPrintEx(-1,-1,L"\n");
 | |
| 
 | |
| /*
 | |
|         //
 | |
|         // Get internal commands, such as change options.
 | |
|         //
 | |
|         Status = WaitEnter ();
 | |
|         if (EFI_ERROR (Status)) {
 | |
|           if (Status == EFI_ABORTED) {
 | |
|             return EFI_SUCCESS;
 | |
|           }
 | |
| 
 | |
|           return Status;
 | |
|         }
 | |
| */
 | |
|       }
 | |
|       if (!RandomView) {
 | |
|         break;
 | |
|       }
 | |
|       //
 | |
|       // Support Execution Interrupt.
 | |
|       //
 | |
|       if (ShellGetExecutionBreakFlag ()) {
 | |
|         return EFI_ABORTED;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"\n=========================================================\n");
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   return EFI_BAD_BUFFER_SIZE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Function to initialize the global mStatisticsTable object.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| InitSmbiosTableStatistics (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   UINT16                    Handle;
 | |
|   UINT8                     *Buffer;
 | |
|   UINT16                    Length;
 | |
|   UINT16                    Offset;
 | |
|   UINT16                    Index;
 | |
| 
 | |
|   SMBIOS_STRUCTURE_POINTER  SmbiosStruct;
 | |
|   SMBIOS_TABLE_ENTRY_POINT  *SMBiosTable;
 | |
|   STRUCTURE_STATISTICS      *StatisticsPointer;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   LibSmbiosGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   if (CompareMem (SMBiosTable->AnchorString, "_SM_", 4) != 0) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_INVALID_PARAMETER;
 | |
|   }
 | |
|   //
 | |
|   // Allocate memory to mStatisticsTable
 | |
|   //
 | |
|   if (mStatisticsTable != NULL) {
 | |
|     FreePool (mStatisticsTable);
 | |
|     mStatisticsTable = NULL;
 | |
|   }
 | |
| 
 | |
|   mStatisticsTable = (STRUCTURE_STATISTICS *) AllocateZeroPool (SMBiosTable->NumberOfSmbiosStructures * sizeof (STRUCTURE_STATISTICS));
 | |
| 
 | |
|   if (mStatisticsTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gShellDebug1HiiHandle);
 | |
|     return EFI_OUT_OF_RESOURCES;
 | |
|   }
 | |
| 
 | |
|   Offset      = 0;
 | |
|   StatisticsPointer = mStatisticsTable;
 | |
| 
 | |
|   //
 | |
|   // search from the first one
 | |
|   //
 | |
|   Handle = INVALID_HANDLE;
 | |
|   LibGetSmbiosStructure (&Handle, NULL, NULL);
 | |
|   for (Index = 1; Index <= SMBiosTable->NumberOfSmbiosStructures; Index++) {
 | |
|     //
 | |
|     // If reach the end of table, break..
 | |
|     //
 | |
|     if (Handle == INVALID_HANDLE) {
 | |
|       break;
 | |
|     }
 | |
|     //
 | |
|     // After LibGetSmbiosStructure(), handle then point to the next!
 | |
|     //
 | |
|     if (LibGetSmbiosStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     SmbiosStruct.Raw = Buffer;
 | |
| 
 | |
|     //
 | |
|     // general statistics
 | |
|     //
 | |
|     StatisticsPointer->Index  = Index;
 | |
|     StatisticsPointer->Type   = SmbiosStruct.Hdr->Type;
 | |
|     StatisticsPointer->Handle = SmbiosStruct.Hdr->Handle;
 | |
|     StatisticsPointer->Length = Length;
 | |
|     StatisticsPointer->Addr   = Offset;
 | |
| 
 | |
|     Offset = (UINT16) (Offset + Length);
 | |
| 
 | |
|     StatisticsPointer         = &mStatisticsTable[Index];
 | |
|   }
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   @param[in]  Smbios64EntryPoint          SMBIOS 64-bit entry point.
 | |
|   @param[out] NumberOfSmbios64Structures  The number of structures in 64-bit SMBIOS table.
 | |
|   @param[out] Smbios64TableLength         The total length of 64-bit SMBIOS table.
 | |
| 
 | |
|   @retval EFI_SUCCESS           					Calculation was successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| CalculateSmbios64BitStructureCountAndLength (
 | |
|   SMBIOS_TABLE_3_0_ENTRY_POINT    *Smbios64EntryPoint,
 | |
|   UINTN                           *NumberOfSmbios64Structures,
 | |
|   UINTN                           *Smbios64TableLength
 | |
| )
 | |
| {
 | |
|   SMBIOS_STRUCTURE_POINTER        Smbios;
 | |
|   UINT8                           *Raw;
 | |
|   
 | |
|   *Smbios64TableLength = 0;
 | |
|   *NumberOfSmbios64Structures = 0;
 | |
|   
 | |
|   Smbios.Raw = (UINT8 *)(UINTN)(Smbios64EntryPoint->TableAddress);
 | |
|   while (TRUE) {
 | |
|     if (Smbios.Hdr->Type == 127) {
 | |
|       //
 | |
|       // Reach the end of table type 127
 | |
|       //
 | |
|       (*NumberOfSmbios64Structures)++;
 | |
|       (*Smbios64TableLength) += sizeof (SMBIOS_STRUCTURE);
 | |
|       return EFI_SUCCESS;
 | |
|     }
 | |
| 
 | |
|     Raw = Smbios.Raw;
 | |
|     //
 | |
|     // Walk to next structure
 | |
|     //
 | |
|     LibGetSmbiosString (&Smbios, (UINT16) (-1));
 | |
|     //
 | |
|     // Length = Next structure head - this structure head
 | |
|     //
 | |
|     (*Smbios64TableLength) += (UINTN) (Smbios.Raw - Raw);
 | |
|     if ((*Smbios64TableLength) > Smbios64EntryPoint->TableMaximumSize) {
 | |
|     	//
 | |
|     	// The actual table length exceeds maximum table size,
 | |
|     	// There should be something wrong with SMBIOS table.
 | |
|     	//
 | |
|     	return EFI_INVALID_PARAMETER;
 | |
|     }
 | |
|     (*NumberOfSmbios64Structures)++;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Function to initialize the global mSmbios64BitStatisticsTable object.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| InitSmbios64BitTableStatistics (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   UINT16                    Handle;
 | |
|   UINT8                     *Buffer;
 | |
|   UINT16                    Length;
 | |
|   UINT16                    Offset;
 | |
|   UINT16                    Index;
 | |
| 	EFI_STATUS								Status;
 | |
|   SMBIOS_STRUCTURE_POINTER      SmbiosStruct;
 | |
|   SMBIOS_TABLE_3_0_ENTRY_POINT  *SMBiosTable;
 | |
|   STRUCTURE_STATISTICS          *StatisticsPointer;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   LibSmbios64BitGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   if (CompareMem (SMBiosTable->AnchorString, "_SM3_", 5) != 0) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_INVALID_PARAMETER;
 | |
|   }
 | |
|   //
 | |
|   // Allocate memory to mSmbios64BitStatisticsTable
 | |
|   //
 | |
|   if (mSmbios64BitStatisticsTable != NULL) {
 | |
|     FreePool (mSmbios64BitStatisticsTable);
 | |
|     mSmbios64BitStatisticsTable = NULL;
 | |
|   }
 | |
|   //
 | |
|   // Calculate number of smbios structures
 | |
|   //
 | |
|   Status = CalculateSmbios64BitStructureCountAndLength (SMBiosTable, &mNumberOfSmbios64BitStructures, &mSmbios64BitTableLength);
 | |
|   if ((EFI_ERROR (Status)) || (mSmbios64BitTableLength > SMBiosTable->TableMaximumSize)) {
 | |
|   	return EFI_INVALID_PARAMETER;
 | |
|   }
 | |
|   
 | |
|   mSmbios64BitStatisticsTable = (STRUCTURE_STATISTICS *) AllocateZeroPool (mNumberOfSmbios64BitStructures * sizeof (STRUCTURE_STATISTICS));
 | |
| 
 | |
|   if (mSmbios64BitStatisticsTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gShellDebug1HiiHandle);
 | |
|     return EFI_OUT_OF_RESOURCES;
 | |
|   }
 | |
| 
 | |
|   Offset      = 0;
 | |
|   StatisticsPointer = mSmbios64BitStatisticsTable;
 | |
| 
 | |
|   //
 | |
|   // search from the first one
 | |
|   //
 | |
|   Handle = INVALID_HANDLE;
 | |
|   LibGetSmbios64BitStructure (&Handle, NULL, NULL);
 | |
|   for (Index = 1; Index <= mNumberOfSmbios64BitStructures; Index++) {
 | |
|     //
 | |
|     // If reach the end of table, break..
 | |
|     //
 | |
|     if (Handle == INVALID_HANDLE) {
 | |
|       break;
 | |
|     }
 | |
|     //
 | |
|     // After LibGetSmbios64BitStructure(), handle then point to the next!
 | |
|     //
 | |
|     if (LibGetSmbios64BitStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     SmbiosStruct.Raw = Buffer;
 | |
| 
 | |
|     //
 | |
|     // general statistics
 | |
|     //
 | |
|     StatisticsPointer->Index  = Index;
 | |
|     StatisticsPointer->Type   = SmbiosStruct.Hdr->Type;
 | |
|     StatisticsPointer->Handle = SmbiosStruct.Hdr->Handle;
 | |
|     StatisticsPointer->Length = Length;
 | |
|     StatisticsPointer->Addr   = Offset;
 | |
| 
 | |
|     Offset = (UINT16) (Offset + Length);
 | |
| 
 | |
|     StatisticsPointer         = &mSmbios64BitStatisticsTable[Index];
 | |
|   }
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Function to display the global mStatisticsTable object.
 | |
| 
 | |
|   @param[in] Option             ECHO, NORMAL, or DETAIL control the amount of detail displayed.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| DisplayStatisticsTable (
 | |
|   IN   UINT8   Option
 | |
|   )
 | |
| {
 | |
|   UINTN                    Index;
 | |
|   UINTN                    Num;
 | |
|   STRUCTURE_STATISTICS     *StatisticsPointer;
 | |
|   SMBIOS_TABLE_ENTRY_POINT *SMBiosTable;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   if (Option < SHOW_OUTLINE) {
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
|   //
 | |
|   // display EPS information firstly
 | |
|   //
 | |
|   LibSmbiosGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_UNSUPPORTED;
 | |
|   }
 | |
| 
 | |
|   ShellPrintEx(-1,-1,L"\n============================================================\n");
 | |
|   SmbiosPrintEPSInfo (SMBiosTable, Option);
 | |
| 
 | |
|   if (Option < SHOW_NORMAL) {
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   if (mStatisticsTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), gShellDebug1HiiHandle);
 | |
|     return EFI_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   ShellPrintEx(-1,-1,L"============================================================\n");
 | |
|   StatisticsPointer = &mStatisticsTable[0];
 | |
|   Num         = SMBiosTable->NumberOfSmbiosStructures;
 | |
|   //
 | |
|   // display statistics table content
 | |
|   //
 | |
|   for (Index = 1; Index <= Num; Index++) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), gShellDebug1HiiHandle, StatisticsPointer->Index);
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), gShellDebug1HiiHandle, StatisticsPointer->Type);
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), gShellDebug1HiiHandle, StatisticsPointer->Handle);
 | |
|     if (Option >= SHOW_DETAIL) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), gShellDebug1HiiHandle, StatisticsPointer->Addr);
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), gShellDebug1HiiHandle, StatisticsPointer->Length);
 | |
|     }
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"\n");
 | |
|     StatisticsPointer = &mStatisticsTable[Index];
 | |
| /*
 | |
|     //
 | |
|     // Display 20 lines and wait for a page break
 | |
|     //
 | |
|     if (Index % 20 == 0) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), gShellDebug1HiiHandle);
 | |
|       Status = WaitEnter ();
 | |
|       if (EFI_ERROR (Status)) {
 | |
|         if (Status == EFI_ABORTED) {
 | |
|           return EFI_SUCCESS;
 | |
|         }
 | |
| 
 | |
|         return Status;
 | |
|       }
 | |
|     }
 | |
| */
 | |
|   }
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Function to display the global mSmbios64BitStatisticsTable object.
 | |
| 
 | |
|   @param[in] Option             ECHO, NORMAL, or DETAIL control the amount of detail displayed.
 | |
| 
 | |
|   @retval EFI_SUCCESS           print is successful.
 | |
| **/
 | |
| EFI_STATUS
 | |
| DisplaySmbios64BitStatisticsTable (
 | |
|   IN   UINT8   Option
 | |
|   )
 | |
| {
 | |
|   UINTN                    Index;
 | |
|   UINTN                    Num;
 | |
|   STRUCTURE_STATISTICS     *StatisticsPointer;
 | |
|   SMBIOS_TABLE_3_0_ENTRY_POINT *SMBiosTable;
 | |
| 
 | |
|   SMBiosTable = NULL;
 | |
|   if (Option < SHOW_OUTLINE) {
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
|   //
 | |
|   // display EPS information firstly
 | |
|   //
 | |
|   LibSmbios64BitGetEPS (&SMBiosTable);
 | |
|   if (SMBiosTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);
 | |
|     return EFI_UNSUPPORTED;
 | |
|   }
 | |
| 
 | |
|   ShellPrintEx(-1,-1,L"\n============================================================\n");
 | |
|   Smbios64BitPrintEPSInfo (SMBiosTable, Option);
 | |
| 
 | |
|   if (Option < SHOW_NORMAL) {
 | |
|     return EFI_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   if (mSmbios64BitStatisticsTable == NULL) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), gShellDebug1HiiHandle);
 | |
|     return EFI_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   ShellPrintEx(-1,-1,L"============================================================\n");
 | |
|   StatisticsPointer = &mSmbios64BitStatisticsTable[0];
 | |
|   Num         = mNumberOfSmbios64BitStructures;
 | |
|   //
 | |
|   // display statistics table content
 | |
|   //
 | |
|   for (Index = 1; Index <= Num; Index++) {
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), gShellDebug1HiiHandle, StatisticsPointer->Index);
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), gShellDebug1HiiHandle, StatisticsPointer->Type);
 | |
|     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), gShellDebug1HiiHandle, StatisticsPointer->Handle);
 | |
|     if (Option >= SHOW_DETAIL) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), gShellDebug1HiiHandle, StatisticsPointer->Addr);
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), gShellDebug1HiiHandle, StatisticsPointer->Length);
 | |
|     }
 | |
| 
 | |
|     ShellPrintEx(-1,-1,L"\n");
 | |
|     StatisticsPointer = &mSmbios64BitStatisticsTable[Index];
 | |
| /*
 | |
|     //
 | |
|     // Display 20 lines and wait for a page break
 | |
|     //
 | |
|     if (Index % 20 == 0) {
 | |
|       ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), gShellDebug1HiiHandle);
 | |
|       Status = WaitEnter ();
 | |
|       if (EFI_ERROR (Status)) {
 | |
|         if (Status == EFI_ABORTED) {
 | |
|           return EFI_SUCCESS;
 | |
|         }
 | |
| 
 | |
|         return Status;
 | |
|       }
 | |
|     }
 | |
| */
 | |
|   }
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   function to return a string of the detail level.
 | |
| 
 | |
|   @param[in] ShowType         The detail level whose name is desired in clear text.
 | |
| 
 | |
|   @return   A pointer to a string representing the ShowType (or 'undefined type' if not known).
 | |
| **/
 | |
| CHAR16 *
 | |
| GetShowTypeString (
 | |
|   UINT8 ShowType
 | |
|   )
 | |
| {
 | |
|   //
 | |
|   // show type
 | |
|   //
 | |
|   switch (ShowType) {
 | |
| 
 | |
|   case SHOW_NONE:
 | |
|     return L"SHOW_NONE";
 | |
| 
 | |
|   case SHOW_OUTLINE:
 | |
|     return L"SHOW_OUTLINE";
 | |
| 
 | |
|   case SHOW_NORMAL:
 | |
|     return L"SHOW_NORMAL";
 | |
| 
 | |
|   case SHOW_DETAIL:
 | |
|     return L"SHOW_DETAIL";
 | |
| 
 | |
|   case SHOW_ALL:
 | |
|     return L"SHOW_ALL";
 | |
| 
 | |
|   default:
 | |
|     return L"Undefined type";
 | |
|   }
 | |
| }
 | |
| 
 |