+/**\r
+ Query all structures Data from SMBIOS table and Display\r
+ the information to users as required display option.\r
+\r
+ @param[in] QueryType Structure type to view.\r
+ @param[in] QueryHandle Structure handle to view.\r
+ @param[in] Option Display option: none,outline,normal,detail.\r
+ @param[in] RandomView Support for -h parameter.\r
+\r
+ @retval EFI_SUCCESS print is successful.\r
+ @retval EFI_BAD_BUFFER_SIZE structure is out of the range of SMBIOS table.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SMBios64View (\r
+ IN UINT8 QueryType,\r
+ IN UINT16 QueryHandle,\r
+ IN UINT8 Option,\r
+ IN BOOLEAN RandomView\r
+ )\r
+{\r
+ UINT16 Handle;\r
+ UINT8 *Buffer;\r
+ UINT16 Length;\r
+ UINTN Index;\r
+ SMBIOS_STRUCTURE_POINTER SmbiosStruct;\r
+ SMBIOS_TABLE_3_0_ENTRY_POINT *SMBiosTable;\r
+\r
+ SMBiosTable = NULL;\r
+ LibSmbios64BitGetEPS (&SMBiosTable);\r
+ if (SMBiosTable == NULL) {\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
+ return EFI_BAD_BUFFER_SIZE;\r
+ }\r
+\r
+ if (CompareMem (SMBiosTable->AnchorString, "_SM3_", 5) == 0) {\r
+ //\r
+ // Have got SMBIOS table\r
+ //\r
+ Smbios64BitPrintEPSInfo (SMBiosTable, Option);\r
+\r
+ SmbiosMajorVersion = SMBiosTable->MajorVersion;\r
+ SmbiosMinorVersion = SMBiosTable->MinorVersion;\r
+\r
+ ShellPrintEx(-1,-1,L"=========================================================\n");\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gShellDebug1HiiHandle);\r
+\r
+ if (QueryType == STRUCTURE_TYPE_RANDOM) {\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gShellDebug1HiiHandle);\r
+ } else {\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gShellDebug1HiiHandle, QueryType);\r
+ }\r
+\r
+ if (RandomView) {\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gShellDebug1HiiHandle);\r
+ } else {\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gShellDebug1HiiHandle, QueryHandle);\r
+ }\r
+\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gShellDebug1HiiHandle);\r
+ ShellPrintEx(-1,-1,GetShowTypeString (gShowType));\r
+ ShellPrintEx(-1,-1,L"\n\n");\r
+\r
+/*\r
+ //\r
+ // Get internal commands, such as change options.\r
+ //\r
+ Status = WaitEnter ();\r
+ if (EFI_ERROR (Status)) {\r
+ if (Status == EFI_ABORTED) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return Status;\r
+ }\r
+*/\r
+\r
+ //\r
+ // Searching and display structure info\r
+ //\r
+ Handle = QueryHandle;\r
+ for (Index = 0; Index < mNumberOfSmbios64BitStructures; Index++) {\r
+ //\r
+ // if reach the end of table, break..\r
+ //\r
+ if (Handle == INVALID_HANDLE) {\r
+ break;\r
+ }\r
+ //\r
+ // handle then point to the next!\r
+ //\r
+ if (LibGetSmbios64BitStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {\r
+ break;\r
+ }\r
+\r
+ SmbiosStruct.Raw = Buffer;\r
+\r
+ //\r
+ // if QueryType==Random, print this structure.\r
+ // if QueryType!=Random, but Hdr->Type==QueryType, also print it.\r
+ // only if QueryType != Random and Hdr->Type != QueryType, skiped it.\r
+ //\r
+ if (QueryType != STRUCTURE_TYPE_RANDOM && SmbiosStruct.Hdr->Type != QueryType) {\r
+ continue;\r
+ }\r
+\r
+ ShellPrintEx(-1,-1,L"\n=========================================================\n");\r
+ ShellPrintHiiEx(-1,-1,NULL,\r
+ STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),\r
+ gShellDebug1HiiHandle,\r
+ SmbiosStruct.Hdr->Type,\r
+ SmbiosStruct.Hdr->Handle\r
+ );\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gShellDebug1HiiHandle, Index, Length);\r
+ //\r
+ // Addr of structure in structure in table\r
+ //\r
+ ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gShellDebug1HiiHandle, (UINTN) Buffer);\r
+ DumpHex (0, 0, Length, Buffer);\r
+\r
+/*\r
+ //\r
+ // Get internal commands, such as change options.\r
+ //\r
+ Status = WaitEnter ();\r
+ if (EFI_ERROR (Status)) {\r
+ if (Status == EFI_ABORTED) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return Status;\r
+ }\r
+*/\r
+\r
+ if (gShowType != SHOW_NONE) {\r
+ //\r
+ // Print structure information\r
+ //\r
+ SmbiosPrintStructure (&SmbiosStruct, gShowType);\r
+ ShellPrintEx(-1,-1,L"\n");\r
+\r
+/*\r
+ //\r
+ // Get internal commands, such as change options.\r
+ //\r
+ Status = WaitEnter ();\r
+ if (EFI_ERROR (Status)) {\r
+ if (Status == EFI_ABORTED) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return Status;\r
+ }\r
+*/\r
+ }\r
+ if (!RandomView) {\r
+ break;\r
+ }\r
+ //\r
+ // Support Execution Interrupt.\r
+ //\r
+ if (ShellGetExecutionBreakFlag ()) {\r
+ return EFI_ABORTED;\r
+ }\r
+ }\r
+\r
+ ShellPrintEx(-1,-1,L"\n=========================================================\n");\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return EFI_BAD_BUFFER_SIZE;\r
+}\r
+\r