]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosView.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SmbiosView / SmbiosView.c
CommitLineData
5d73d92f 1/** @file\r
2 Tools of clarify the content of the smbios table.\r
3\r
c011b6c9 4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
ba0014b9 5 Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
56ba3746 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
5d73d92f 7\r
8**/\r
9\r
8a765da2 10#include "UefiShellDebug1CommandsLib.h"\r
5d73d92f 11#include "LibSmbiosView.h"\r
a1d4bfcc 12#include "SmbiosView.h"\r
5d73d92f 13#include "PrintInfo.h"\r
14#include "QueryTable.h"\r
15\r
47d20b54
MK
16UINT8 gShowType = SHOW_DETAIL;\r
17STATIC STRUCTURE_STATISTICS *mStatisticsTable = NULL;\r
18STATIC STRUCTURE_STATISTICS *mSmbios64BitStatisticsTable = NULL;\r
5d73d92f 19\r
20UINT8 SmbiosMajorVersion;\r
21UINT8 SmbiosMinorVersion;\r
22\r
ec8a502e
EL
23UINTN mNumberOfSmbios64BitStructures;\r
24UINTN mSmbios64BitTableLength;\r
25\r
47d20b54
MK
26STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
27 { L"-t", TypeValue },\r
28 { L"-h", TypeValue },\r
29 { L"-s", TypeFlag },\r
30 { L"-a", TypeFlag },\r
31 { NULL, TypeMax }\r
32};\r
5d73d92f 33\r
a1d4bfcc 34/**\r
35 Function for 'smbiosview' command.\r
36\r
37 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
38 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
39**/\r
5d73d92f 40SHELL_STATUS\r
41EFIAPI\r
42ShellCommandRunSmbiosView (\r
43 IN EFI_HANDLE ImageHandle,\r
44 IN EFI_SYSTEM_TABLE *SystemTable\r
45 )\r
46{\r
47d20b54
MK
47 UINT8 StructType;\r
48 UINT16 StructHandle;\r
49 EFI_STATUS Status;\r
50 EFI_STATUS Status1;\r
51 EFI_STATUS Status2;\r
52 BOOLEAN RandomView;\r
53 LIST_ENTRY *Package;\r
54 CHAR16 *ProblemParam;\r
55 SHELL_STATUS ShellStatus;\r
56 CONST CHAR16 *Temp;\r
5d73d92f 57\r
ec8a502e
EL
58 mStatisticsTable = NULL;\r
59 mSmbios64BitStatisticsTable = NULL;\r
60 Package = NULL;\r
61 ShellStatus = SHELL_SUCCESS;\r
5d73d92f 62\r
3737ac2b 63 Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
47d20b54
MK
64 if (EFI_ERROR (Status)) {\r
65 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
66 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"smbiosview", ProblemParam);\r
67 FreePool (ProblemParam);\r
5d73d92f 68 ShellStatus = SHELL_INVALID_PARAMETER;\r
69 } else {\r
47d20b54 70 ASSERT (FALSE);\r
5d73d92f 71 }\r
72 } else {\r
47d20b54
MK
73 if (ShellCommandLineGetCount (Package) > 1) {\r
74 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"smbiosview");\r
5d73d92f 75 ShellStatus = SHELL_INVALID_PARAMETER;\r
47d20b54
MK
76 } else if (ShellCommandLineGetFlag (Package, L"-t") && (ShellCommandLineGetValue (Package, L"-t") == NULL)) {\r
77 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"smbiosview", L"-t");\r
980d554e 78 ShellStatus = SHELL_INVALID_PARAMETER;\r
47d20b54
MK
79 } else if (ShellCommandLineGetFlag (Package, L"-h") && (ShellCommandLineGetValue (Package, L"-h") == NULL)) {\r
80 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"smbiosview", L"-h");\r
980d554e 81 ShellStatus = SHELL_INVALID_PARAMETER;\r
3737ac2b 82 } else if (\r
47d20b54
MK
83 (ShellCommandLineGetFlag (Package, L"-t") && ShellCommandLineGetFlag (Package, L"-h")) ||\r
84 (ShellCommandLineGetFlag (Package, L"-t") && ShellCommandLineGetFlag (Package, L"-s")) ||\r
85 (ShellCommandLineGetFlag (Package, L"-t") && ShellCommandLineGetFlag (Package, L"-a")) ||\r
86 (ShellCommandLineGetFlag (Package, L"-h") && ShellCommandLineGetFlag (Package, L"-s")) ||\r
87 (ShellCommandLineGetFlag (Package, L"-h") && ShellCommandLineGetFlag (Package, L"-a")) ||\r
88 (ShellCommandLineGetFlag (Package, L"-s") && ShellCommandLineGetFlag (Package, L"-a"))\r
89 )\r
90 {\r
91 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"smbiosview");\r
3737ac2b 92 ShellStatus = SHELL_INVALID_PARAMETER;\r
5d73d92f 93 } else {\r
5d73d92f 94 //\r
95 // Init Lib\r
5d73d92f 96 //\r
ec8a502e
EL
97 Status1 = LibSmbiosInit ();\r
98 Status2 = LibSmbios64BitInit ();\r
99 if (EFI_ERROR (Status1) && EFI_ERROR (Status2)) {\r
47d20b54 100 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_CANNOT_GET_TABLE), gShellDebug1HiiHandle);\r
5d73d92f 101 ShellStatus = SHELL_NOT_FOUND;\r
102 goto Done;\r
103 }\r
ba0014b9 104\r
47d20b54
MK
105 StructType = STRUCTURE_TYPE_RANDOM;\r
106 RandomView = TRUE;\r
ba0014b9 107\r
47d20b54 108 Temp = ShellCommandLineGetValue (Package, L"-t");\r
5d73d92f 109 if (Temp != NULL) {\r
47d20b54 110 StructType = (UINT8)ShellStrToUintn (Temp);\r
5d73d92f 111 }\r
ba0014b9 112\r
47d20b54 113 if (ShellCommandLineGetFlag (Package, L"-a")) {\r
ec8a502e 114 gShowType = SHOW_ALL;\r
5d73d92f 115 }\r
ba0014b9 116\r
ec8a502e
EL
117 if (!EFI_ERROR (Status1)) {\r
118 //\r
119 // Initialize the StructHandle to be the first handle\r
120 //\r
47d20b54 121 StructHandle = INVALID_HANDLE;\r
ec8a502e 122 LibGetSmbiosStructure (&StructHandle, NULL, NULL);\r
ba0014b9 123\r
47d20b54 124 Temp = ShellCommandLineGetValue (Package, L"-h");\r
ec8a502e
EL
125 if (Temp != NULL) {\r
126 RandomView = FALSE;\r
47d20b54 127 StructHandle = (UINT16)ShellStrToUintn (Temp);\r
ec8a502e 128 }\r
47d20b54 129\r
ec8a502e
EL
130 //\r
131 // build statistics table\r
132 //\r
133 Status = InitSmbiosTableStatistics ();\r
134 if (EFI_ERROR (Status)) {\r
135 ShellStatus = SHELL_NOT_FOUND;\r
136 goto Done;\r
137 }\r
ba0014b9 138\r
47d20b54 139 if (ShellCommandLineGetFlag (Package, L"-s")) {\r
ec8a502e 140 Status = DisplayStatisticsTable (SHOW_DETAIL);\r
47d20b54 141 if (EFI_ERROR (Status)) {\r
ec8a502e
EL
142 ShellStatus = SHELL_NOT_FOUND;\r
143 }\r
47d20b54 144\r
ec8a502e
EL
145 goto Show64Bit;\r
146 }\r
ba0014b9 147\r
ec8a502e
EL
148 //\r
149 // Show SMBIOS structure information\r
150 //\r
151 Status = SMBiosView (StructType, StructHandle, gShowType, RandomView);\r
47d20b54 152 if (EFI_ERROR (Status)) {\r
5d73d92f 153 ShellStatus = SHELL_NOT_FOUND;\r
ec8a502e 154 goto Done;\r
5d73d92f 155 }\r
5d73d92f 156 }\r
157\r
ec8a502e
EL
158Show64Bit:\r
159 if (!EFI_ERROR (Status2)) {\r
160 //\r
161 // build statistics table\r
162 //\r
163 Status = InitSmbios64BitTableStatistics ();\r
164 if (EFI_ERROR (Status)) {\r
165 ShellStatus = SHELL_NOT_FOUND;\r
166 goto Done;\r
167 }\r
47d20b54 168\r
ec8a502e
EL
169 //\r
170 // Initialize the StructHandle to be the first handle\r
171 //\r
47d20b54 172 StructHandle = INVALID_HANDLE;\r
ec8a502e 173 LibGetSmbios64BitStructure (&StructHandle, NULL, NULL);\r
ba0014b9 174\r
47d20b54 175 Temp = ShellCommandLineGetValue (Package, L"-h");\r
ec8a502e
EL
176 if (Temp != NULL) {\r
177 RandomView = FALSE;\r
47d20b54 178 StructHandle = (UINT16)ShellStrToUintn (Temp);\r
ec8a502e 179 }\r
ba0014b9 180\r
47d20b54 181 if (ShellCommandLineGetFlag (Package, L"-s")) {\r
ec8a502e 182 Status = DisplaySmbios64BitStatisticsTable (SHOW_DETAIL);\r
47d20b54 183 if (EFI_ERROR (Status)) {\r
ec8a502e
EL
184 ShellStatus = SHELL_NOT_FOUND;\r
185 }\r
47d20b54 186\r
ec8a502e
EL
187 goto Done;\r
188 }\r
ba0014b9 189\r
ec8a502e
EL
190 //\r
191 // Show SMBIOS structure information\r
192 //\r
193 Status = SMBios64View (StructType, StructHandle, gShowType, RandomView);\r
47d20b54 194 if (EFI_ERROR (Status)) {\r
ec8a502e
EL
195 ShellStatus = SHELL_NOT_FOUND;\r
196 }\r
5d73d92f 197 }\r
198 }\r
199 }\r
47d20b54 200\r
5d73d92f 201Done:\r
202 //\r
203 // Release resources\r
204 //\r
205 if (mStatisticsTable != NULL) {\r
206 //\r
207 // Release statistics table\r
208 //\r
209 FreePool (mStatisticsTable);\r
210 mStatisticsTable = NULL;\r
211 }\r
212\r
ec8a502e
EL
213 if (mSmbios64BitStatisticsTable != NULL) {\r
214 //\r
215 // Release statistics table\r
216 //\r
217 FreePool (mSmbios64BitStatisticsTable);\r
218 mSmbios64BitStatisticsTable = NULL;\r
219 }\r
220\r
5d73d92f 221 if (Package != NULL) {\r
222 ShellCommandLineFreeVarList (Package);\r
223 }\r
224\r
225 LibSmbiosCleanup ();\r
ec8a502e 226 LibSmbios64BitCleanup ();\r
5d73d92f 227\r
228 return ShellStatus;\r
229}\r
230\r
231/**\r
232 Query all structures Data from SMBIOS table and Display\r
233 the information to users as required display option.\r
234\r
235 @param[in] QueryType Structure type to view.\r
236 @param[in] QueryHandle Structure handle to view.\r
237 @param[in] Option Display option: none,outline,normal,detail.\r
238 @param[in] RandomView Support for -h parameter.\r
239\r
240 @retval EFI_SUCCESS print is successful.\r
241 @retval EFI_BAD_BUFFER_SIZE structure is out of the range of SMBIOS table.\r
242**/\r
243EFI_STATUS\r
5d73d92f 244SMBiosView (\r
47d20b54
MK
245 IN UINT8 QueryType,\r
246 IN UINT16 QueryHandle,\r
247 IN UINT8 Option,\r
248 IN BOOLEAN RandomView\r
5d73d92f 249 )\r
250{\r
47d20b54
MK
251 UINT16 Handle;\r
252 UINT8 *Buffer;\r
253 UINT16 Length;\r
254 UINTN Index;\r
5d73d92f 255\r
a1d4bfcc 256 SMBIOS_STRUCTURE_POINTER SmbiosStruct;\r
187cb3dd 257 SMBIOS_TABLE_ENTRY_POINT *SMBiosTable;\r
5d73d92f 258\r
259 SMBiosTable = NULL;\r
260 LibSmbiosGetEPS (&SMBiosTable);\r
261 if (SMBiosTable == NULL) {\r
47d20b54 262 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
5d73d92f 263 return EFI_BAD_BUFFER_SIZE;\r
264 }\r
265\r
266 if (CompareMem (SMBiosTable->AnchorString, "_SM_", 4) == 0) {\r
267 //\r
187cb3dd 268 // Have got SMBIOS table\r
5d73d92f 269 //\r
270 SmbiosPrintEPSInfo (SMBiosTable, Option);\r
271\r
272 SmbiosMajorVersion = SMBiosTable->MajorVersion;\r
273 SmbiosMinorVersion = SMBiosTable->MinorVersion;\r
274\r
47d20b54
MK
275 ShellPrintEx (-1, -1, L"=========================================================\n");\r
276 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gShellDebug1HiiHandle);\r
5d73d92f 277\r
278 if (QueryType == STRUCTURE_TYPE_RANDOM) {\r
47d20b54 279 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gShellDebug1HiiHandle);\r
5d73d92f 280 } else {\r
47d20b54 281 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gShellDebug1HiiHandle, QueryType);\r
5d73d92f 282 }\r
283\r
284 if (RandomView) {\r
47d20b54 285 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gShellDebug1HiiHandle);\r
5d73d92f 286 } else {\r
47d20b54 287 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gShellDebug1HiiHandle, QueryHandle);\r
5d73d92f 288 }\r
289\r
47d20b54
MK
290 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gShellDebug1HiiHandle);\r
291 ShellPrintEx (-1, -1, GetShowTypeString (gShowType));\r
292 ShellPrintEx (-1, -1, L"\n\n");\r
5d73d92f 293\r
47d20b54
MK
294 /*\r
295 //\r
296 // Get internal commands, such as change options.\r
297 //\r
298 Status = WaitEnter ();\r
299 if (EFI_ERROR (Status)) {\r
300 if (Status == EFI_ABORTED) {\r
301 return EFI_SUCCESS;\r
302 }\r
5d73d92f 303\r
47d20b54
MK
304 return Status;\r
305 }\r
306 */\r
5d73d92f 307\r
308 //\r
309 // Searching and display structure info\r
310 //\r
47d20b54 311 Handle = QueryHandle;\r
5d73d92f 312 for (Index = 0; Index < SMBiosTable->NumberOfSmbiosStructures; Index++) {\r
313 //\r
314 // if reach the end of table, break..\r
315 //\r
187cb3dd 316 if (Handle == INVALID_HANDLE) {\r
5d73d92f 317 break;\r
318 }\r
47d20b54 319\r
5d73d92f 320 //\r
321 // handle then point to the next!\r
322 //\r
187cb3dd 323 if (LibGetSmbiosStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {\r
5d73d92f 324 break;\r
325 }\r
187cb3dd 326\r
a1d4bfcc 327 SmbiosStruct.Raw = Buffer;\r
5d73d92f 328\r
329 //\r
330 // if QueryType==Random, print this structure.\r
331 // if QueryType!=Random, but Hdr->Type==QueryType, also print it.\r
332 // only if QueryType != Random and Hdr->Type != QueryType, skiped it.\r
333 //\r
47d20b54 334 if ((QueryType != STRUCTURE_TYPE_RANDOM) && (SmbiosStruct.Hdr->Type != QueryType)) {\r
5d73d92f 335 continue;\r
336 }\r
337\r
47d20b54
MK
338 ShellPrintEx (-1, -1, L"\n=========================================================\n");\r
339 ShellPrintHiiEx (\r
340 -1,\r
341 -1,\r
342 NULL,\r
5d73d92f 343 STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),\r
344 gShellDebug1HiiHandle,\r
a1d4bfcc 345 SmbiosStruct.Hdr->Type,\r
346 SmbiosStruct.Hdr->Handle\r
47d20b54
MK
347 );\r
348 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gShellDebug1HiiHandle, Index, Length);\r
5d73d92f 349 //\r
350 // Addr of structure in structure in table\r
351 //\r
47d20b54 352 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gShellDebug1HiiHandle, (UINTN)Buffer);\r
5d73d92f 353 DumpHex (0, 0, Length, Buffer);\r
354\r
47d20b54
MK
355 /*\r
356 //\r
357 // Get internal commands, such as change options.\r
358 //\r
359 Status = WaitEnter ();\r
360 if (EFI_ERROR (Status)) {\r
361 if (Status == EFI_ABORTED) {\r
362 return EFI_SUCCESS;\r
363 }\r
5d73d92f 364\r
47d20b54
MK
365 return Status;\r
366 }\r
367 */\r
5d73d92f 368\r
369 if (gShowType != SHOW_NONE) {\r
5d73d92f 370 //\r
371 // Print structure information\r
372 //\r
a1d4bfcc 373 SmbiosPrintStructure (&SmbiosStruct, gShowType);\r
47d20b54
MK
374 ShellPrintEx (-1, -1, L"\n");\r
375\r
376 /*\r
377 //\r
378 // Get internal commands, such as change options.\r
379 //\r
380 Status = WaitEnter ();\r
381 if (EFI_ERROR (Status)) {\r
382 if (Status == EFI_ABORTED) {\r
383 return EFI_SUCCESS;\r
384 }\r
385\r
386 return Status;\r
387 }\r
388 */\r
5d73d92f 389 }\r
47d20b54 390\r
5d73d92f 391 if (!RandomView) {\r
392 break;\r
393 }\r
47d20b54 394\r
7ac133d0 395 //\r
396 // Support Execution Interrupt.\r
397 //\r
398 if (ShellGetExecutionBreakFlag ()) {\r
399 return EFI_ABORTED;\r
400 }\r
5d73d92f 401 }\r
402\r
47d20b54 403 ShellPrintEx (-1, -1, L"\n=========================================================\n");\r
5d73d92f 404 return EFI_SUCCESS;\r
405 }\r
406\r
407 return EFI_BAD_BUFFER_SIZE;\r
408}\r
409\r
ec8a502e
EL
410/**\r
411 Query all structures Data from SMBIOS table and Display\r
412 the information to users as required display option.\r
413\r
414 @param[in] QueryType Structure type to view.\r
415 @param[in] QueryHandle Structure handle to view.\r
416 @param[in] Option Display option: none,outline,normal,detail.\r
417 @param[in] RandomView Support for -h parameter.\r
418\r
419 @retval EFI_SUCCESS print is successful.\r
420 @retval EFI_BAD_BUFFER_SIZE structure is out of the range of SMBIOS table.\r
421**/\r
422EFI_STATUS\r
ec8a502e 423SMBios64View (\r
47d20b54
MK
424 IN UINT8 QueryType,\r
425 IN UINT16 QueryHandle,\r
426 IN UINT8 Option,\r
427 IN BOOLEAN RandomView\r
ec8a502e
EL
428 )\r
429{\r
430 UINT16 Handle;\r
431 UINT8 *Buffer;\r
432 UINT16 Length;\r
433 UINTN Index;\r
434 SMBIOS_STRUCTURE_POINTER SmbiosStruct;\r
435 SMBIOS_TABLE_3_0_ENTRY_POINT *SMBiosTable;\r
436\r
437 SMBiosTable = NULL;\r
438 LibSmbios64BitGetEPS (&SMBiosTable);\r
439 if (SMBiosTable == NULL) {\r
47d20b54 440 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
ec8a502e
EL
441 return EFI_BAD_BUFFER_SIZE;\r
442 }\r
443\r
444 if (CompareMem (SMBiosTable->AnchorString, "_SM3_", 5) == 0) {\r
445 //\r
446 // Have got SMBIOS table\r
447 //\r
448 Smbios64BitPrintEPSInfo (SMBiosTable, Option);\r
449\r
450 SmbiosMajorVersion = SMBiosTable->MajorVersion;\r
451 SmbiosMinorVersion = SMBiosTable->MinorVersion;\r
452\r
47d20b54
MK
453 ShellPrintEx (-1, -1, L"=========================================================\n");\r
454 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gShellDebug1HiiHandle);\r
ec8a502e
EL
455\r
456 if (QueryType == STRUCTURE_TYPE_RANDOM) {\r
47d20b54 457 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gShellDebug1HiiHandle);\r
ec8a502e 458 } else {\r
47d20b54 459 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gShellDebug1HiiHandle, QueryType);\r
ec8a502e
EL
460 }\r
461\r
462 if (RandomView) {\r
47d20b54 463 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gShellDebug1HiiHandle);\r
ec8a502e 464 } else {\r
47d20b54 465 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gShellDebug1HiiHandle, QueryHandle);\r
ec8a502e
EL
466 }\r
467\r
47d20b54
MK
468 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gShellDebug1HiiHandle);\r
469 ShellPrintEx (-1, -1, GetShowTypeString (gShowType));\r
470 ShellPrintEx (-1, -1, L"\n\n");\r
ec8a502e 471\r
47d20b54
MK
472 /*\r
473 //\r
474 // Get internal commands, such as change options.\r
475 //\r
476 Status = WaitEnter ();\r
477 if (EFI_ERROR (Status)) {\r
478 if (Status == EFI_ABORTED) {\r
479 return EFI_SUCCESS;\r
480 }\r
ec8a502e 481\r
47d20b54
MK
482 return Status;\r
483 }\r
484 */\r
ec8a502e
EL
485\r
486 //\r
487 // Searching and display structure info\r
488 //\r
47d20b54 489 Handle = QueryHandle;\r
ec8a502e
EL
490 for (Index = 0; Index < mNumberOfSmbios64BitStructures; Index++) {\r
491 //\r
492 // if reach the end of table, break..\r
493 //\r
494 if (Handle == INVALID_HANDLE) {\r
495 break;\r
496 }\r
47d20b54 497\r
ec8a502e
EL
498 //\r
499 // handle then point to the next!\r
500 //\r
501 if (LibGetSmbios64BitStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {\r
502 break;\r
503 }\r
504\r
505 SmbiosStruct.Raw = Buffer;\r
506\r
507 //\r
508 // if QueryType==Random, print this structure.\r
509 // if QueryType!=Random, but Hdr->Type==QueryType, also print it.\r
510 // only if QueryType != Random and Hdr->Type != QueryType, skiped it.\r
511 //\r
47d20b54 512 if ((QueryType != STRUCTURE_TYPE_RANDOM) && (SmbiosStruct.Hdr->Type != QueryType)) {\r
ec8a502e
EL
513 continue;\r
514 }\r
515\r
47d20b54
MK
516 ShellPrintEx (-1, -1, L"\n=========================================================\n");\r
517 ShellPrintHiiEx (\r
518 -1,\r
519 -1,\r
520 NULL,\r
ec8a502e
EL
521 STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),\r
522 gShellDebug1HiiHandle,\r
523 SmbiosStruct.Hdr->Type,\r
524 SmbiosStruct.Hdr->Handle\r
47d20b54
MK
525 );\r
526 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gShellDebug1HiiHandle, Index, Length);\r
ec8a502e
EL
527 //\r
528 // Addr of structure in structure in table\r
529 //\r
47d20b54 530 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gShellDebug1HiiHandle, (UINTN)Buffer);\r
ec8a502e
EL
531 DumpHex (0, 0, Length, Buffer);\r
532\r
47d20b54
MK
533 /*\r
534 //\r
535 // Get internal commands, such as change options.\r
536 //\r
537 Status = WaitEnter ();\r
538 if (EFI_ERROR (Status)) {\r
539 if (Status == EFI_ABORTED) {\r
540 return EFI_SUCCESS;\r
541 }\r
ec8a502e 542\r
47d20b54
MK
543 return Status;\r
544 }\r
545 */\r
ec8a502e
EL
546\r
547 if (gShowType != SHOW_NONE) {\r
548 //\r
549 // Print structure information\r
550 //\r
551 SmbiosPrintStructure (&SmbiosStruct, gShowType);\r
47d20b54
MK
552 ShellPrintEx (-1, -1, L"\n");\r
553\r
554 /*\r
555 //\r
556 // Get internal commands, such as change options.\r
557 //\r
558 Status = WaitEnter ();\r
559 if (EFI_ERROR (Status)) {\r
560 if (Status == EFI_ABORTED) {\r
561 return EFI_SUCCESS;\r
562 }\r
563\r
564 return Status;\r
565 }\r
566 */\r
ec8a502e 567 }\r
47d20b54 568\r
ec8a502e
EL
569 if (!RandomView) {\r
570 break;\r
571 }\r
47d20b54 572\r
ec8a502e
EL
573 //\r
574 // Support Execution Interrupt.\r
575 //\r
576 if (ShellGetExecutionBreakFlag ()) {\r
577 return EFI_ABORTED;\r
578 }\r
579 }\r
580\r
47d20b54 581 ShellPrintEx (-1, -1, L"\n=========================================================\n");\r
ec8a502e
EL
582 return EFI_SUCCESS;\r
583 }\r
584\r
585 return EFI_BAD_BUFFER_SIZE;\r
586}\r
587\r
5d73d92f 588/**\r
589 Function to initialize the global mStatisticsTable object.\r
590\r
591 @retval EFI_SUCCESS print is successful.\r
592**/\r
593EFI_STATUS\r
5d73d92f 594InitSmbiosTableStatistics (\r
595 VOID\r
596 )\r
597{\r
47d20b54
MK
598 UINT16 Handle;\r
599 UINT8 *Buffer;\r
600 UINT16 Length;\r
601 UINT16 Offset;\r
602 UINT16 Index;\r
5d73d92f 603\r
a1d4bfcc 604 SMBIOS_STRUCTURE_POINTER SmbiosStruct;\r
187cb3dd 605 SMBIOS_TABLE_ENTRY_POINT *SMBiosTable;\r
a1d4bfcc 606 STRUCTURE_STATISTICS *StatisticsPointer;\r
5d73d92f 607\r
608 SMBiosTable = NULL;\r
609 LibSmbiosGetEPS (&SMBiosTable);\r
610 if (SMBiosTable == NULL) {\r
47d20b54 611 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
5d73d92f 612 return EFI_NOT_FOUND;\r
613 }\r
614\r
615 if (CompareMem (SMBiosTable->AnchorString, "_SM_", 4) != 0) {\r
47d20b54 616 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), gShellDebug1HiiHandle);\r
5d73d92f 617 return EFI_INVALID_PARAMETER;\r
618 }\r
47d20b54 619\r
5d73d92f 620 //\r
621 // Allocate memory to mStatisticsTable\r
622 //\r
623 if (mStatisticsTable != NULL) {\r
624 FreePool (mStatisticsTable);\r
625 mStatisticsTable = NULL;\r
626 }\r
627\r
47d20b54 628 mStatisticsTable = (STRUCTURE_STATISTICS *)AllocateZeroPool (SMBiosTable->NumberOfSmbiosStructures * sizeof (STRUCTURE_STATISTICS));\r
5d73d92f 629\r
630 if (mStatisticsTable == NULL) {\r
47d20b54 631 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gShellDebug1HiiHandle);\r
5d73d92f 632 return EFI_OUT_OF_RESOURCES;\r
633 }\r
634\r
47d20b54 635 Offset = 0;\r
a1d4bfcc 636 StatisticsPointer = mStatisticsTable;\r
5d73d92f 637\r
638 //\r
639 // search from the first one\r
640 //\r
187cb3dd 641 Handle = INVALID_HANDLE;\r
5d73d92f 642 LibGetSmbiosStructure (&Handle, NULL, NULL);\r
643 for (Index = 1; Index <= SMBiosTable->NumberOfSmbiosStructures; Index++) {\r
644 //\r
645 // If reach the end of table, break..\r
646 //\r
187cb3dd 647 if (Handle == INVALID_HANDLE) {\r
5d73d92f 648 break;\r
649 }\r
47d20b54 650\r
5d73d92f 651 //\r
652 // After LibGetSmbiosStructure(), handle then point to the next!\r
653 //\r
187cb3dd 654 if (LibGetSmbiosStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {\r
5d73d92f 655 break;\r
656 }\r
657\r
a1d4bfcc 658 SmbiosStruct.Raw = Buffer;\r
5d73d92f 659\r
660 //\r
661 // general statistics\r
662 //\r
a1d4bfcc 663 StatisticsPointer->Index = Index;\r
664 StatisticsPointer->Type = SmbiosStruct.Hdr->Type;\r
665 StatisticsPointer->Handle = SmbiosStruct.Hdr->Handle;\r
666 StatisticsPointer->Length = Length;\r
667 StatisticsPointer->Addr = Offset;\r
5d73d92f 668\r
47d20b54 669 Offset = (UINT16)(Offset + Length);\r
187cb3dd 670\r
47d20b54 671 StatisticsPointer = &mStatisticsTable[Index];\r
5d73d92f 672 }\r
673\r
674 return EFI_SUCCESS;\r
675}\r
676\r
ec8a502e
EL
677/**\r
678 @param[in] Smbios64EntryPoint SMBIOS 64-bit entry point.\r
679 @param[out] NumberOfSmbios64Structures The number of structures in 64-bit SMBIOS table.\r
680 @param[out] Smbios64TableLength The total length of 64-bit SMBIOS table.\r
681\r
ba0014b9 682 @retval EFI_SUCCESS Calculation was successful.\r
ec8a502e
EL
683**/\r
684EFI_STATUS\r
ec8a502e 685CalculateSmbios64BitStructureCountAndLength (\r
47d20b54
MK
686 SMBIOS_TABLE_3_0_ENTRY_POINT *Smbios64EntryPoint,\r
687 UINTN *NumberOfSmbios64Structures,\r
688 UINTN *Smbios64TableLength\r
689 )\r
ec8a502e 690{\r
47d20b54
MK
691 SMBIOS_STRUCTURE_POINTER Smbios;\r
692 UINT8 *Raw;\r
ba0014b9 693\r
47d20b54 694 *Smbios64TableLength = 0;\r
ec8a502e 695 *NumberOfSmbios64Structures = 0;\r
ba0014b9 696\r
ec8a502e
EL
697 Smbios.Raw = (UINT8 *)(UINTN)(Smbios64EntryPoint->TableAddress);\r
698 while (TRUE) {\r
699 if (Smbios.Hdr->Type == 127) {\r
700 //\r
701 // Reach the end of table type 127\r
702 //\r
703 (*NumberOfSmbios64Structures)++;\r
704 (*Smbios64TableLength) += sizeof (SMBIOS_STRUCTURE);\r
705 return EFI_SUCCESS;\r
706 }\r
707\r
708 Raw = Smbios.Raw;\r
709 //\r
710 // Walk to next structure\r
711 //\r
47d20b54 712 LibGetSmbiosString (&Smbios, (UINT16)(-1));\r
ec8a502e
EL
713 //\r
714 // Length = Next structure head - this structure head\r
715 //\r
47d20b54 716 (*Smbios64TableLength) += ((UINTN)Smbios.Raw - (UINTN)Raw);\r
ec8a502e 717 if ((*Smbios64TableLength) > Smbios64EntryPoint->TableMaximumSize) {\r
ba0014b9
LG
718 //\r
719 // The actual table length exceeds maximum table size,\r
720 // There should be something wrong with SMBIOS table.\r
721 //\r
722 return EFI_INVALID_PARAMETER;\r
ec8a502e 723 }\r
47d20b54 724\r
ec8a502e
EL
725 (*NumberOfSmbios64Structures)++;\r
726 }\r
727}\r
728\r
729/**\r
730 Function to initialize the global mSmbios64BitStatisticsTable object.\r
731\r
732 @retval EFI_SUCCESS print is successful.\r
733**/\r
734EFI_STATUS\r
ec8a502e
EL
735InitSmbios64BitTableStatistics (\r
736 VOID\r
737 )\r
738{\r
47d20b54
MK
739 UINT16 Handle;\r
740 UINT8 *Buffer;\r
741 UINT16 Length;\r
742 UINT16 Offset;\r
743 UINT16 Index;\r
744 EFI_STATUS Status;\r
ec8a502e
EL
745 SMBIOS_STRUCTURE_POINTER SmbiosStruct;\r
746 SMBIOS_TABLE_3_0_ENTRY_POINT *SMBiosTable;\r
747 STRUCTURE_STATISTICS *StatisticsPointer;\r
748\r
749 SMBiosTable = NULL;\r
750 LibSmbios64BitGetEPS (&SMBiosTable);\r
751 if (SMBiosTable == NULL) {\r
47d20b54 752 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
ec8a502e
EL
753 return EFI_NOT_FOUND;\r
754 }\r
755\r
756 if (CompareMem (SMBiosTable->AnchorString, "_SM3_", 5) != 0) {\r
47d20b54 757 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), gShellDebug1HiiHandle);\r
ec8a502e
EL
758 return EFI_INVALID_PARAMETER;\r
759 }\r
47d20b54 760\r
ec8a502e
EL
761 //\r
762 // Allocate memory to mSmbios64BitStatisticsTable\r
763 //\r
764 if (mSmbios64BitStatisticsTable != NULL) {\r
765 FreePool (mSmbios64BitStatisticsTable);\r
766 mSmbios64BitStatisticsTable = NULL;\r
767 }\r
47d20b54 768\r
ec8a502e
EL
769 //\r
770 // Calculate number of smbios structures\r
771 //\r
772 Status = CalculateSmbios64BitStructureCountAndLength (SMBiosTable, &mNumberOfSmbios64BitStructures, &mSmbios64BitTableLength);\r
773 if ((EFI_ERROR (Status)) || (mSmbios64BitTableLength > SMBiosTable->TableMaximumSize)) {\r
ba0014b9 774 return EFI_INVALID_PARAMETER;\r
ec8a502e 775 }\r
ba0014b9 776\r
47d20b54 777 mSmbios64BitStatisticsTable = (STRUCTURE_STATISTICS *)AllocateZeroPool (mNumberOfSmbios64BitStructures * sizeof (STRUCTURE_STATISTICS));\r
ec8a502e
EL
778\r
779 if (mSmbios64BitStatisticsTable == NULL) {\r
47d20b54 780 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gShellDebug1HiiHandle);\r
ec8a502e
EL
781 return EFI_OUT_OF_RESOURCES;\r
782 }\r
783\r
47d20b54 784 Offset = 0;\r
ec8a502e
EL
785 StatisticsPointer = mSmbios64BitStatisticsTable;\r
786\r
787 //\r
788 // search from the first one\r
789 //\r
790 Handle = INVALID_HANDLE;\r
791 LibGetSmbios64BitStructure (&Handle, NULL, NULL);\r
792 for (Index = 1; Index <= mNumberOfSmbios64BitStructures; Index++) {\r
793 //\r
794 // If reach the end of table, break..\r
795 //\r
796 if (Handle == INVALID_HANDLE) {\r
797 break;\r
798 }\r
47d20b54 799\r
ec8a502e
EL
800 //\r
801 // After LibGetSmbios64BitStructure(), handle then point to the next!\r
802 //\r
803 if (LibGetSmbios64BitStructure (&Handle, &Buffer, &Length) != DMI_SUCCESS) {\r
804 break;\r
805 }\r
806\r
807 SmbiosStruct.Raw = Buffer;\r
808\r
809 //\r
810 // general statistics\r
811 //\r
812 StatisticsPointer->Index = Index;\r
813 StatisticsPointer->Type = SmbiosStruct.Hdr->Type;\r
814 StatisticsPointer->Handle = SmbiosStruct.Hdr->Handle;\r
815 StatisticsPointer->Length = Length;\r
816 StatisticsPointer->Addr = Offset;\r
817\r
47d20b54 818 Offset = (UINT16)(Offset + Length);\r
ec8a502e 819\r
47d20b54 820 StatisticsPointer = &mSmbios64BitStatisticsTable[Index];\r
ec8a502e
EL
821 }\r
822\r
823 return EFI_SUCCESS;\r
824}\r
825\r
5d73d92f 826/**\r
827 Function to display the global mStatisticsTable object.\r
828\r
829 @param[in] Option ECHO, NORMAL, or DETAIL control the amount of detail displayed.\r
830\r
831 @retval EFI_SUCCESS print is successful.\r
832**/\r
833EFI_STATUS\r
5d73d92f 834DisplayStatisticsTable (\r
47d20b54 835 IN UINT8 Option\r
5d73d92f 836 )\r
837{\r
47d20b54
MK
838 UINTN Index;\r
839 UINTN Num;\r
840 STRUCTURE_STATISTICS *StatisticsPointer;\r
841 SMBIOS_TABLE_ENTRY_POINT *SMBiosTable;\r
5d73d92f 842\r
843 SMBiosTable = NULL;\r
844 if (Option < SHOW_OUTLINE) {\r
845 return EFI_SUCCESS;\r
846 }\r
47d20b54 847\r
5d73d92f 848 //\r
849 // display EPS information firstly\r
850 //\r
851 LibSmbiosGetEPS (&SMBiosTable);\r
852 if (SMBiosTable == NULL) {\r
47d20b54 853 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
5d73d92f 854 return EFI_UNSUPPORTED;\r
855 }\r
856\r
47d20b54 857 ShellPrintEx (-1, -1, L"\n============================================================\n");\r
5d73d92f 858 SmbiosPrintEPSInfo (SMBiosTable, Option);\r
859\r
860 if (Option < SHOW_NORMAL) {\r
861 return EFI_SUCCESS;\r
862 }\r
863\r
864 if (mStatisticsTable == NULL) {\r
47d20b54 865 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), gShellDebug1HiiHandle);\r
5d73d92f 866 return EFI_NOT_FOUND;\r
867 }\r
868\r
47d20b54 869 ShellPrintEx (-1, -1, L"============================================================\n");\r
a1d4bfcc 870 StatisticsPointer = &mStatisticsTable[0];\r
47d20b54 871 Num = SMBiosTable->NumberOfSmbiosStructures;\r
5d73d92f 872 //\r
873 // display statistics table content\r
874 //\r
875 for (Index = 1; Index <= Num; Index++) {\r
47d20b54
MK
876 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), gShellDebug1HiiHandle, StatisticsPointer->Index);\r
877 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), gShellDebug1HiiHandle, StatisticsPointer->Type);\r
878 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), gShellDebug1HiiHandle, StatisticsPointer->Handle);\r
5d73d92f 879 if (Option >= SHOW_DETAIL) {\r
47d20b54
MK
880 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), gShellDebug1HiiHandle, StatisticsPointer->Addr);\r
881 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), gShellDebug1HiiHandle, StatisticsPointer->Length);\r
5d73d92f 882 }\r
883\r
47d20b54 884 ShellPrintEx (-1, -1, L"\n");\r
a1d4bfcc 885 StatisticsPointer = &mStatisticsTable[Index];\r
ec8a502e 886\r
47d20b54
MK
887 /*\r
888 //\r
889 // Display 20 lines and wait for a page break\r
890 //\r
891 if (Index % 20 == 0) {\r
892 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), gShellDebug1HiiHandle);\r
893 Status = WaitEnter ();\r
894 if (EFI_ERROR (Status)) {\r
895 if (Status == EFI_ABORTED) {\r
896 return EFI_SUCCESS;\r
897 }\r
898\r
899 return Status;\r
900 }\r
901 }\r
902 */\r
ec8a502e
EL
903 }\r
904\r
905 return EFI_SUCCESS;\r
906}\r
907\r
908/**\r
909 Function to display the global mSmbios64BitStatisticsTable object.\r
910\r
911 @param[in] Option ECHO, NORMAL, or DETAIL control the amount of detail displayed.\r
912\r
913 @retval EFI_SUCCESS print is successful.\r
914**/\r
915EFI_STATUS\r
ec8a502e 916DisplaySmbios64BitStatisticsTable (\r
47d20b54 917 IN UINT8 Option\r
ec8a502e
EL
918 )\r
919{\r
47d20b54
MK
920 UINTN Index;\r
921 UINTN Num;\r
922 STRUCTURE_STATISTICS *StatisticsPointer;\r
923 SMBIOS_TABLE_3_0_ENTRY_POINT *SMBiosTable;\r
ec8a502e
EL
924\r
925 SMBiosTable = NULL;\r
926 if (Option < SHOW_OUTLINE) {\r
927 return EFI_SUCCESS;\r
928 }\r
47d20b54 929\r
ec8a502e
EL
930 //\r
931 // display EPS information firstly\r
932 //\r
933 LibSmbios64BitGetEPS (&SMBiosTable);\r
934 if (SMBiosTable == NULL) {\r
47d20b54 935 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gShellDebug1HiiHandle);\r
ec8a502e
EL
936 return EFI_UNSUPPORTED;\r
937 }\r
938\r
47d20b54 939 ShellPrintEx (-1, -1, L"\n============================================================\n");\r
ec8a502e
EL
940 Smbios64BitPrintEPSInfo (SMBiosTable, Option);\r
941\r
942 if (Option < SHOW_NORMAL) {\r
943 return EFI_SUCCESS;\r
944 }\r
945\r
946 if (mSmbios64BitStatisticsTable == NULL) {\r
47d20b54 947 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), gShellDebug1HiiHandle);\r
ec8a502e
EL
948 return EFI_NOT_FOUND;\r
949 }\r
950\r
47d20b54 951 ShellPrintEx (-1, -1, L"============================================================\n");\r
ec8a502e 952 StatisticsPointer = &mSmbios64BitStatisticsTable[0];\r
47d20b54 953 Num = mNumberOfSmbios64BitStructures;\r
ec8a502e
EL
954 //\r
955 // display statistics table content\r
956 //\r
957 for (Index = 1; Index <= Num; Index++) {\r
47d20b54
MK
958 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), gShellDebug1HiiHandle, StatisticsPointer->Index);\r
959 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), gShellDebug1HiiHandle, StatisticsPointer->Type);\r
960 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), gShellDebug1HiiHandle, StatisticsPointer->Handle);\r
ec8a502e 961 if (Option >= SHOW_DETAIL) {\r
47d20b54
MK
962 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), gShellDebug1HiiHandle, StatisticsPointer->Addr);\r
963 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), gShellDebug1HiiHandle, StatisticsPointer->Length);\r
ec8a502e
EL
964 }\r
965\r
47d20b54 966 ShellPrintEx (-1, -1, L"\n");\r
ec8a502e 967 StatisticsPointer = &mSmbios64BitStatisticsTable[Index];\r
5d73d92f 968\r
47d20b54
MK
969 /*\r
970 //\r
971 // Display 20 lines and wait for a page break\r
972 //\r
973 if (Index % 20 == 0) {\r
974 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), gShellDebug1HiiHandle);\r
975 Status = WaitEnter ();\r
976 if (EFI_ERROR (Status)) {\r
977 if (Status == EFI_ABORTED) {\r
978 return EFI_SUCCESS;\r
979 }\r
980\r
981 return Status;\r
982 }\r
983 }\r
984 */\r
5d73d92f 985 }\r
986\r
987 return EFI_SUCCESS;\r
988}\r
989\r
990/**\r
991 function to return a string of the detail level.\r
992\r
993 @param[in] ShowType The detail level whose name is desired in clear text.\r
994\r
995 @return A pointer to a string representing the ShowType (or 'undefined type' if not known).\r
996**/\r
997CHAR16 *\r
5d73d92f 998GetShowTypeString (\r
47d20b54 999 UINT8 ShowType\r
5d73d92f 1000 )\r
1001{\r
1002 //\r
1003 // show type\r
1004 //\r
1005 switch (ShowType) {\r
47d20b54
MK
1006 case SHOW_NONE:\r
1007 return L"SHOW_NONE";\r
5d73d92f 1008\r
47d20b54
MK
1009 case SHOW_OUTLINE:\r
1010 return L"SHOW_OUTLINE";\r
5d73d92f 1011\r
47d20b54
MK
1012 case SHOW_NORMAL:\r
1013 return L"SHOW_NORMAL";\r
5d73d92f 1014\r
47d20b54
MK
1015 case SHOW_DETAIL:\r
1016 return L"SHOW_DETAIL";\r
5d73d92f 1017\r
47d20b54
MK
1018 case SHOW_ALL:\r
1019 return L"SHOW_ALL";\r
5d73d92f 1020\r
47d20b54
MK
1021 default:\r
1022 return L"Undefined type";\r
5d73d92f 1023 }\r
1024}\r