]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
ShellPkg: Improved Smbios Type 9 table changes in PrintInfo.c
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SmbiosView / PrintInfo.c
1 /** @file
2 Module for clarifying the content of the smbios structure element information.
3
4 Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>
5 Copyright (c) 1985 - 2022, American Megatrends International LLC.<BR>
6 (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
7 (C) Copyright 2015-2019 Hewlett Packard Enterprise Development LP<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10 **/
11
12 #include "UefiShellDebug1CommandsLib.h"
13 #include "PrintInfo.h"
14 #include "LibSmbiosView.h"
15 #include "QueryTable.h"
16 #include "EventLogInfo.h"
17
18 //
19 // Get the certain bit of 'value'
20 //
21 #define BIT(value, bit) ((value) & ((UINT64) 1) << (bit))
22
23 //
24 // Check if above or equal to version
25 //
26 #define AE_SMBIOS_VERSION(MajorVersion, MinorVersion) \
27 (SmbiosMajorVersion > (MajorVersion) || (SmbiosMajorVersion == (MajorVersion) && SmbiosMinorVersion >= (MinorVersion)))
28
29 //
30 //////////////////////////////////////////////////////////
31 // Macros of print structure element, simplify coding.
32 //
33 #define PRINT_PENDING_STRING(pStruct, type, element) \
34 do { \
35 CHAR8 *StringBuf; \
36 StringBuf = LibGetSmbiosString ((pStruct), (pStruct->type->element)); \
37 ShellPrintEx(-1,-1,L"%a",#element); \
38 ShellPrintEx(-1,-1,L": %a\n", (StringBuf != NULL) ? StringBuf: ""); \
39 } while (0);
40
41 #define PRINT_SMBIOS_STRING(pStruct, stringnumber, element) \
42 do { \
43 CHAR8 *StringBuf; \
44 StringBuf = LibGetSmbiosString ((pStruct), (stringnumber)); \
45 ShellPrintEx(-1,-1,L"%a",#element); \
46 ShellPrintEx(-1,-1,L": %a\n", (StringBuf != NULL) ? StringBuf: ""); \
47 } while (0);
48
49 #define PRINT_STRUCT_VALUE(pStruct, type, element) \
50 do { \
51 ShellPrintEx(-1,-1,L"%a",#element); \
52 ShellPrintEx(-1,-1,L": %u\n", (pStruct->type->element)); \
53 } while (0);
54
55 #define PRINT_STRUCT_VALUE_H(pStruct, type, element) \
56 do { \
57 ShellPrintEx(-1,-1,L"%a",#element); \
58 ShellPrintEx(-1,-1,L": 0x%x\n", (pStruct->type->element)); \
59 } while (0);
60
61 #define PRINT_STRUCT_VALUE_LH(pStruct, type, element) \
62 do { \
63 ShellPrintEx(-1,-1,L"%a",#element); \
64 ShellPrintEx(-1,-1,L": 0x%lx\n", (pStruct->type->element)); \
65 } while (0);
66
67 #define PRINT_BIT_FIELD(pStruct, type, element, size) \
68 do { \
69 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), gShellDebug1HiiHandle); \
70 ShellPrintEx(-1,-1,L"%a",#element); \
71 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), gShellDebug1HiiHandle, size); \
72 DumpHex (0, 0, size, &(pStruct->type->element)); \
73 } while (0);
74
75 #define PRINT_SMBIOS_BIT_FIELD(pStruct, startaddress, element, size) \
76 do { \
77 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), gShellDebug1HiiHandle); \
78 ShellPrintEx(-1,-1,L"%a",#element); \
79 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), gShellDebug1HiiHandle, size); \
80 DumpHex (0, 0, size, startaddress); \
81 } while (0);
82
83 //
84 /////////////////////////////////////////
85 //
86
87 /**
88 Copy Length of Src buffer to Dest buffer,
89 add a NULL termination to Dest buffer.
90
91 @param[in, out] Dest Destination buffer head.
92 @param[in] Src Source buffer head.
93 @param[in] Length Length of buffer to be copied.
94 **/
95 VOID
96 MemToString (
97 IN OUT VOID *Dest,
98 IN VOID *Src,
99 IN UINTN Length
100 )
101 {
102 UINT8 *SrcBuffer;
103 UINT8 *DestBuffer;
104
105 SrcBuffer = (UINT8 *)Src;
106 DestBuffer = (UINT8 *)Dest;
107 //
108 // copy byte by byte
109 //
110 while ((Length--) != 0) {
111 *DestBuffer++ = *SrcBuffer++;
112 }
113
114 //
115 // append a NULL terminator
116 //
117 *DestBuffer = '\0';
118 }
119
120 //
121 //////////////////////////////////////////////
122 //
123 // Functions below is to show the information
124 //
125
126 /**
127 Print the info of EPS(Entry Point Structure).
128
129 @param[in] SmbiosTable Pointer to the SMBIOS table entry point.
130 @param[in] Option Display option.
131 **/
132 VOID
133 SmbiosPrintEPSInfo (
134 IN SMBIOS_TABLE_ENTRY_POINT *SmbiosTable,
135 IN UINT8 Option
136 )
137 {
138 UINT8 Anchor[5];
139 UINT8 InAnchor[6];
140
141 if (SmbiosTable == NULL) {
142 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMBIOSTABLE_NULL), gShellDebug1HiiHandle);
143 return;
144 }
145
146 if (Option == SHOW_NONE) {
147 return;
148 }
149
150 if (Option >= SHOW_NORMAL) {
151 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_SIGN), gShellDebug1HiiHandle);
152 MemToString (Anchor, SmbiosTable->AnchorString, 4);
153 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ANCHOR_STR), gShellDebug1HiiHandle, Anchor);
154 ShellPrintHiiEx (
155 -1,
156 -1,
157 NULL,
158 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EPS_CHECKSUM),
159 gShellDebug1HiiHandle,
160 SmbiosTable->EntryPointStructureChecksum
161 );
162 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_LEN), gShellDebug1HiiHandle, SmbiosTable->EntryPointLength);
163 ShellPrintHiiEx (
164 -1,
165 -1,
166 NULL,
167 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VERSION),
168 gShellDebug1HiiHandle,
169 SmbiosTable->MajorVersion,
170 SmbiosTable->MinorVersion
171 );
172 ShellPrintHiiEx (
173 -1,
174 -1,
175 NULL,
176 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NUMBER_STRUCT),
177 gShellDebug1HiiHandle,
178 SmbiosTable->NumberOfSmbiosStructures
179 );
180 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_STRUCT_SIZE), gShellDebug1HiiHandle, SmbiosTable->MaxStructureSize);
181 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_ADDR), gShellDebug1HiiHandle, SmbiosTable->TableAddress);
182 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_LENGTH), gShellDebug1HiiHandle, SmbiosTable->TableLength);
183 }
184
185 //
186 // If SHOW_ALL, also print followings.
187 //
188 if (Option >= SHOW_DETAIL) {
189 ShellPrintHiiEx (
190 -1,
191 -1,
192 NULL,
193 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_REVISION),
194 gShellDebug1HiiHandle,
195 SmbiosTable->EntryPointRevision
196 );
197 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BCD_REVISION), gShellDebug1HiiHandle, SmbiosTable->SmbiosBcdRevision);
198 //
199 // Since raw data is not string, add a NULL terminater.
200 //
201 MemToString (InAnchor, SmbiosTable->IntermediateAnchorString, 5);
202 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_ACHOR), gShellDebug1HiiHandle, InAnchor);
203 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_CHECKSUM), gShellDebug1HiiHandle, SmbiosTable->IntermediateChecksum);
204 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMATTED_AREA), gShellDebug1HiiHandle);
205 DumpHex (2, 0, 5, SmbiosTable->FormattedArea);
206 }
207
208 Print (L"\n");
209 }
210
211 /**
212 Print the info of 64-bit EPS(Entry Point Structure).
213
214 @param[in] SmbiosTable Pointer to the SMBIOS table entry point.
215 @param[in] Option Display option.
216 **/
217 VOID
218 Smbios64BitPrintEPSInfo (
219 IN SMBIOS_TABLE_3_0_ENTRY_POINT *SmbiosTable,
220 IN UINT8 Option
221 )
222 {
223 UINT8 Anchor[5];
224
225 if (SmbiosTable == NULL) {
226 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMBIOSTABLE_NULL), gShellDebug1HiiHandle);
227 return;
228 }
229
230 if (Option == SHOW_NONE) {
231 return;
232 }
233
234 if (Option >= SHOW_NORMAL) {
235 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_64_BIT_ENTRY_POINT_SIGN), gShellDebug1HiiHandle);
236
237 MemToString (Anchor, SmbiosTable->AnchorString, 5);
238 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ANCHOR_STR), gShellDebug1HiiHandle, Anchor);
239
240 ShellPrintHiiEx (
241 -1,
242 -1,
243 NULL,
244 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EPS_CHECKSUM),
245 gShellDebug1HiiHandle,
246 SmbiosTable->EntryPointStructureChecksum
247 );
248
249 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_LEN), gShellDebug1HiiHandle, SmbiosTable->EntryPointLength);
250
251 ShellPrintHiiEx (
252 -1,
253 -1,
254 NULL,
255 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VERSION),
256 gShellDebug1HiiHandle,
257 SmbiosTable->MajorVersion,
258 SmbiosTable->MinorVersion
259 );
260
261 ShellPrintHiiEx (
262 -1,
263 -1,
264 NULL,
265 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DOCREV),
266 gShellDebug1HiiHandle,
267 SmbiosTable->DocRev
268 );
269
270 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_MAX_SIZE), gShellDebug1HiiHandle, SmbiosTable->TableMaximumSize);
271
272 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_ADDR), gShellDebug1HiiHandle, SmbiosTable->TableAddress);
273 }
274
275 //
276 // If SHOW_ALL, also print followings.
277 //
278 if (Option >= SHOW_DETAIL) {
279 ShellPrintHiiEx (
280 -1,
281 -1,
282 NULL,
283 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_REVISION),
284 gShellDebug1HiiHandle,
285 SmbiosTable->EntryPointRevision
286 );
287 }
288
289 Print (L"\n");
290 }
291
292 /**
293 This function print the content of the structure pointed by Struct.
294
295 @param[in] Struct Point to the structure to be printed.
296 @param[in] Option Print option of information detail.
297
298 @retval EFI_SUCCESS Successfully Printing this function.
299 @retval EFI_INVALID_PARAMETER Invalid Structure.
300 @retval EFI_UNSUPPORTED Unsupported.
301 **/
302 EFI_STATUS
303 SmbiosPrintStructure (
304 IN SMBIOS_STRUCTURE_POINTER *Struct,
305 IN UINT8 Option
306 )
307 {
308 UINT8 Index;
309 UINT8 Index2;
310 UINT8 *Buffer;
311
312 if (Struct == NULL) {
313 return EFI_INVALID_PARAMETER;
314 }
315
316 if (Option == SHOW_NONE) {
317 return EFI_SUCCESS;
318 }
319
320 Buffer = (UINT8 *)(UINTN)(Struct->Raw);
321
322 //
323 // Display structure header
324 //
325 DisplayStructureTypeInfo (Struct->Hdr->Type, SHOW_DETAIL);
326 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMAT_PART_LEN), gShellDebug1HiiHandle, Struct->Hdr->Length);
327 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, Struct->Hdr->Handle);
328
329 if (Option == SHOW_OUTLINE) {
330 return EFI_SUCCESS;
331 }
332
333 switch (Struct->Hdr->Type) {
334 //
335 // BIOS Information (Type 0)
336 //
337 case 0:
338 PRINT_PENDING_STRING (Struct, Type0, Vendor);
339 PRINT_PENDING_STRING (Struct, Type0, BiosVersion);
340 PRINT_STRUCT_VALUE_H (Struct, Type0, BiosSegment);
341 PRINT_PENDING_STRING (Struct, Type0, BiosReleaseDate);
342 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SIZE), gShellDebug1HiiHandle, 64 * (Struct->Type0->BiosSize + 1));
343
344 DisplayBiosCharacteristics (ReadUnaligned64 ((UINT64 *)(UINTN)&(Struct->Type0->BiosCharacteristics)), Option);
345
346 if (Struct->Hdr->Length > 0x12) {
347 DisplayBiosCharacteristicsExt1 (Struct->Type0->BIOSCharacteristicsExtensionBytes[0], Option);
348 }
349
350 if (Struct->Hdr->Length > 0x13) {
351 DisplayBiosCharacteristicsExt2 (Struct->Type0->BIOSCharacteristicsExtensionBytes[1], Option);
352 }
353
354 if (AE_SMBIOS_VERSION (0x2, 0x4) && (Struct->Hdr->Length > 0x14)) {
355 PRINT_STRUCT_VALUE (Struct, Type0, SystemBiosMajorRelease);
356 PRINT_STRUCT_VALUE (Struct, Type0, SystemBiosMinorRelease);
357 PRINT_STRUCT_VALUE (Struct, Type0, EmbeddedControllerFirmwareMajorRelease);
358 PRINT_STRUCT_VALUE (Struct, Type0, EmbeddedControllerFirmwareMinorRelease);
359 }
360
361 if (AE_SMBIOS_VERSION (0x3, 0x1) && (Struct->Hdr->Length > 0x18)) {
362 ShellPrintHiiEx (
363 -1,
364 -1,
365 NULL,
366 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EXTENDED_BIOS_SIZE),
367 gShellDebug1HiiHandle,
368 Struct->Type0->ExtendedBiosSize.Size,
369 (Struct->Type0->ExtendedBiosSize.Unit == 0x0) ? L"MB" : L"GB"
370 );
371 }
372
373 break;
374
375 //
376 // System Information (Type 1)
377 //
378 case 1:
379 PRINT_PENDING_STRING (Struct, Type1, Manufacturer);
380 PRINT_PENDING_STRING (Struct, Type1, ProductName);
381 PRINT_PENDING_STRING (Struct, Type1, Version);
382 PRINT_PENDING_STRING (Struct, Type1, SerialNumber);
383 PRINT_BIT_FIELD (Struct, Type1, Uuid, 16);
384 DisplaySystemWakeupType (Struct->Type1->WakeUpType, Option);
385 if (AE_SMBIOS_VERSION (0x2, 0x4) && (Struct->Hdr->Length > 0x19)) {
386 PRINT_PENDING_STRING (Struct, Type1, SKUNumber);
387 PRINT_PENDING_STRING (Struct, Type1, Family);
388 }
389
390 break;
391
392 //
393 // Baseboard Information (Type 2)
394 //
395 case 2:
396 PRINT_PENDING_STRING (Struct, Type2, Manufacturer);
397 PRINT_PENDING_STRING (Struct, Type2, ProductName);
398 PRINT_PENDING_STRING (Struct, Type2, Version);
399 PRINT_PENDING_STRING (Struct, Type2, SerialNumber);
400 if (Struct->Hdr->Length > 0x8) {
401 PRINT_PENDING_STRING (Struct, Type2, AssetTag);
402 DisplayBaseBoardFeatureFlags (*(UINT8 *)&Struct->Type2->FeatureFlag, Option);
403 PRINT_PENDING_STRING (Struct, Type2, LocationInChassis);
404 PRINT_STRUCT_VALUE_H (Struct, Type2, ChassisHandle);
405 DisplayBaseBoardBoardType (Struct->Type2->BoardType, Option);
406 }
407
408 break;
409
410 //
411 // System Enclosure (Type 3)
412 //
413 case 3:
414 PRINT_PENDING_STRING (Struct, Type3, Manufacturer);
415 PRINT_STRUCT_VALUE (Struct, Type3, Type);
416 DisplaySystemEnclosureType (Struct->Type3->Type, Option);
417 PRINT_PENDING_STRING (Struct, Type3, Version);
418 PRINT_PENDING_STRING (Struct, Type3, SerialNumber);
419 PRINT_PENDING_STRING (Struct, Type3, AssetTag);
420 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOTUP_STATE), gShellDebug1HiiHandle);
421 DisplaySystemEnclosureStatus (Struct->Type3->BootupState, Option);
422 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_STATE), gShellDebug1HiiHandle);
423 DisplaySystemEnclosureStatus (Struct->Type3->PowerSupplyState, Option);
424 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THERMAL_STATE), gShellDebug1HiiHandle);
425 DisplaySystemEnclosureStatus (Struct->Type3->ThermalState, Option);
426 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SECURITY_STATUS), gShellDebug1HiiHandle);
427 DisplaySESecurityStatus (Struct->Type3->SecurityStatus, Option);
428 if (AE_SMBIOS_VERSION (0x2, 0x3)) {
429 if (Struct->Hdr->Length > 0xD) {
430 PRINT_BIT_FIELD (Struct, Type3, OemDefined, 4);
431 }
432
433 if (Struct->Hdr->Length > 0x11) {
434 PRINT_STRUCT_VALUE (Struct, Type3, Height);
435 }
436
437 if (Struct->Hdr->Length > 0x12) {
438 PRINT_STRUCT_VALUE (Struct, Type3, NumberofPowerCords);
439 }
440
441 if (Struct->Hdr->Length > 0x13) {
442 PRINT_STRUCT_VALUE (Struct, Type3, ContainedElementCount);
443 }
444
445 if (Struct->Hdr->Length > 0x14) {
446 PRINT_STRUCT_VALUE (Struct, Type3, ContainedElementRecordLength);
447 }
448
449 if (Struct->Hdr->Length > 0x15) {
450 for (Index = 0; Index < Struct->Type3->ContainedElementCount; Index++) {
451 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONTAINED_ELEMENT), gShellDebug1HiiHandle, Index+1);
452 for (Index2 = 0; Index2 < Struct->Type3->ContainedElementRecordLength; Index2++) {
453 Print (L"%02X ", Buffer[0x15 + (Index * Struct->Type3->ContainedElementRecordLength) + Index2]);
454 }
455
456 Print (L"\n");
457 }
458 }
459 }
460
461 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0x13)) {
462 if (Struct->Hdr->Length > (0x15 + (Struct->Type3->ContainedElementCount * Struct->Type3->ContainedElementRecordLength))) {
463 PRINT_SMBIOS_STRING (Struct, Buffer[0x15 + (Struct->Type3->ContainedElementCount * Struct->Type3->ContainedElementRecordLength)], SKUNumber);
464 }
465 }
466
467 break;
468
469 //
470 // Processor Information (Type 4)
471 //
472 case 4:
473 PRINT_SMBIOS_STRING (Struct, Struct->Type4->Socket, SocketDesignation)
474 DisplayProcessorType (Struct->Type4->ProcessorType, Option);
475 if (AE_SMBIOS_VERSION (0x2, 0x6) && (Struct->Hdr->Length > 0x28) &&
476 (Struct->Type4->ProcessorFamily == 0xFE))
477 {
478 //
479 // Get family from ProcessorFamily2 field
480 //
481 DisplayProcessorFamily2 (Struct->Type4->ProcessorFamily2, Option);
482 } else {
483 DisplayProcessorFamily (Struct->Type4->ProcessorFamily, Option);
484 }
485
486 PRINT_PENDING_STRING (Struct, Type4, ProcessorManufacturer);
487 PRINT_BIT_FIELD (Struct, Type4, ProcessorId, 8);
488 PRINT_PENDING_STRING (Struct, Type4, ProcessorVersion);
489 DisplayProcessorVoltage (*(UINT8 *)&(Struct->Type4->Voltage), Option);
490 PRINT_STRUCT_VALUE (Struct, Type4, ExternalClock);
491 PRINT_STRUCT_VALUE (Struct, Type4, MaxSpeed);
492 PRINT_STRUCT_VALUE (Struct, Type4, CurrentSpeed);
493 DisplayProcessorStatus (Struct->Type4->Status, Option);
494 DisplayProcessorUpgrade (Struct->Type4->ProcessorUpgrade, Option);
495 PRINT_STRUCT_VALUE_H (Struct, Type4, L1CacheHandle);
496 PRINT_STRUCT_VALUE_H (Struct, Type4, L2CacheHandle);
497 PRINT_STRUCT_VALUE_H (Struct, Type4, L3CacheHandle);
498 if (AE_SMBIOS_VERSION (0x2, 0x3) && (Struct->Hdr->Length > 0x20)) {
499 PRINT_PENDING_STRING (Struct, Type4, SerialNumber);
500 PRINT_PENDING_STRING (Struct, Type4, AssetTag);
501 PRINT_PENDING_STRING (Struct, Type4, PartNumber);
502 }
503
504 if (AE_SMBIOS_VERSION (0x2, 0x5) && (Struct->Hdr->Length > 0x23)) {
505 PRINT_STRUCT_VALUE (Struct, Type4, CoreCount);
506 PRINT_STRUCT_VALUE (Struct, Type4, EnabledCoreCount);
507 PRINT_STRUCT_VALUE (Struct, Type4, ThreadCount);
508 DisplayProcessorCharacteristics (Struct->Type4->ProcessorCharacteristics, Option);
509 }
510
511 if ((SmbiosMajorVersion >= 0x3) && (Struct->Hdr->Length > 0x2A)) {
512 PRINT_STRUCT_VALUE (Struct, Type4, CoreCount2);
513 PRINT_STRUCT_VALUE (Struct, Type4, EnabledCoreCount2);
514 PRINT_STRUCT_VALUE (Struct, Type4, ThreadCount2);
515 }
516
517 break;
518
519 //
520 // Memory Controller Information (Type 5)
521 //
522 case 5:
523 {
524 UINT8 SlotNum;
525 SlotNum = Struct->Type5->AssociatedMemorySlotNum;
526
527 DisplayMcErrorDetectMethod (Struct->Type5->ErrDetectMethod, Option);
528 DisplayMcErrorCorrectCapability (*(UINT8 *)&(Struct->Type5->ErrCorrectCapability), Option);
529 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRT), gShellDebug1HiiHandle);
530 DisplayMcInterleaveSupport (Struct->Type5->SupportInterleave, Option);
531 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CURRENT), gShellDebug1HiiHandle);
532 DisplayMcInterleaveSupport (Struct->Type5->CurrentInterleave, Option);
533 DisplayMaxMemoryModuleSize (Struct->Type5->MaxMemoryModuleSize, SlotNum, Option);
534 DisplayMcMemorySpeeds (*(UINT16 *)&(Struct->Type5->SupportSpeed), Option);
535 DisplayMmMemoryType (Struct->Type5->SupportMemoryType, Option);
536 DisplayMemoryModuleVoltage (Struct->Type5->MemoryModuleVoltage, Option);
537 PRINT_STRUCT_VALUE (Struct, Type5, AssociatedMemorySlotNum);
538 //
539 // According to SMBIOS Specification, offset 0x0F
540 //
541 DisplayMemoryModuleConfigHandles ((UINT16 *)(&Buffer[0x0F]), SlotNum, Option);
542 DisplayMcErrorCorrectCapability (Buffer[0x0F + 2 * SlotNum], Option);
543 break;
544 }
545
546 //
547 // Memory Module Information (Type 6)
548 //
549 case 6:
550 PRINT_PENDING_STRING (Struct, Type6, SocketDesignation);
551 DisplayMmBankConnections (Struct->Type6->BankConnections, Option);
552 PRINT_STRUCT_VALUE (Struct, Type6, CurrentSpeed);
553 DisplayMmMemoryType (*(UINT16 *)&(Struct->Type6->CurrentMemoryType), Option);
554 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INSTALLED), gShellDebug1HiiHandle);
555 DisplayMmMemorySize (*(UINT8 *)&(Struct->Type6->InstalledSize), Option);
556 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED), gShellDebug1HiiHandle);
557 DisplayMmMemorySize (*(UINT8 *)&(Struct->Type6->EnabledSize), Option);
558 DisplayMmErrorStatus (Struct->Type6->ErrorStatus, Option);
559 break;
560
561 //
562 // Cache Information (Type 7)
563 //
564 case 7:
565 PRINT_PENDING_STRING (Struct, Type7, SocketDesignation);
566 DisplayCacheConfiguration (Struct->Type7->CacheConfiguration, Option);
567 PRINT_STRUCT_VALUE_H (Struct, Type7, MaximumCacheSize);
568 PRINT_STRUCT_VALUE_H (Struct, Type7, InstalledSize);
569 PRINT_STRUCT_VALUE_H (Struct, Type7, SupportedSRAMType);
570 PRINT_STRUCT_VALUE_H (Struct, Type7, CurrentSRAMType);
571 DisplayCacheSRAMType (ReadUnaligned16 ((UINT16 *)(UINTN)&(Struct->Type7->CurrentSRAMType)), Option);
572 PRINT_STRUCT_VALUE_H (Struct, Type7, CacheSpeed);
573 DisplayCacheErrCorrectingType (Struct->Type7->ErrorCorrectionType, Option);
574 DisplayCacheSystemCacheType (Struct->Type7->SystemCacheType, Option);
575 DisplayCacheAssociativity (Struct->Type7->Associativity, Option);
576 if (AE_SMBIOS_VERSION (0x3, 0x1) && (Struct->Hdr->Length > 0x13)) {
577 PRINT_STRUCT_VALUE_H (Struct, Type7, MaximumCacheSize2);
578 PRINT_STRUCT_VALUE_H (Struct, Type7, InstalledSize2);
579 }
580
581 break;
582
583 //
584 // Port Connector Information (Type 8)
585 //
586 case 8:
587 PRINT_PENDING_STRING (Struct, Type8, InternalReferenceDesignator);
588 Print (L"Internal ");
589 DisplayPortConnectorType (Struct->Type8->InternalConnectorType, Option);
590 PRINT_PENDING_STRING (Struct, Type8, ExternalReferenceDesignator);
591 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EXTERNAL), gShellDebug1HiiHandle);
592 DisplayPortConnectorType (Struct->Type8->ExternalConnectorType, Option);
593 DisplayPortType (Struct->Type8->PortType, Option);
594 break;
595
596 //
597 // System Slots (Type 9)
598 //
599 case 9:
600 {
601 MISC_SLOT_PEER_GROUP *PeerGroupPtr;
602 SMBIOS_TABLE_TYPE9_EXTENDED *Type9ExtendedStruct;
603 UINT8 PeerGroupCount;
604
605 PRINT_PENDING_STRING (Struct, Type9, SlotDesignation);
606 DisplaySystemSlotType (Struct->Type9->SlotType, Option);
607 DisplaySystemSlotDataBusWidth (Struct->Type9->SlotDataBusWidth, Option);
608 DisplaySystemSlotCurrentUsage (Struct->Type9->CurrentUsage, Option);
609 DisplaySystemSlotLength (Struct->Type9->SlotLength, Option);
610 DisplaySystemSlotId (
611 Struct->Type9->SlotID,
612 Struct->Type9->SlotType,
613 Option
614 );
615 DisplaySlotCharacteristics1 (*(UINT8 *)&(Struct->Type9->SlotCharacteristics1), Option);
616 DisplaySlotCharacteristics2 (*(UINT8 *)&(Struct->Type9->SlotCharacteristics2), Option);
617 if (AE_SMBIOS_VERSION (0x2, 0x6) && (Struct->Hdr->Length > 0xD)) {
618 PRINT_STRUCT_VALUE_H (Struct, Type9, SegmentGroupNum);
619 PRINT_STRUCT_VALUE_H (Struct, Type9, BusNum);
620 PRINT_STRUCT_VALUE_H (Struct, Type9, DevFuncNum);
621 }
622
623 if (AE_SMBIOS_VERSION (0x3, 0x2)) {
624 if (Struct->Hdr->Length > 0x11) {
625 PRINT_STRUCT_VALUE (Struct, Type9, DataBusWidth);
626 }
627
628 if (Struct->Hdr->Length > 0x12) {
629 PRINT_STRUCT_VALUE (Struct, Type9, PeerGroupingCount);
630
631 PeerGroupCount = Struct->Type9->PeerGroupingCount;
632 PeerGroupPtr = Struct->Type9->PeerGroups;
633 for (Index = 0; Index < PeerGroupCount; Index++) {
634 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SLOT_PEER_GROUPS), gShellDebug1HiiHandle, Index + 1);
635 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SEGMENT_GROUP_NUM), gShellDebug1HiiHandle, PeerGroupPtr[Index].SegmentGroupNum);
636 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BUS_NUM), gShellDebug1HiiHandle, PeerGroupPtr[Index].BusNum);
637 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_FUNC_NUM), gShellDebug1HiiHandle, PeerGroupPtr[Index].DevFuncNum);
638 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DATA_BUS_WIDTH), gShellDebug1HiiHandle, PeerGroupPtr[Index].DataBusWidth);
639 }
640
641 // Since PeerGroups has a variable number of entries, new fields added after PeerGroups are defined in
642 // a extended structure. Those fields can be referenced using SMBIOS_TABLE_TYPE9_EXTENDED structure.
643 Type9ExtendedStruct = (SMBIOS_TABLE_TYPE9_EXTENDED *)((UINT8 *)PeerGroupPtr + (PeerGroupCount * sizeof (MISC_SLOT_PEER_GROUP)));
644 DisplaySystemSlotHeight (Type9ExtendedStruct->SlotHeight, Option);
645 DisplaySystemSlotPhysicalWidth (Type9ExtendedStruct->SlotPhysicalWidth, Option);
646 DisplaySystemSlotInformation (Type9ExtendedStruct->SlotInformation, Option);
647 }
648 }
649
650 break;
651 }
652
653 //
654 // On Board Devices Information (Type 10)
655 //
656 case 10:
657 {
658 UINTN NumOfDevice;
659 NumOfDevice = (Struct->Type10->Hdr.Length - sizeof (SMBIOS_STRUCTURE)) / (2 * sizeof (UINT8));
660 for (Index = 0; Index < NumOfDevice; Index++) {
661 ShellPrintEx (-1, -1, (((Struct->Type10->Device[Index].DeviceType) & 0x80) != 0) ? L"Device Enabled\n" : L"Device Disabled\n");
662 DisplayOnboardDeviceTypes ((Struct->Type10->Device[Index].DeviceType) & 0x7F, Option);
663 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DESC_STRING), gShellDebug1HiiHandle);
664 ShellPrintEx (-1, -1, L"%a\n", LibGetSmbiosString (Struct, Struct->Type10->Device[Index].DescriptionString));
665 }
666
667 break;
668 }
669
670 //
671 // Oem Strings (Type 11)
672 //
673 case 11:
674 PRINT_STRUCT_VALUE (Struct, Type11, StringCount);
675 for (Index = 1; Index <= Struct->Type11->StringCount; Index++) {
676 ShellPrintEx (-1, -1, L"%a\n", LibGetSmbiosString (Struct, Index));
677 }
678
679 break;
680
681 //
682 // System Configuration Options (Type 12)
683 //
684 case 12:
685 PRINT_STRUCT_VALUE (Struct, Type12, StringCount);
686 for (Index = 1; Index <= Struct->Type12->StringCount; Index++) {
687 ShellPrintEx (-1, -1, L"%a\n", LibGetSmbiosString (Struct, Index));
688 }
689
690 break;
691
692 //
693 // BIOS Language Information (Type 13)
694 //
695 case 13:
696 PRINT_STRUCT_VALUE (Struct, Type13, InstallableLanguages);
697 PRINT_STRUCT_VALUE (Struct, Type13, Flags);
698 PRINT_BIT_FIELD (Struct, Type13, Reserved, 15);
699 PRINT_PENDING_STRING (Struct, Type13, CurrentLanguages);
700 break;
701
702 //
703 // Group Associations (Type 14)
704 //
705 case 14:
706 {
707 UINT8 NumOfItem;
708 NumOfItem = (Struct->Type14->Hdr.Length - 5) / 3;
709 PRINT_PENDING_STRING (Struct, Type14, GroupName);
710 for (Index = 0; Index < NumOfItem; Index++) {
711 ShellPrintEx (-1, -1, L"ItemType %u: %u\n", Index + 1, Struct->Type14->Group[Index].ItemType);
712 ShellPrintEx (-1, -1, L"ItemHandle %u: %u\n", Index + 1, Struct->Type14->Group[Index].ItemHandle);
713 }
714
715 break;
716 }
717
718 //
719 // System Event Log (Type 15)
720 //
721 case 15:
722 {
723 EVENT_LOG_TYPE *Ptr;
724 UINT8 Count;
725 UINT8 *AccessMethodAddress;
726
727 PRINT_STRUCT_VALUE_H (Struct, Type15, LogAreaLength);
728 PRINT_STRUCT_VALUE_H (Struct, Type15, LogHeaderStartOffset);
729 PRINT_STRUCT_VALUE_H (Struct, Type15, LogDataStartOffset);
730 DisplaySELAccessMethod (Struct->Type15->AccessMethod, Option);
731 PRINT_STRUCT_VALUE_H (Struct, Type15, AccessMethodAddress);
732 DisplaySELLogStatus (Struct->Type15->LogStatus, Option);
733 PRINT_STRUCT_VALUE_H (Struct, Type15, LogChangeToken);
734 DisplaySysEventLogHeaderFormat (Struct->Type15->LogHeaderFormat, Option);
735 PRINT_STRUCT_VALUE_H (Struct, Type15, NumberOfSupportedLogTypeDescriptors);
736 PRINT_STRUCT_VALUE_H (Struct, Type15, LengthOfLogTypeDescriptor);
737
738 Count = Struct->Type15->NumberOfSupportedLogTypeDescriptors;
739 if (Count > 0) {
740 Ptr = Struct->Type15->EventLogTypeDescriptors;
741
742 //
743 // Display all Event Log type descriptors supported by system
744 //
745 for (Index = 0; Index < Count; Index++, Ptr++) {
746 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRTED_EVENT), gShellDebug1HiiHandle, Index + 1);
747 DisplaySELTypes (Ptr->LogType, Option);
748 DisplaySELVarDataFormatType (Ptr->DataFormatType, Option);
749 }
750
751 if (Option >= SHOW_DETAIL) {
752 switch (Struct->Type15->AccessMethod) {
753 case 03:
754 AccessMethodAddress = (UINT8 *)(UINTN)(Struct->Type15->AccessMethodAddress);
755 break;
756
757 case 00:
758 case 01:
759 case 02:
760 case 04:
761 default:
762 ShellPrintHiiEx (
763 -1,
764 -1,
765 NULL,
766 STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ACCESS_METHOD_NOT_SUPOPRTED),
767 gShellDebug1HiiHandle,
768 Struct->Type15->AccessMethod
769 );
770 return EFI_UNSUPPORTED;
771 }
772
773 //
774 // Display Event Log Header
775 //
776 // Starting offset (or index) within the nonvolatile storage
777 // of the event-log's header, from the Access Method Address
778 //
779 DisplaySysEventLogHeader (
780 Struct->Type15->LogHeaderFormat,
781 AccessMethodAddress + Struct->Type15->LogHeaderStartOffset
782 );
783
784 //
785 // Display all Event Log data
786 //
787 // Starting offset (or index) within the nonvolatile storage
788 // of the event-log's first data byte, from the Access Method Address(0x14)
789 //
790 DisplaySysEventLogData (
791 AccessMethodAddress + Struct->Type15->LogDataStartOffset,
792 (UINT16)
793 (
794 Struct->Type15->LogAreaLength -
795 (Struct->Type15->LogDataStartOffset - Struct->Type15->LogHeaderStartOffset)
796 )
797 );
798 }
799 }
800
801 break;
802 }
803
804 //
805 // Physical Memory Array (Type 16)
806 //
807 case 16:
808 DisplayPMALocation (Struct->Type16->Location, Option);
809 DisplayPMAUse (Struct->Type16->Use, Option);
810 DisplayPMAErrorCorrectionTypes (
811 Struct->Type16->MemoryErrorCorrection,
812 Option
813 );
814 PRINT_STRUCT_VALUE_H (Struct, Type16, MaximumCapacity);
815 PRINT_STRUCT_VALUE_H (Struct, Type16, MemoryErrorInformationHandle);
816 PRINT_STRUCT_VALUE_H (Struct, Type16, NumberOfMemoryDevices);
817 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0xF)) {
818 PRINT_STRUCT_VALUE_LH (Struct, Type16, ExtendedMaximumCapacity);
819 }
820
821 break;
822
823 //
824 // Memory Device (Type 17)
825 //
826 case 17:
827 PRINT_STRUCT_VALUE_H (Struct, Type17, MemoryArrayHandle);
828 PRINT_STRUCT_VALUE_H (Struct, Type17, MemoryErrorInformationHandle);
829 PRINT_STRUCT_VALUE_H (Struct, Type17, TotalWidth);
830 PRINT_STRUCT_VALUE_H (Struct, Type17, DataWidth);
831 PRINT_STRUCT_VALUE (Struct, Type17, Size);
832 DisplayMemoryDeviceFormFactor (Struct->Type17->FormFactor, Option);
833 PRINT_STRUCT_VALUE_H (Struct, Type17, DeviceSet);
834 PRINT_PENDING_STRING (Struct, Type17, DeviceLocator);
835 PRINT_PENDING_STRING (Struct, Type17, BankLocator);
836 DisplayMemoryDeviceType (Struct->Type17->MemoryType, Option);
837 DisplayMemoryDeviceTypeDetail (ReadUnaligned16 ((UINT16 *)(UINTN)&(Struct->Type17->TypeDetail)), Option);
838 PRINT_STRUCT_VALUE_H (Struct, Type17, Speed);
839 PRINT_PENDING_STRING (Struct, Type17, Manufacturer);
840 PRINT_PENDING_STRING (Struct, Type17, SerialNumber);
841 PRINT_PENDING_STRING (Struct, Type17, AssetTag);
842 PRINT_PENDING_STRING (Struct, Type17, PartNumber);
843 if (AE_SMBIOS_VERSION (0x2, 0x6) && (Struct->Hdr->Length > 0x1B)) {
844 PRINT_STRUCT_VALUE_H (Struct, Type17, Attributes);
845 }
846
847 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0x1C)) {
848 PRINT_STRUCT_VALUE (Struct, Type17, ExtendedSize);
849 PRINT_STRUCT_VALUE_H (Struct, Type17, ConfiguredMemoryClockSpeed);
850 }
851
852 if (AE_SMBIOS_VERSION (0x2, 0x8) && (Struct->Hdr->Length > 0x22)) {
853 PRINT_STRUCT_VALUE (Struct, Type17, MinimumVoltage);
854 PRINT_STRUCT_VALUE (Struct, Type17, MaximumVoltage);
855 PRINT_STRUCT_VALUE (Struct, Type17, ConfiguredVoltage);
856 }
857
858 if (AE_SMBIOS_VERSION (0x3, 0x2)) {
859 if (Struct->Hdr->Length > 0x28) {
860 DisplayMemoryDeviceMemoryTechnology (Struct->Type17->MemoryTechnology, Option);
861 DisplayMemoryDeviceMemoryOperatingModeCapability (Struct->Type17->MemoryOperatingModeCapability.Uint16, Option);
862 PRINT_PENDING_STRING (Struct, Type17, FirmwareVersion);
863 PRINT_STRUCT_VALUE_H (Struct, Type17, ModuleManufacturerID);
864 PRINT_STRUCT_VALUE_H (Struct, Type17, ModuleProductID);
865 PRINT_STRUCT_VALUE_H (Struct, Type17, MemorySubsystemControllerManufacturerID);
866 PRINT_STRUCT_VALUE_H (Struct, Type17, MemorySubsystemControllerProductID);
867 }
868
869 if (Struct->Hdr->Length > 0x34) {
870 PRINT_STRUCT_VALUE_LH (Struct, Type17, NonVolatileSize);
871 }
872
873 if (Struct->Hdr->Length > 0x3C) {
874 PRINT_STRUCT_VALUE_LH (Struct, Type17, VolatileSize);
875 }
876
877 if (Struct->Hdr->Length > 0x44) {
878 PRINT_STRUCT_VALUE_LH (Struct, Type17, CacheSize);
879 }
880
881 if (Struct->Hdr->Length > 0x4C) {
882 PRINT_STRUCT_VALUE_LH (Struct, Type17, LogicalSize);
883 }
884 }
885
886 if (AE_SMBIOS_VERSION (0x3, 0x3) && (Struct->Hdr->Length > 0x54)) {
887 PRINT_STRUCT_VALUE_H (Struct, Type17, ExtendedSpeed);
888 PRINT_STRUCT_VALUE_H (Struct, Type17, ExtendedConfiguredMemorySpeed);
889 }
890
891 break;
892
893 //
894 // 32-bit Memory Error Information (Type 18)
895 //
896 case 18:
897 DisplayMemoryErrorType (Struct->Type18->ErrorType, Option);
898 DisplayMemoryErrorGranularity (
899 Struct->Type18->ErrorGranularity,
900 Option
901 );
902 DisplayMemoryErrorOperation (Struct->Type18->ErrorOperation, Option);
903 PRINT_STRUCT_VALUE_H (Struct, Type18, VendorSyndrome);
904 PRINT_STRUCT_VALUE_H (Struct, Type18, MemoryArrayErrorAddress);
905 PRINT_STRUCT_VALUE_H (Struct, Type18, DeviceErrorAddress);
906 PRINT_STRUCT_VALUE_H (Struct, Type18, ErrorResolution);
907 break;
908
909 //
910 // Memory Array Mapped Address (Type 19)
911 //
912 case 19:
913 PRINT_STRUCT_VALUE_H (Struct, Type19, StartingAddress);
914 PRINT_STRUCT_VALUE_H (Struct, Type19, EndingAddress);
915 PRINT_STRUCT_VALUE_H (Struct, Type19, MemoryArrayHandle);
916 PRINT_STRUCT_VALUE_H (Struct, Type19, PartitionWidth);
917 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0xF)) {
918 PRINT_STRUCT_VALUE_LH (Struct, Type19, ExtendedStartingAddress);
919 PRINT_STRUCT_VALUE_LH (Struct, Type19, ExtendedEndingAddress);
920 }
921
922 break;
923
924 //
925 // Memory Device Mapped Address (Type 20)
926 //
927 case 20:
928 PRINT_STRUCT_VALUE_H (Struct, Type20, StartingAddress);
929 PRINT_STRUCT_VALUE_H (Struct, Type20, EndingAddress);
930 PRINT_STRUCT_VALUE_H (Struct, Type20, MemoryDeviceHandle);
931 PRINT_STRUCT_VALUE_H (Struct, Type20, MemoryArrayMappedAddressHandle);
932 PRINT_STRUCT_VALUE_H (Struct, Type20, PartitionRowPosition);
933 PRINT_STRUCT_VALUE_H (Struct, Type20, InterleavePosition);
934 PRINT_STRUCT_VALUE_H (Struct, Type20, InterleavedDataDepth);
935 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0x13)) {
936 PRINT_STRUCT_VALUE_LH (Struct, Type19, ExtendedStartingAddress);
937 PRINT_STRUCT_VALUE_LH (Struct, Type19, ExtendedEndingAddress);
938 }
939
940 break;
941
942 //
943 // Built-in Pointing Device (Type 21)
944 //
945 case 21:
946 DisplayPointingDeviceType (Struct->Type21->Type, Option);
947 DisplayPointingDeviceInterface (Struct->Type21->Interface, Option);
948 PRINT_STRUCT_VALUE (Struct, Type21, NumberOfButtons);
949 break;
950
951 //
952 // Portable Battery (Type 22)
953 //
954 case 22:
955 PRINT_PENDING_STRING (Struct, Type22, Location);
956 PRINT_PENDING_STRING (Struct, Type22, Manufacturer);
957 PRINT_PENDING_STRING (Struct, Type22, ManufactureDate);
958 PRINT_PENDING_STRING (Struct, Type22, SerialNumber);
959 PRINT_PENDING_STRING (Struct, Type22, DeviceName);
960 DisplayPBDeviceChemistry (
961 Struct->Type22->DeviceChemistry,
962 Option
963 );
964 PRINT_STRUCT_VALUE_H (Struct, Type22, DeviceCapacity);
965 PRINT_STRUCT_VALUE_H (Struct, Type22, DesignVoltage);
966 PRINT_PENDING_STRING (Struct, Type22, SBDSVersionNumber);
967 PRINT_STRUCT_VALUE_H (Struct, Type22, MaximumErrorInBatteryData);
968 PRINT_STRUCT_VALUE_H (Struct, Type22, SBDSSerialNumber);
969 DisplaySBDSManufactureDate (
970 Struct->Type22->SBDSManufactureDate,
971 Option
972 );
973 PRINT_PENDING_STRING (Struct, Type22, SBDSDeviceChemistry);
974 PRINT_STRUCT_VALUE_H (Struct, Type22, DesignCapacityMultiplier);
975 PRINT_STRUCT_VALUE_H (Struct, Type22, OEMSpecific);
976 break;
977
978 //
979 // System Reset (Type 23)
980 //
981 case 23:
982 DisplaySystemResetCapabilities (
983 Struct->Type23->Capabilities,
984 Option
985 );
986 PRINT_STRUCT_VALUE_H (Struct, Type23, ResetCount);
987 PRINT_STRUCT_VALUE_H (Struct, Type23, ResetLimit);
988 PRINT_STRUCT_VALUE_H (Struct, Type23, TimerInterval);
989 PRINT_STRUCT_VALUE_H (Struct, Type23, Timeout);
990 break;
991
992 //
993 // Hardware Security (Type 24)
994 //
995 case 24:
996 DisplayHardwareSecuritySettings (
997 Struct->Type24->HardwareSecuritySettings,
998 Option
999 );
1000 break;
1001
1002 //
1003 // System Power Controls (Type 25)
1004 //
1005 case 25:
1006 PRINT_STRUCT_VALUE_H (Struct, Type25, NextScheduledPowerOnMonth);
1007 PRINT_STRUCT_VALUE_H (Struct, Type25, NextScheduledPowerOnDayOfMonth);
1008 PRINT_STRUCT_VALUE_H (Struct, Type25, NextScheduledPowerOnHour);
1009 PRINT_STRUCT_VALUE_H (Struct, Type25, NextScheduledPowerOnMinute);
1010 PRINT_STRUCT_VALUE_H (Struct, Type25, NextScheduledPowerOnSecond);
1011 break;
1012
1013 //
1014 // Voltage Probe (Type 26)
1015 //
1016 case 26:
1017 PRINT_PENDING_STRING (Struct, Type26, Description);
1018 DisplayVPLocation (*(UINT8 *)&(Struct->Type26->LocationAndStatus), Option);
1019 DisplayVPStatus (*(UINT8 *)&(Struct->Type26->LocationAndStatus), Option);
1020 PRINT_STRUCT_VALUE_H (Struct, Type26, MaximumValue);
1021 PRINT_STRUCT_VALUE_H (Struct, Type26, MinimumValue);
1022 PRINT_STRUCT_VALUE_H (Struct, Type26, Resolution);
1023 PRINT_STRUCT_VALUE_H (Struct, Type26, Tolerance);
1024 PRINT_STRUCT_VALUE_H (Struct, Type26, Accuracy);
1025 PRINT_STRUCT_VALUE_H (Struct, Type26, OEMDefined);
1026 PRINT_STRUCT_VALUE_H (Struct, Type26, NominalValue);
1027 break;
1028
1029 //
1030 // Cooling Device (Type 27)
1031 //
1032 case 27:
1033 PRINT_STRUCT_VALUE_H (Struct, Type27, TemperatureProbeHandle);
1034 DisplayCoolingDeviceStatus (*(UINT8 *)&(Struct->Type27->DeviceTypeAndStatus), Option);
1035 DisplayCoolingDeviceType (*(UINT8 *)&(Struct->Type27->DeviceTypeAndStatus), Option);
1036 PRINT_STRUCT_VALUE_H (Struct, Type27, CoolingUnitGroup);
1037 PRINT_STRUCT_VALUE_H (Struct, Type27, OEMDefined);
1038 PRINT_STRUCT_VALUE_H (Struct, Type27, NominalSpeed);
1039 if (AE_SMBIOS_VERSION (0x2, 0x7) && (Struct->Hdr->Length > 0xE)) {
1040 PRINT_PENDING_STRING (Struct, Type27, Description);
1041 }
1042
1043 break;
1044
1045 //
1046 // Temperature Probe (Type 28)
1047 //
1048 case 28:
1049 PRINT_PENDING_STRING (Struct, Type28, Description);
1050 DisplayTemperatureProbeStatus (*(UINT8 *)&(Struct->Type28->LocationAndStatus), Option);
1051 DisplayTemperatureProbeLoc (*(UINT8 *)&(Struct->Type28->LocationAndStatus), Option);
1052 PRINT_STRUCT_VALUE_H (Struct, Type28, MaximumValue);
1053 PRINT_STRUCT_VALUE_H (Struct, Type28, MinimumValue);
1054 PRINT_STRUCT_VALUE_H (Struct, Type28, Resolution);
1055 PRINT_STRUCT_VALUE_H (Struct, Type28, Tolerance);
1056 PRINT_STRUCT_VALUE_H (Struct, Type28, Accuracy);
1057 PRINT_STRUCT_VALUE_H (Struct, Type28, OEMDefined);
1058 PRINT_STRUCT_VALUE_H (Struct, Type28, NominalValue);
1059 break;
1060
1061 //
1062 // Electrical Current Probe (Type 29)
1063 //
1064 case 29:
1065 PRINT_PENDING_STRING (Struct, Type29, Description);
1066 DisplayECPStatus (*(UINT8 *)&(Struct->Type29->LocationAndStatus), Option);
1067 DisplayECPLoc (*(UINT8 *)&(Struct->Type29->LocationAndStatus), Option);
1068 PRINT_STRUCT_VALUE_H (Struct, Type29, MaximumValue);
1069 PRINT_STRUCT_VALUE_H (Struct, Type29, MinimumValue);
1070 PRINT_STRUCT_VALUE_H (Struct, Type29, Resolution);
1071 PRINT_STRUCT_VALUE_H (Struct, Type29, Tolerance);
1072 PRINT_STRUCT_VALUE_H (Struct, Type29, Accuracy);
1073 PRINT_STRUCT_VALUE_H (Struct, Type29, OEMDefined);
1074 PRINT_STRUCT_VALUE_H (Struct, Type29, NominalValue);
1075 break;
1076
1077 //
1078 // Out-of-Band Remote Access (Type 30)
1079 //
1080 case 30:
1081 PRINT_PENDING_STRING (Struct, Type30, ManufacturerName);
1082 DisplayOBRAConnections (Struct->Type30->Connections, Option);
1083 break;
1084
1085 //
1086 // Boot Integrity Services (BIS) Entry Point (Type 31)
1087 //
1088 case 31:
1089 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE31), gShellDebug1HiiHandle);
1090 break;
1091
1092 //
1093 // System Boot Information (Type 32)
1094 //
1095 case 32:
1096 PRINT_BIT_FIELD (Struct, Type32, Reserved, 6);
1097 DisplaySystemBootStatus (Struct->Type32->BootStatus, Option);
1098 break;
1099
1100 //
1101 // 64-Bit Memory Error Information (Type 33)
1102 //
1103 case 33:
1104 DisplayMemoryErrorType (Struct->Type33->ErrorType, Option);
1105 DisplayMemoryErrorGranularity (
1106 Struct->Type33->ErrorGranularity,
1107 Option
1108 );
1109 DisplayMemoryErrorOperation (Struct->Type33->ErrorOperation, Option);
1110 PRINT_STRUCT_VALUE_H (Struct, Type33, VendorSyndrome);
1111 PRINT_STRUCT_VALUE_LH (Struct, Type33, MemoryArrayErrorAddress);
1112 PRINT_STRUCT_VALUE_LH (Struct, Type33, DeviceErrorAddress);
1113 PRINT_STRUCT_VALUE_H (Struct, Type33, ErrorResolution);
1114 break;
1115
1116 //
1117 // Management Device (Type 34)
1118 //
1119 case 34:
1120 PRINT_PENDING_STRING (Struct, Type34, Description);
1121 DisplayMDType (Struct->Type34->Type, Option);
1122 PRINT_STRUCT_VALUE_H (Struct, Type34, Address);
1123 DisplayMDAddressType (Struct->Type34->AddressType, Option);
1124 break;
1125
1126 //
1127 // Management Device Component (Type 35)
1128 //
1129 case 35:
1130 PRINT_PENDING_STRING (Struct, Type35, Description);
1131 PRINT_STRUCT_VALUE_H (Struct, Type35, ManagementDeviceHandle);
1132 PRINT_STRUCT_VALUE_H (Struct, Type35, ComponentHandle);
1133 PRINT_STRUCT_VALUE_H (Struct, Type35, ThresholdHandle);
1134 break;
1135
1136 //
1137 // Management Device Threshold Data (Type 36)
1138 //
1139 case 36:
1140 PRINT_STRUCT_VALUE_H (Struct, Type36, LowerThresholdNonCritical);
1141 PRINT_STRUCT_VALUE_H (Struct, Type36, UpperThresholdNonCritical);
1142 PRINT_STRUCT_VALUE_H (Struct, Type36, LowerThresholdCritical);
1143 PRINT_STRUCT_VALUE_H (Struct, Type36, UpperThresholdCritical);
1144 PRINT_STRUCT_VALUE_H (Struct, Type36, LowerThresholdNonRecoverable);
1145 PRINT_STRUCT_VALUE_H (Struct, Type36, UpperThresholdNonRecoverable);
1146 break;
1147
1148 //
1149 // Memory Channel (Type 37)
1150 //
1151 case 37:
1152 {
1153 UINT8 Count;
1154 MEMORY_DEVICE *Ptr;
1155 DisplayMemoryChannelType (Struct->Type37->ChannelType, Option);
1156 PRINT_STRUCT_VALUE_H (Struct, Type37, MaximumChannelLoad);
1157 PRINT_STRUCT_VALUE_H (Struct, Type37, MemoryDeviceCount);
1158
1159 Count = Struct->Type37->MemoryDeviceCount;
1160 Ptr = Struct->Type37->MemoryDevice;
1161 for (Index = 0; Index < Count; Index++) {
1162 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_DEVICE), gShellDebug1HiiHandle, Index + 1);
1163 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_LOAD), gShellDebug1HiiHandle, Ptr[Index].DeviceLoad);
1164 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_HANDLE), gShellDebug1HiiHandle, Ptr[Index].DeviceHandle);
1165 }
1166
1167 break;
1168 }
1169
1170 //
1171 // IPMI Device Information (Type 38)
1172 //
1173 case 38:
1174 DisplayIPMIDIBMCInterfaceType (Struct->Type38->InterfaceType, Option);
1175 PRINT_STRUCT_VALUE_H (Struct, Type38, IPMISpecificationRevision);
1176 PRINT_STRUCT_VALUE_H (Struct, Type38, I2CSlaveAddress);
1177 PRINT_STRUCT_VALUE_H (Struct, Type38, NVStorageDeviceAddress);
1178 PRINT_STRUCT_VALUE_LH (Struct, Type38, BaseAddress);
1179 break;
1180
1181 //
1182 // System Power Supply (Type 39)
1183 //
1184 case 39:
1185 PRINT_STRUCT_VALUE_H (Struct, Type39, PowerUnitGroup);
1186 PRINT_PENDING_STRING (Struct, Type39, Location);
1187 PRINT_PENDING_STRING (Struct, Type39, DeviceName);
1188 PRINT_PENDING_STRING (Struct, Type39, Manufacturer);
1189 PRINT_PENDING_STRING (Struct, Type39, SerialNumber);
1190 PRINT_PENDING_STRING (Struct, Type39, AssetTagNumber);
1191 PRINT_PENDING_STRING (Struct, Type39, ModelPartNumber);
1192 PRINT_PENDING_STRING (Struct, Type39, RevisionLevel);
1193 PRINT_STRUCT_VALUE_H (Struct, Type39, MaxPowerCapacity);
1194 DisplaySPSCharacteristics (
1195 *(UINT16 *)&(Struct->Type39->PowerSupplyCharacteristics),
1196 Option
1197 );
1198 PRINT_STRUCT_VALUE_H (Struct, Type39, InputVoltageProbeHandle);
1199 PRINT_STRUCT_VALUE_H (Struct, Type39, CoolingDeviceHandle);
1200 PRINT_STRUCT_VALUE_H (Struct, Type39, InputCurrentProbeHandle);
1201 break;
1202
1203 //
1204 // Additional Information (Type 40)
1205 //
1206 case 40:
1207 {
1208 UINT8 NumberOfEntries;
1209 UINT8 EntryLength;
1210 ADDITIONAL_INFORMATION_ENTRY *Entries;
1211
1212 EntryLength = 0;
1213 Entries = Struct->Type40->AdditionalInfoEntries;
1214 NumberOfEntries = Struct->Type40->NumberOfAdditionalInformationEntries;
1215
1216 PRINT_STRUCT_VALUE_H (Struct, Type40, NumberOfAdditionalInformationEntries);
1217
1218 for (Index = 0; Index < NumberOfEntries; Index++) {
1219 EntryLength = Entries->EntryLength;
1220 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTRYLEN), gShellDebug1HiiHandle, EntryLength);
1221 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDHANDLE), gShellDebug1HiiHandle, Entries->ReferencedHandle);
1222 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDOFFSET), gShellDebug1HiiHandle, Entries->ReferencedOffset);
1223 PRINT_SMBIOS_STRING (Struct, Entries->EntryString, String);
1224 PRINT_SMBIOS_BIT_FIELD (Struct, Entries->Value, Value, EntryLength - 5);
1225 Entries = (ADDITIONAL_INFORMATION_ENTRY *)((UINT8 *)Entries + EntryLength);
1226 }
1227
1228 break;
1229 }
1230
1231 //
1232 // Onboard Devices Extended Information (Type 41)
1233 //
1234 case 41:
1235 PRINT_PENDING_STRING (Struct, Type41, ReferenceDesignation);
1236 ShellPrintEx (-1, -1, (((Struct->Type41->DeviceType) & 0x80) != 0) ? L"Device Enabled\n" : L"Device Disabled\n");
1237 DisplayOnboardDeviceTypes ((Struct->Type41->DeviceType) & 0x7F, Option);
1238 PRINT_STRUCT_VALUE_H (Struct, Type41, DeviceTypeInstance);
1239 PRINT_STRUCT_VALUE_H (Struct, Type41, SegmentGroupNum);
1240 PRINT_STRUCT_VALUE_H (Struct, Type41, BusNum);
1241 PRINT_STRUCT_VALUE_H (Struct, Type41, DevFuncNum);
1242 break;
1243
1244 //
1245 // Management Controller Host Interface (Type 42)
1246 //
1247 case 42:
1248 DisplayMCHostInterfaceType (Struct->Type42->InterfaceType, Option);
1249 if (AE_SMBIOS_VERSION (0x3, 0x2)) {
1250 PRINT_STRUCT_VALUE_H (Struct, Type42, InterfaceTypeSpecificDataLength);
1251 PRINT_BIT_FIELD (Struct, Type42, InterfaceTypeSpecificData, Struct->Type42->InterfaceTypeSpecificDataLength);
1252 }
1253
1254 break;
1255
1256 //
1257 // TPM Device (Type 43)
1258 //
1259 case 43:
1260 PRINT_BIT_FIELD (Struct, Type43, VendorID, 4);
1261 PRINT_STRUCT_VALUE_H (Struct, Type43, MajorSpecVersion);
1262 PRINT_STRUCT_VALUE_H (Struct, Type43, MinorSpecVersion);
1263 PRINT_STRUCT_VALUE_H (Struct, Type43, FirmwareVersion1);
1264 PRINT_STRUCT_VALUE_H (Struct, Type43, FirmwareVersion2);
1265 PRINT_PENDING_STRING (Struct, Type43, Description);
1266 DisplayTpmDeviceCharacteristics (ReadUnaligned64 ((UINT64 *)(UINTN)&(Struct->Type43->Characteristics)), Option);
1267 PRINT_STRUCT_VALUE_H (Struct, Type43, OemDefined);
1268 break;
1269
1270 //
1271 // Processor Additional Information (Type 44)
1272 //
1273 case 44:
1274 DisplayProcessorArchitectureType (Struct->Type44->ProcessorSpecificBlock.ProcessorArchType, Option);
1275 break;
1276
1277 //
1278 // Inactive (Type 126)
1279 //
1280 case 126:
1281 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INACTIVE_STRUCT), gShellDebug1HiiHandle);
1282 break;
1283
1284 //
1285 // End-of-Table (Type 127)
1286 //
1287 case 127:
1288 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THIS_STRUCT_END_TABLE), gShellDebug1HiiHandle);
1289 break;
1290
1291 default:
1292 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE_UNDEFINED), gShellDebug1HiiHandle);
1293 break;
1294 }
1295
1296 return EFI_SUCCESS;
1297 }
1298
1299 /**
1300 Display BIOS Information (Type 0) information.
1301
1302 @param[in] Chara The information bits.
1303 @param[in] Option The optional information.
1304 **/
1305 VOID
1306 DisplayBiosCharacteristics (
1307 IN UINT64 Chara,
1308 IN UINT8 Option
1309 )
1310 {
1311 //
1312 // Print header
1313 //
1314 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR), gShellDebug1HiiHandle);
1315 //
1316 // print option
1317 //
1318 PRINT_INFO_OPTION (Chara, Option);
1319
1320 //
1321 // Check all the bits and print information
1322 // This function does not use Table because table of bits
1323 // are designed not to deal with UINT64
1324 //
1325 if (BIT (Chara, 0) != 0) {
1326 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gShellDebug1HiiHandle);
1327 }
1328
1329 if (BIT (Chara, 1) != 0) {
1330 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gShellDebug1HiiHandle);
1331 }
1332
1333 if (BIT (Chara, 2) != 0) {
1334 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN_BIT), gShellDebug1HiiHandle);
1335 }
1336
1337 if (BIT (Chara, 3) != 0) {
1338 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_NOT_SUPPORTED), gShellDebug1HiiHandle);
1339 }
1340
1341 if (BIT (Chara, 4) != 0) {
1342 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ISA_SUPPORTED), gShellDebug1HiiHandle);
1343 }
1344
1345 if (BIT (Chara, 5) != 0) {
1346 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MSA_SUPPORTED), gShellDebug1HiiHandle);
1347 }
1348
1349 if (BIT (Chara, 6) != 0) {
1350 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EISA_SUPPORTED), gShellDebug1HiiHandle);
1351 }
1352
1353 if (BIT (Chara, 7) != 0) {
1354 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PCI_SUPPORTED), gShellDebug1HiiHandle);
1355 }
1356
1357 if (BIT (Chara, 8) != 0) {
1358 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PC_CARD_SUPPORTED), gShellDebug1HiiHandle);
1359 }
1360
1361 if (BIT (Chara, 9) != 0) {
1362 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PLUG_PLAY_SUPPORTED), gShellDebug1HiiHandle);
1363 }
1364
1365 if (BIT (Chara, 10) != 0) {
1366 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_APM_SUPPORTED), gShellDebug1HiiHandle);
1367 }
1368
1369 if (BIT (Chara, 11) != 0) {
1370 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_UPGRADEABLE), gShellDebug1HiiHandle);
1371 }
1372
1373 if (BIT (Chara, 12) != 0) {
1374 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SHADOWING), gShellDebug1HiiHandle);
1375 }
1376
1377 if (BIT (Chara, 13) != 0) {
1378 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VESA_SUPPORTED), gShellDebug1HiiHandle);
1379 }
1380
1381 if (BIT (Chara, 14) != 0) {
1382 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ECSD_SUPPORT), gShellDebug1HiiHandle);
1383 }
1384
1385 if (BIT (Chara, 15) != 0) {
1386 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FROM_CD_SUPPORTED), gShellDebug1HiiHandle);
1387 }
1388
1389 if (BIT (Chara, 16) != 0) {
1390 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SELECTED_BOOT_SUPPORTED), gShellDebug1HiiHandle);
1391 }
1392
1393 if (BIT (Chara, 17) != 0) {
1394 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_ROM_SOCKETED), gShellDebug1HiiHandle);
1395 }
1396
1397 if (BIT (Chara, 18) != 0) {
1398 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FROM_PC_CARD), gShellDebug1HiiHandle);
1399 }
1400
1401 if (BIT (Chara, 19) != 0) {
1402 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EDD_ENHANCED_DRIVER), gShellDebug1HiiHandle);
1403 }
1404
1405 if (BIT (Chara, 20) != 0) {
1406 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_NEC), gShellDebug1HiiHandle);
1407 }
1408
1409 if (BIT (Chara, 21) != 0) {
1410 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_TOSHIBA), gShellDebug1HiiHandle);
1411 }
1412
1413 if (BIT (Chara, 22) != 0) {
1414 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FLOPPY_SERVICES_SUPPORTED), gShellDebug1HiiHandle);
1415 }
1416
1417 if (BIT (Chara, 23) != 0) {
1418 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_POINT_TWO_MB), gShellDebug1HiiHandle);
1419 }
1420
1421 if (BIT (Chara, 24) != 0) {
1422 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_720_KB), gShellDebug1HiiHandle);
1423 }
1424
1425 if (BIT (Chara, 25) != 0) {
1426 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TWO_POINT_EIGHT_EIGHT_MB), gShellDebug1HiiHandle);
1427 }
1428
1429 if (BIT (Chara, 26) != 0) {
1430 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINT_SCREEN_SUPPORT), gShellDebug1HiiHandle);
1431 }
1432
1433 if (BIT (Chara, 27) != 0) {
1434 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_SERV_SUPPORT), gShellDebug1HiiHandle);
1435 }
1436
1437 if (BIT (Chara, 28) != 0) {
1438 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SERIAL_SERVICES_SUPPORT), gShellDebug1HiiHandle);
1439 }
1440
1441 if (BIT (Chara, 29) != 0) {
1442 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINTER_SERVICES_SUPPORT), gShellDebug1HiiHandle);
1443 }
1444
1445 if (BIT (Chara, 30) != 0) {
1446 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONO_VIDEO_SUPPORT), gShellDebug1HiiHandle);
1447 }
1448
1449 if (BIT (Chara, 31) != 0) {
1450 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NEC_PC_98), gShellDebug1HiiHandle);
1451 }
1452
1453 //
1454 // Just print the Reserved
1455 //
1456 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_32_47), gShellDebug1HiiHandle);
1457 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_48_64), gShellDebug1HiiHandle);
1458 }
1459
1460 /**
1461 Display Bios Characteristice extensions1 information.
1462
1463 @param[in] Byte1 The information.
1464 @param[in] Option The optional information.
1465 **/
1466 VOID
1467 DisplayBiosCharacteristicsExt1 (
1468 IN UINT8 Byte1,
1469 IN UINT8 Option
1470 )
1471 {
1472 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION), gShellDebug1HiiHandle);
1473 //
1474 // Print option
1475 //
1476 PRINT_INFO_OPTION (Byte1, Option);
1477
1478 //
1479 // check bit and print
1480 //
1481 if (BIT (Byte1, 0) != 0) {
1482 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ACPI_SUPPORTED), gShellDebug1HiiHandle);
1483 }
1484
1485 if (BIT (Byte1, 1) != 0) {
1486 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USB_LEGACY_SUPPORTED), gShellDebug1HiiHandle);
1487 }
1488
1489 if (BIT (Byte1, 2) != 0) {
1490 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AGP_SUPPORTED), gShellDebug1HiiHandle);
1491 }
1492
1493 if (BIT (Byte1, 3) != 0) {
1494 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_I2O_BOOT_SUPPORTED), gShellDebug1HiiHandle);
1495 }
1496
1497 if (BIT (Byte1, 4) != 0) {
1498 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LS_120_BOOT_SUPPORTED), gShellDebug1HiiHandle);
1499 }
1500
1501 if (BIT (Byte1, 5) != 0) {
1502 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ATAPI_ZIP_DRIVE), gShellDebug1HiiHandle);
1503 }
1504
1505 if (BIT (Byte1, 6) != 0) {
1506 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_1394_BOOT_SUPPORTED), gShellDebug1HiiHandle);
1507 }
1508
1509 if (BIT (Byte1, 7) != 0) {
1510 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMART_BATTERY_SUPPORTED), gShellDebug1HiiHandle);
1511 }
1512 }
1513
1514 /**
1515 Display Bios Characteristice extensions2 information.
1516
1517 @param[in] byte2 The information.
1518 @param[in] Option The optional information.
1519 **/
1520 VOID
1521 DisplayBiosCharacteristicsExt2 (
1522 IN UINT8 byte2,
1523 IN UINT8 Option
1524 )
1525 {
1526 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION_2), gShellDebug1HiiHandle);
1527 //
1528 // Print option
1529 //
1530 PRINT_INFO_OPTION (byte2, Option);
1531
1532 if (BIT (byte2, 0) != 0) {
1533 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_BOOT_SPEC_SUPP), gShellDebug1HiiHandle);
1534 }
1535
1536 if (BIT (byte2, 1) != 0) {
1537 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FUNCTION_KEY_INIT), gShellDebug1HiiHandle);
1538 }
1539
1540 if (AE_SMBIOS_VERSION (0x2, 0x4)) {
1541 if (BIT (byte2, 2) != 0) {
1542 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLE_TAR_CONT_DIST), gShellDebug1HiiHandle);
1543 }
1544
1545 if (AE_SMBIOS_VERSION (0x2, 0x7)) {
1546 if (BIT (byte2, 3) != 0) {
1547 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UEFI_SPEC_SUPPORT), gShellDebug1HiiHandle);
1548 }
1549
1550 if (BIT (byte2, 4) != 0) {
1551 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VIRTUAL_MACHINE), gShellDebug1HiiHandle);
1552 }
1553
1554 if (BIT (byte2, 5) != 0) {
1555 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MCFG_SUPPORTED), gShellDebug1HiiHandle);
1556 }
1557
1558 if (BIT (byte2, 6) != 0) {
1559 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MCFG_ENABLED), gShellDebug1HiiHandle);
1560 }
1561
1562 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RSVD_FOR_FUTURE), gShellDebug1HiiHandle, 5);
1563 } else {
1564 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RSVD_FOR_FUTURE), gShellDebug1HiiHandle, 3);
1565 }
1566 } else {
1567 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RSVD_FOR_FUTURE), gShellDebug1HiiHandle, 2);
1568 }
1569 }
1570
1571 /**
1572 Display Processor Information (Type 4) information.
1573
1574 @param[in] Family The family value.
1575 @param[in] Option The option value.
1576 **/
1577 VOID
1578 DisplayProcessorFamily (
1579 UINT8 Family,
1580 UINT8 Option
1581 )
1582 {
1583 //
1584 // Print prompt message
1585 //
1586 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), gShellDebug1HiiHandle);
1587 //
1588 // Print option
1589 //
1590 PRINT_INFO_OPTION (Family, Option);
1591
1592 //
1593 // Use switch to check
1594 //
1595 switch (Family) {
1596 case 0x01:
1597 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER), gShellDebug1HiiHandle);
1598 break;
1599
1600 case 0x02:
1601 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
1602 break;
1603
1604 case 0x03:
1605 Print (L"8086\n");
1606 break;
1607
1608 case 0x04:
1609 Print (L"80286\n");
1610 break;
1611
1612 case 0x05:
1613 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL386_PROCESSOR), gShellDebug1HiiHandle);
1614 break;
1615
1616 case 0x06:
1617 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL486_PROCESSOR), gShellDebug1HiiHandle);
1618 break;
1619
1620 case 0x07:
1621 Print (L"8087\n");
1622 break;
1623
1624 case 0x08:
1625 Print (L"80287\n");
1626 break;
1627
1628 case 0x09:
1629 Print (L"80387\n");
1630 break;
1631
1632 case 0x0A:
1633 Print (L"80487\n");
1634 break;
1635
1636 case 0x0B:
1637 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_FAMILY), gShellDebug1HiiHandle);
1638 break;
1639
1640 case 0x0C:
1641 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PRO_PROC), gShellDebug1HiiHandle);
1642 break;
1643
1644 case 0x0D:
1645 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_II_PROC), gShellDebug1HiiHandle);
1646 break;
1647
1648 case 0x0E:
1649 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_MMX), gShellDebug1HiiHandle);
1650 break;
1651
1652 case 0x0F:
1653 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CELERON_PROC), gShellDebug1HiiHandle);
1654 break;
1655
1656 case 0x10:
1657 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_XEON_PROC), gShellDebug1HiiHandle);
1658 break;
1659
1660 case 0x11:
1661 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_PROC), gShellDebug1HiiHandle);
1662 break;
1663
1664 case 0x12:
1665 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_M1_FAMILY), gShellDebug1HiiHandle);
1666 break;
1667
1668 case 0x13:
1669 Print (L"M2 Family\n");
1670 break;
1671
1672 case 0x14:
1673 Print (L"Intel Celeron M\n");
1674 break;
1675
1676 case 0x15:
1677 Print (L"Intel Pentium 4 HT\n");
1678 break;
1679
1680 case 0x18:
1681 Print (L"AMD Duron\n");
1682 break;
1683
1684 case 0x19:
1685 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_K5_FAMILY), gShellDebug1HiiHandle);
1686 break;
1687
1688 case 0x1A:
1689 Print (L"K6 Family\n");
1690 break;
1691
1692 case 0x1B:
1693 Print (L"K6-2\n");
1694 break;
1695
1696 case 0x1C:
1697 Print (L"K6-3\n");
1698 break;
1699
1700 case 0x1D:
1701 Print (L"AMD Althon Processor Family\n");
1702 break;
1703
1704 case 0x1E:
1705 Print (L"AMD 29000 Family\n");
1706 break;
1707
1708 case 0x1F:
1709 Print (L"K6-2+\n");
1710 break;
1711
1712 case 0x20:
1713 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_FAMILY), gShellDebug1HiiHandle);
1714 break;
1715
1716 case 0x21:
1717 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_601), gShellDebug1HiiHandle);
1718 break;
1719
1720 case 0x22:
1721 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603), gShellDebug1HiiHandle);
1722 break;
1723
1724 case 0x23:
1725 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603_PLUS), gShellDebug1HiiHandle);
1726 break;
1727
1728 case 0x24:
1729 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_604), gShellDebug1HiiHandle);
1730 break;
1731
1732 case 0x25:
1733 Print (L"Power PC 620\n");
1734 break;
1735
1736 case 0x26:
1737 Print (L"Power PC 704\n");
1738 break;
1739
1740 case 0x27:
1741 Print (L"Power PC 750\n");
1742 break;
1743
1744 case 0x28:
1745 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE_DUO), gShellDebug1HiiHandle);
1746 break;
1747
1748 case 0x29:
1749 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE_DUO_MOBILE), gShellDebug1HiiHandle);
1750 break;
1751
1752 case 0x2A:
1753 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE_SOLO_MOBILE), gShellDebug1HiiHandle);
1754 break;
1755
1756 case 0x2B:
1757 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_ATOM), gShellDebug1HiiHandle);
1758 break;
1759
1760 case 0x2C:
1761 Print (L"Intel(R) Core(TM) M processor\n");
1762 break;
1763
1764 case 0x2D:
1765 Print (L"Intel(R) Core(TM) m3 processor\n");
1766 break;
1767
1768 case 0x2E:
1769 Print (L"Intel(R) Core(TM) m5 processor\n");
1770 break;
1771
1772 case 0x2F:
1773 Print (L"Intel(R) Core(TM) m7 processor\n");
1774 break;
1775
1776 case 0x30:
1777 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ALPHA_FAMILY_2), gShellDebug1HiiHandle);
1778 break;
1779
1780 case 0x31:
1781 Print (L"Alpha 21064\n");
1782 break;
1783
1784 case 0x32:
1785 Print (L"Alpha 21066\n");
1786 break;
1787
1788 case 0x33:
1789 Print (L"Alpha 21164\n");
1790 break;
1791
1792 case 0x34:
1793 Print (L"Alpha 21164PC\n");
1794 break;
1795
1796 case 0x35:
1797 Print (L"Alpha 21164a\n");
1798 break;
1799
1800 case 0x36:
1801 Print (L"Alpha 21264\n");
1802 break;
1803
1804 case 0x37:
1805 Print (L"Alpha 21364\n");
1806 break;
1807
1808 case 0x38:
1809 Print (L"AMD Turion II Ultra Dual-Core Mobile M Processor Family\n");
1810 break;
1811
1812 case 0x39:
1813 Print (L"AMD Turion II Dual-Core Mobile M Processor Family\n");
1814 break;
1815
1816 case 0x3A:
1817 Print (L"AMD Althon II Dual-Core M Processor Family\n");
1818 break;
1819
1820 case 0x3B:
1821 Print (L"AMD Opteron 6100 Series Processor\n");
1822 break;
1823
1824 case 0x3C:
1825 Print (L"AMD Opteron 4100 Series Processor\n");
1826 break;
1827
1828 case 0x3D:
1829 Print (L"AMD Opteron 6200 Series Processor\n");
1830 break;
1831
1832 case 0x3E:
1833 Print (L"AMD Opteron 4200 Series Processor\n");
1834 break;
1835
1836 case 0x3F:
1837 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_FX_SERIES), gShellDebug1HiiHandle);
1838 break;
1839
1840 case 0x40:
1841 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MIPS_FAMILY), gShellDebug1HiiHandle);
1842 break;
1843
1844 case 0x41:
1845 Print (L"MIPS R4000\n");
1846 break;
1847
1848 case 0x42:
1849 Print (L"MIPS R4200\n");
1850 break;
1851
1852 case 0x43:
1853 Print (L"MIPS R4400\n");
1854 break;
1855
1856 case 0x44:
1857 Print (L"MIPS R4600\n");
1858 break;
1859
1860 case 0x45:
1861 Print (L"MIPS R10000\n");
1862 break;
1863
1864 case 0x46:
1865 Print (L"AMD C-Series Processor\n");
1866 break;
1867
1868 case 0x47:
1869 Print (L"AMD E-Series Processor\n");
1870 break;
1871
1872 case 0x48:
1873 Print (L"AMD A-Series Processor\n");
1874 break;
1875
1876 case 0x49:
1877 Print (L"AMD G-Series Processor\n");
1878 break;
1879
1880 case 0x4A:
1881 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_Z_SERIES), gShellDebug1HiiHandle);
1882 break;
1883
1884 case 0x4B:
1885 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_R_SERIES), gShellDebug1HiiHandle);
1886 break;
1887
1888 case 0x4C:
1889 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_4300_SERIES), gShellDebug1HiiHandle);
1890 break;
1891
1892 case 0x4D:
1893 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_6300_SERIES), gShellDebug1HiiHandle);
1894 break;
1895
1896 case 0x4E:
1897 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_3300_SERIES), gShellDebug1HiiHandle);
1898 break;
1899
1900 case 0x4F:
1901 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_FIREPRO_SERIES), gShellDebug1HiiHandle);
1902 break;
1903
1904 case 0x50:
1905 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SPARC_FAMILY), gShellDebug1HiiHandle);
1906 break;
1907
1908 case 0x51:
1909 Print (L"SuperSparc\n");
1910 break;
1911
1912 case 0x52:
1913 Print (L"microSparc II\n");
1914 break;
1915
1916 case 0x53:
1917 Print (L"microSparc IIep\n");
1918 break;
1919
1920 case 0x54:
1921 Print (L"UltraSparc\n");
1922 break;
1923
1924 case 0x55:
1925 Print (L"UltraSparc II\n");
1926 break;
1927
1928 case 0x56:
1929 Print (L"UltraSparcIIi\n");
1930 break;
1931
1932 case 0x57:
1933 Print (L"UltraSparcIII\n");
1934 break;
1935
1936 case 0x58:
1937 Print (L"UltraSparcIIIi\n");
1938 break;
1939
1940 case 0x60:
1941 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_68040_FAMILY), gShellDebug1HiiHandle);
1942 break;
1943
1944 case 0x61:
1945 Print (L"68xx\n");
1946 break;
1947
1948 case 0x62:
1949 Print (L"68000\n");
1950 break;
1951
1952 case 0x63:
1953 Print (L"68010\n");
1954 break;
1955
1956 case 0x64:
1957 Print (L"68020\n");
1958 break;
1959
1960 case 0x65:
1961 Print (L"68030\n");
1962 break;
1963
1964 case 0x66:
1965 Print (L"AMD Athlon(TM) X4 Quad-Core Processor Family\n");
1966 break;
1967
1968 case 0x67:
1969 Print (L"AMD Opteron(TM) X1000 Series Processor\n");
1970 break;
1971
1972 case 0x68:
1973 Print (L"AMD Opteron(TM) X2000 Series APU\n");
1974 break;
1975
1976 case 0x69:
1977 Print (L"AMD Opteron(TM) A-Series Processor\n");
1978 break;
1979
1980 case 0x6A:
1981 Print (L"AMD Opteron(TM) X3000 Series APU\n");
1982 break;
1983
1984 case 0x6B:
1985 Print (L"AMD Zen Processor Family\n");
1986 break;
1987
1988 case 0x70:
1989 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HOBBIT_FAMILY), gShellDebug1HiiHandle);
1990 break;
1991
1992 case 0x78:
1993 Print (L"Crusoe TM5000\n");
1994 break;
1995
1996 case 0x79:
1997 Print (L"Crusoe TM3000\n");
1998 break;
1999
2000 case 0x7A:
2001 Print (L"Efficeon TM8000\n");
2002 break;
2003
2004 case 0x80:
2005 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WEITEK), gShellDebug1HiiHandle);
2006 break;
2007
2008 case 0x82:
2009 Print (L"Itanium\n");
2010 break;
2011
2012 case 0x83:
2013 Print (L"AMD Athlon64\n");
2014 break;
2015
2016 case 0x84:
2017 Print (L"AMD Opteron\n");
2018 break;
2019
2020 case 0x85:
2021 Print (L"AMD Sempron\n");
2022 break;
2023
2024 case 0x86:
2025 Print (L"AMD Turion64 Mobile\n");
2026 break;
2027
2028 case 0x87:
2029 Print (L"Dual-Core AMD Opteron\n");
2030 break;
2031
2032 case 0x88:
2033 Print (L"AMD Athlon 64X2 DualCore\n");
2034 break;
2035
2036 case 0x89:
2037 Print (L"AMD Turion 64X2 Mobile\n");
2038 break;
2039
2040 case 0x8A:
2041 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_QUAD_CORE), gShellDebug1HiiHandle);
2042 break;
2043
2044 case 0x8B:
2045 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_THIRD_GENERATION), gShellDebug1HiiHandle);
2046 break;
2047
2048 case 0x8C:
2049 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_PHENOM_FX_QUAD_CORE), gShellDebug1HiiHandle);
2050 break;
2051
2052 case 0x8D:
2053 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_PHENOM_X4_QUAD_CORE), gShellDebug1HiiHandle);
2054 break;
2055
2056 case 0x8E:
2057 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_PHENOM_X2_DUAL_CORE), gShellDebug1HiiHandle);
2058 break;
2059
2060 case 0x8F:
2061 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_ATHLON_X2_DUAL_CORE), gShellDebug1HiiHandle);
2062 break;
2063
2064 case 0x90:
2065 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PA_RISC_FAMILY), gShellDebug1HiiHandle);
2066 break;
2067
2068 case 0x91:
2069 Print (L"PA-RISC 8500\n");
2070 break;
2071
2072 case 0x92:
2073 Print (L"PA-RISC 8000\n");
2074 break;
2075
2076 case 0x93:
2077 Print (L"PA-RISC 7300LC\n");
2078 break;
2079
2080 case 0x94:
2081 Print (L"PA-RISC 7200\n");
2082 break;
2083
2084 case 0x95:
2085 Print (L"PA-RISC 7100LC\n");
2086 break;
2087
2088 case 0x96:
2089 Print (L"PA-RISC 7100\n");
2090 break;
2091
2092 case 0xA0:
2093 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_V30_FAMILY), gShellDebug1HiiHandle);
2094 break;
2095
2096 case 0xA1:
2097 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_3200_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2098 break;
2099
2100 case 0xA2:
2101 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_3000_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2102 break;
2103
2104 case 0xA3:
2105 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5300_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2106 break;
2107
2108 case 0xA4:
2109 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5100_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2110 break;
2111
2112 case 0xA5:
2113 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5000_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2114 break;
2115
2116 case 0xA6:
2117 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_LV_DUAL_CORE), gShellDebug1HiiHandle);
2118 break;
2119
2120 case 0xA7:
2121 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_ULV_DUAL_CORE), gShellDebug1HiiHandle);
2122 break;
2123
2124 case 0xA8:
2125 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7100_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2126 break;
2127
2128 case 0xA9:
2129 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5400_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2130 break;
2131
2132 case 0xAA:
2133 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_QUAD_CORE), gShellDebug1HiiHandle);
2134 break;
2135
2136 case 0xAB:
2137 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5200_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2138 break;
2139
2140 case 0xAC:
2141 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7200_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2142 break;
2143
2144 case 0xAD:
2145 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7300_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2146 break;
2147
2148 case 0xAE:
2149 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7400_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2150 break;
2151
2152 case 0xAF:
2153 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7400_SERIES_MULTI_CORE), gShellDebug1HiiHandle);
2154 break;
2155
2156 case 0xB0:
2157 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_XEON), gShellDebug1HiiHandle);
2158 break;
2159
2160 case 0xB1:
2161 Print (L"Pentium III Processorwith Intel SpeedStep Technology\n");
2162 break;
2163
2164 case 0xB2:
2165 Print (L"Pentium 4 processor\n");
2166 break;
2167
2168 case 0xB3:
2169 Print (L"Intel Xeon Processor\n");
2170 break;
2171
2172 case 0xB4:
2173 Print (L"AS400 Family\n");
2174 break;
2175
2176 case 0xB5:
2177 Print (L"Intel Xeon processor MP\n");
2178 break;
2179
2180 case 0xB6:
2181 Print (L"AMD Althon XP Processor Family\n");
2182 break;
2183
2184 case 0xB7:
2185 Print (L"AMD Althon MP Promcessor Family\n");
2186 break;
2187
2188 case 0xB8:
2189 Print (L"Intel Itanium 2 processor\n");
2190 break;
2191
2192 case 0xB9:
2193 Print (L"Intel Penium M processor\n");
2194 break;
2195
2196 case 0xBA:
2197 Print (L"Intel Celeron D processor\n");
2198 break;
2199
2200 case 0xBB:
2201 Print (L"Intel Pentium D processor\n");
2202 break;
2203
2204 case 0xBC:
2205 Print (L"Intel Pentium Processor Extreme Edition\n");
2206 break;
2207
2208 case 0xBD:
2209 Print (L"Intel Core Solo Processor\n");
2210 break;
2211
2212 case 0xBF:
2213 Print (L"Intel Core 2 Duo Processor\n");
2214 break;
2215
2216 case 0xC0:
2217 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_SOLO), gShellDebug1HiiHandle);
2218 break;
2219
2220 case 0xC1:
2221 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_EXTREME), gShellDebug1HiiHandle);
2222 break;
2223
2224 case 0xC2:
2225 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_QUAD), gShellDebug1HiiHandle);
2226 break;
2227
2228 case 0xC3:
2229 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_EXTREME), gShellDebug1HiiHandle);
2230 break;
2231
2232 case 0xC4:
2233 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_DUO_MOBILE), gShellDebug1HiiHandle);
2234 break;
2235
2236 case 0xC5:
2237 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE2_SOLO_MOBILE), gShellDebug1HiiHandle);
2238 break;
2239
2240 case 0xC6:
2241 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CORE_I7), gShellDebug1HiiHandle);
2242 break;
2243
2244 case 0xC7:
2245 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_CELERON_DUAL_CORE), gShellDebug1HiiHandle);
2246 break;
2247
2248 case 0xC8:
2249 Print (L"IBM 390\n");
2250 break;
2251
2252 case 0xC9:
2253 Print (L"G4\n");
2254 break;
2255
2256 case 0xCA:
2257 Print (L"G5\n");
2258 break;
2259
2260 case 0xCB:
2261 Print (L"G6\n");
2262 break;
2263
2264 case 0xCC:
2265 Print (L"zArchitecture\n");
2266 break;
2267
2268 case 0xCD:
2269 Print (L"Intel Core i5 processor\n");
2270 break;
2271
2272 case 0xCE:
2273 Print (L"Intel Core i3 processor\n");
2274 break;
2275
2276 case 0xCF:
2277 Print (L"Intel Core i9 processor\n");
2278 break;
2279
2280 case 0xD2:
2281 Print (L"ViaC7M\n");
2282 break;
2283
2284 case 0xD3:
2285 Print (L"ViaC7D\n");
2286 break;
2287
2288 case 0xD4:
2289 Print (L"ViaC7\n");
2290 break;
2291
2292 case 0xD5:
2293 Print (L"Eden\n");
2294 break;
2295
2296 case 0xD6:
2297 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_MULTI_CORE), gShellDebug1HiiHandle);
2298 break;
2299
2300 case 0xD7:
2301 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_3_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2302 break;
2303
2304 case 0xD8:
2305 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_3_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2306 break;
2307
2308 case 0xDA:
2309 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2310 break;
2311
2312 case 0xDB:
2313 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_5_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2314 break;
2315
2316 case 0xDD:
2317 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7_SERIES_DUAL_CORE), gShellDebug1HiiHandle);
2318 break;
2319
2320 case 0xDE:
2321 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7_SERIES_QUAD_CORE), gShellDebug1HiiHandle);
2322 break;
2323
2324 case 0xDF:
2325 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL_XEON_7_SERIES_MULTI_CORE), gShellDebug1HiiHandle);
2326 break;
2327
2328 case 0xE0:
2329 Print (L"Multi-Core Intel Xeon processor 3400 Series\n");
2330 break;
2331
2332 case 0xE4:
2333 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_OPTERON_3000_SERIES), gShellDebug1HiiHandle);
2334 break;
2335
2336 case 0xE5:
2337 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_SEMPRON_II), gShellDebug1HiiHandle);
2338 break;
2339
2340 case 0xE6:
2341 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_EMBEDDED_OPTERON_QUAD_CORE), gShellDebug1HiiHandle);
2342 break;
2343
2344 case 0xE7:
2345 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_PHENOM_TRIPLE_CORE), gShellDebug1HiiHandle);
2346 break;
2347
2348 case 0xE8:
2349 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_TURION_ULTRA_DUAL_CORE_MOBILE), gShellDebug1HiiHandle);
2350 break;
2351
2352 case 0xE9:
2353 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_TURION_DUAL_CORE_MOBILE), gShellDebug1HiiHandle);
2354 break;
2355
2356 case 0xEA:
2357 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_ATHLON_DUAL_CORE), gShellDebug1HiiHandle);
2358 break;
2359
2360 case 0xEB:
2361 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AMD_SEMPRON_SI), gShellDebug1HiiHandle);
2362 break;
2363
2364 case 0xEC:
2365 Print (L"AMD Phenom II Processor Family\n");
2366 break;
2367
2368 case 0xED:
2369 Print (L"AMD Althon II Processor Family\n");
2370 break;
2371
2372 case 0xEE:
2373 Print (L"Six-Core AMD Opteron Processor Family\n");
2374 break;
2375
2376 case 0xEF:
2377 Print (L"AMD Sempron M Processor Family\n");
2378 break;
2379
2380 case 0xFA:
2381 Print (L"i860\n");
2382 break;
2383
2384 case 0xFB:
2385 Print (L"i960\n");
2386 break;
2387
2388 default:
2389 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), gShellDebug1HiiHandle);
2390 }
2391
2392 //
2393 // end switch
2394 //
2395 }
2396
2397 /**
2398 Display processor family information.
2399
2400 @param[in] Family2 The family value.
2401 @param[in] Option The option value.
2402 **/
2403 VOID
2404 DisplayProcessorFamily2 (
2405 IN UINT16 Family2,
2406 IN UINT8 Option
2407 )
2408 {
2409 //
2410 // Print prompt message
2411 //
2412 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), gShellDebug1HiiHandle);
2413
2414 //
2415 // Print option
2416 //
2417 PRINT_INFO_OPTION (Family2, Option);
2418
2419 //
2420 // Use switch to check
2421 //
2422 switch (Family2) {
2423 case 0x100:
2424 Print (L"ARMv7\n");
2425 break;
2426
2427 case 0x101:
2428 Print (L"ARMv8\n");
2429 break;
2430
2431 case 0x104:
2432 Print (L"SH-3\n");
2433 break;
2434
2435 case 0x105:
2436 Print (L"SH-4\n");
2437 break;
2438
2439 case 0x118:
2440 Print (L"ARM\n");
2441 break;
2442
2443 case 0x119:
2444 Print (L"StrongARM\n");
2445 break;
2446
2447 case 0x12C:
2448 Print (L"6x86\n");
2449 break;
2450
2451 case 0x12D:
2452 Print (L"MediaGX\n");
2453 break;
2454
2455 case 0x12E:
2456 Print (L"MII\n");
2457 break;
2458
2459 case 0x140:
2460 Print (L"WinChip\n");
2461 break;
2462
2463 case 0x15E:
2464 Print (L"DSP\n");
2465 break;
2466
2467 case 0x1F4:
2468 Print (L"Video Processor\n");
2469 break;
2470
2471 case 0x200:
2472 Print (L"RISC-V RV32\n");
2473 break;
2474
2475 case 0x201:
2476 Print (L"RISC-V RV64\n");
2477 break;
2478
2479 case 0x202:
2480 Print (L"RISC-V RV128\n");
2481 break;
2482
2483 default:
2484 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), gShellDebug1HiiHandle);
2485 }
2486 }
2487
2488 /**
2489 Display processor voltage information.
2490
2491 @param[in] Voltage The Voltage.
2492 Bit 7 Set to 0, indicating 'legacy' mode for processor voltage
2493 Bits 6:4 Reserved, must be zero
2494 Bits 3:0 Voltage Capability.
2495 A Set bit indicates that the voltage is supported.
2496 Bit 0 - 5V
2497 Bit 1 - 3.3V
2498 Bit 2 - 2.9V
2499 Bit 3 - Reserved, must be zero.
2500
2501 Note:
2502 Setting of multiple bits indicates the socket is configurable
2503 If bit 7 is set to 1, the remaining seven bits of the field are set to
2504 contain the processor's current voltage times 10.
2505 For example, the field value for a processor voltage of 1.8 volts would be
2506 92h = 80h + (1.8 * 10) = 80h + 18 = 80h +12h.
2507
2508 @param[in] Option The option.
2509 **/
2510 VOID
2511 DisplayProcessorVoltage (
2512 IN UINT8 Voltage,
2513 IN UINT8 Option
2514 )
2515 {
2516 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_INFO), gShellDebug1HiiHandle);
2517 //
2518 // Print option
2519 //
2520 PRINT_INFO_OPTION (Voltage, Option);
2521
2522 if (BIT (Voltage, 7) != 0) {
2523 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_CURRENT_VOLTAGE), gShellDebug1HiiHandle, (Voltage - 0x80));
2524 } else {
2525 if (BIT (Voltage, 0) != 0) {
2526 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_5V_SUPOPRTED), gShellDebug1HiiHandle);
2527 }
2528
2529 if (BIT (Voltage, 1) != 0) {
2530 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_33V_SUPPORTED), gShellDebug1HiiHandle);
2531 }
2532
2533 if (BIT (Voltage, 2) != 0) {
2534 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_29V_SUPPORTED), gShellDebug1HiiHandle);
2535 }
2536
2537 //
2538 // check the reserved zero bits:
2539 //
2540 if (BIT (Voltage, 3) != 0) {
2541 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT3_NOT_ZERO), gShellDebug1HiiHandle);
2542 }
2543
2544 if (BIT (Voltage, 4) != 0) {
2545 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT4_NOT_ZERO), gShellDebug1HiiHandle);
2546 }
2547
2548 if (BIT (Voltage, 5) != 0) {
2549 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT5_NOT_ZERO), gShellDebug1HiiHandle);
2550 }
2551
2552 if (BIT (Voltage, 6) != 0) {
2553 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT6_NOT_ZERO), gShellDebug1HiiHandle);
2554 }
2555 }
2556 }
2557
2558 /**
2559 Display processor information.
2560
2561 @param[in] Status The status.
2562 Bit 7 Reserved, must be 0
2563 Bit 6 CPU Socket Populated
2564 1 - CPU Socket Populated
2565 0 - CPU Socket Unpopulated
2566 Bits 5:3 Reserved, must be zero
2567 Bits 2:0 CPU Status
2568 0h - Unknown
2569 1h - CPU Enabled
2570 2h - CPU Disabled by User via BIOS Setup
2571 3h - CPU Disabled By BIOS (POST Error)
2572 4h - CPU is Idle, waiting to be enabled.
2573 5-6h - Reserved
2574 7h - Other
2575
2576 @param[in] Option The option
2577 **/
2578 VOID
2579 DisplayProcessorStatus (
2580 IN UINT8 Status,
2581 IN UINT8 Option
2582 )
2583 {
2584 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_STATUS), gShellDebug1HiiHandle);
2585 PRINT_INFO_OPTION (Status, Option);
2586
2587 if (BIT (Status, 7) != 0) {
2588 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT7_NOT_ZERO), gShellDebug1HiiHandle);
2589 } else if (BIT (Status, 5) != 0) {
2590 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT5_NOT_ZERO), gShellDebug1HiiHandle);
2591 } else if (BIT (Status, 4) != 0) {
2592 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT4_NOT_ZERO), gShellDebug1HiiHandle);
2593 } else if (BIT (Status, 3) != 0) {
2594 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT3_NOT_ZERO), gShellDebug1HiiHandle);
2595 }
2596
2597 //
2598 // Check BIT 6
2599 //
2600 if (BIT (Status, 6) != 0) {
2601 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_POPULATED), gShellDebug1HiiHandle);
2602 } else {
2603 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_UNPOPULATED), gShellDebug1HiiHandle);
2604 }
2605
2606 //
2607 // Check BITs 2:0
2608 //
2609 switch (Status & 0x07) {
2610 case 0:
2611 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
2612 break;
2613
2614 case 1:
2615 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_ENABLED), gShellDebug1HiiHandle);
2616 break;
2617
2618 case 2:
2619 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DISABLED_BY_USER), gShellDebug1HiiHandle);
2620 break;
2621
2622 case 3:
2623 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DIABLED_BY_BIOS), gShellDebug1HiiHandle);
2624 break;
2625
2626 case 4:
2627 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_IDLE), gShellDebug1HiiHandle);
2628 break;
2629
2630 case 7:
2631 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHERS), gShellDebug1HiiHandle);
2632 break;
2633
2634 default:
2635 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gShellDebug1HiiHandle);
2636 }
2637 }
2638
2639 /**
2640 Display information about Memory Controller Information (Type 5).
2641
2642 @param[in] Size Memory size.
2643 @param[in] SlotNum Which slot is this about.
2644 @param[in] Option Option for the level of detail output required.
2645 **/
2646 VOID
2647 DisplayMaxMemoryModuleSize (
2648 IN UINT8 Size,
2649 IN UINT8 SlotNum,
2650 IN UINT8 Option
2651 )
2652 {
2653 UINTN MaxSize;
2654
2655 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE_LARGEST_MEM), gShellDebug1HiiHandle);
2656 //
2657 // MaxSize is determined by follow formula
2658 //
2659 MaxSize = (UINTN)1 << Size;
2660 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), gShellDebug1HiiHandle, MaxSize);
2661
2662 if (Option >= SHOW_DETAIL) {
2663 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_AMOUNT_MEM), gShellDebug1HiiHandle);
2664 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), gShellDebug1HiiHandle, MaxSize, SlotNum, MaxSize * SlotNum);
2665 }
2666 }
2667
2668 /**
2669 Display information about memory configuration handles.
2670
2671 @param[in] Handles The buffer of handles to output info on.
2672 @param[in] SlotNum The number of handles in the above buffer.
2673 @param[in] Option Option for the level of detail output required.
2674 **/
2675 VOID
2676 DisplayMemoryModuleConfigHandles (
2677 IN UINT16 *Handles,
2678 IN UINT8 SlotNum,
2679 IN UINT8 Option
2680 )
2681 {
2682 UINT8 Index;
2683
2684 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_CONTROLLED), gShellDebug1HiiHandle, SlotNum);
2685
2686 if (Option >= SHOW_DETAIL) {
2687 //
2688 // No handle, Handles is INVALID.
2689 //
2690 if (SlotNum == 0) {
2691 return;
2692 }
2693
2694 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_LIST_CONTROLLED), gShellDebug1HiiHandle);
2695 for (Index = 0; Index < SlotNum; Index++) {
2696 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLE), gShellDebug1HiiHandle, Index + 1, Handles[Index]);
2697 }
2698 }
2699 }
2700
2701 /**
2702 Display Memory Module Information (Type 6).
2703
2704 @param[in] BankConnections
2705 @param[in] Option
2706 **/
2707 VOID
2708 DisplayMmBankConnections (
2709 IN UINT8 BankConnections,
2710 IN UINT8 Option
2711 )
2712 {
2713 UINT8 High;
2714 UINT8 Low;
2715
2716 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_CONNECTIONS), gShellDebug1HiiHandle);
2717 //
2718 // Print option
2719 //
2720 PRINT_INFO_OPTION (BankConnections, Option);
2721
2722 //
2723 // Divide it to high and low
2724 //
2725 High = (UINT8)(BankConnections & 0xF0);
2726 Low = (UINT8)(BankConnections & 0x0F);
2727 if (High != 0xF) {
2728 if (Low != 0xF) {
2729 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS), gShellDebug1HiiHandle, High, Low, High, Low);
2730 } else {
2731 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), gShellDebug1HiiHandle, High, High);
2732 }
2733 } else {
2734 if (Low != 0xF) {
2735 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), gShellDebug1HiiHandle, Low, Low);
2736 } else {
2737 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BANKS_CONNECTED), gShellDebug1HiiHandle);
2738 }
2739 }
2740 }
2741
2742 /**
2743 Display memory informcation.
2744
2745 Bits 0:6 Size (n),
2746 where 2**n is the size in MB with three special-case values:
2747 7Dh Not determinable (Installed Size only)
2748 7Eh Module is installed, but no memory has been enabled
2749 7Fh Not installed
2750 Bit 7 Defines whether the memory module has a single- (0)
2751 or double-bank (1) connection.
2752
2753 @param[in] Size - The size
2754 @param[in] Option - The option
2755 **/
2756 VOID
2757 DisplayMmMemorySize (
2758 IN UINT8 Size,
2759 IN UINT8 Option
2760 )
2761 {
2762 UINT8 Value;
2763
2764 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEMORY_SIZE), gShellDebug1HiiHandle);
2765 //
2766 // Print option
2767 //
2768 PRINT_INFO_OPTION (Size, Option);
2769
2770 //
2771 // Get the low bits(0-6 bit)
2772 //
2773 Value = (UINT8)(Size & 0x7F);
2774 if (Value == 0x7D) {
2775 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE_NOT_DETERMINABLE), gShellDebug1HiiHandle);
2776 } else if (Value == 0x7E) {
2777 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MODULE_INSTALLED), gShellDebug1HiiHandle);
2778 } else if (Value == 0x7F) {
2779 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_INSTALLED), gShellDebug1HiiHandle);
2780 } else {
2781 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE), gShellDebug1HiiHandle, 1 << Value);
2782 }
2783
2784 if (BIT (Size, 7) != 0) {
2785 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_DOUBLE_BANK), gShellDebug1HiiHandle);
2786 } else {
2787 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_SINGLE_BANK), gShellDebug1HiiHandle);
2788 }
2789 }
2790
2791 /**
2792 Display Cache Configuration.
2793
2794 @param[in] CacheConfiguration Cache Configuration.
2795 Bits 15:10 Reserved, must be 0
2796 Bits 9:8 Operational Mode
2797 0h - Write Through
2798 1h - Write Back
2799 2h - Varies with Memory Address
2800 3h - Unknown
2801 Bit 7 Enabled/Disabled
2802 1 - Enabled
2803 0 - Disabled
2804 Bits 6:5 Location
2805 0h - Internal
2806 1h - External
2807 2h - Reserved
2808 3h - Unknown
2809 Bit 4 Reserved, must be zero
2810 Bit 3 Cache Socketed
2811 1 - Socketed
2812 0 - Unsocketed
2813 Bits 2:0 Cache Level
2814 1 through 8 (For example, an L1 cache would
2815 use value 000b and an L3 cache would use 010b.)
2816
2817 @param[in] Option The option
2818 **/
2819 VOID
2820 DisplayCacheConfiguration (
2821 IN UINT16 CacheConfiguration,
2822 IN UINT8 Option
2823 )
2824 {
2825 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_CONFIGURATION), gShellDebug1HiiHandle);
2826 PRINT_INFO_OPTION (CacheConfiguration, Option);
2827
2828 if (BIT (CacheConfiguration, 15) != 0) {
2829 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT15_NOT_ZERO), gShellDebug1HiiHandle);
2830 } else if (BIT (CacheConfiguration, 14) != 0) {
2831 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT14_NOT_ZERO), gShellDebug1HiiHandle);
2832 } else if (BIT (CacheConfiguration, 13) != 0) {
2833 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT13_NOT_ZERO), gShellDebug1HiiHandle);
2834 } else if (BIT (CacheConfiguration, 12) != 0) {
2835 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT12_NOT_ZERO), gShellDebug1HiiHandle);
2836 } else if (BIT (CacheConfiguration, 11) != 0) {
2837 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT11_NOT_ZERO), gShellDebug1HiiHandle);
2838 } else if (BIT (CacheConfiguration, 10) != 0) {
2839 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT10_NOT_ZERO), gShellDebug1HiiHandle);
2840 } else if (BIT (CacheConfiguration, 4) != 0) {
2841 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT4_NOT_ZERO), gShellDebug1HiiHandle);
2842 }
2843
2844 //
2845 // Check BITs 9:8
2846 //
2847 switch ((CacheConfiguration & 0x300) >> 8) {
2848 case 0:
2849 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_WRITE_THROUGH), gShellDebug1HiiHandle);
2850 break;
2851
2852 case 1:
2853 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_WRITE_BACK), gShellDebug1HiiHandle);
2854 break;
2855
2856 case 2:
2857 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_VARIES_WITH_MEM_ADDR), gShellDebug1HiiHandle);
2858 break;
2859
2860 case 3:
2861 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
2862 break;
2863 }
2864
2865 //
2866 // Check BIT 7
2867 //
2868 if (BIT (CacheConfiguration, 7) != 0) {
2869 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED), gShellDebug1HiiHandle);
2870 } else {
2871 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gShellDebug1HiiHandle);
2872 }
2873
2874 //
2875 // Check BITs 6:5
2876 //
2877 switch ((CacheConfiguration & 0x60) >> 5) {
2878 case 0:
2879 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_INTERNAL), gShellDebug1HiiHandle);
2880 break;
2881
2882 case 1:
2883 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_EXTERNAL), gShellDebug1HiiHandle);
2884 break;
2885
2886 case 2:
2887 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gShellDebug1HiiHandle);
2888 break;
2889
2890 case 3:
2891 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
2892 break;
2893 }
2894
2895 //
2896 // Check BIT 3
2897 //
2898 if (BIT (CacheConfiguration, 3) != 0) {
2899 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_SOCKETED), gShellDebug1HiiHandle);
2900 } else {
2901 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_NOT_SOCKETED), gShellDebug1HiiHandle);
2902 }
2903
2904 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CACHE_LEVEL), gShellDebug1HiiHandle, (CacheConfiguration & 0x07) + 1);
2905 }
2906
2907 /**
2908 The Slot ID field of the System Slot structure provides a mechanism to
2909 correlate the physical attributes of the slot to its logical access method
2910 (which varies based on the Slot Type field).
2911
2912 @param[in] SlotId - The slot ID
2913 @param[in] SlotType - The slot type
2914 @param[in] Option - The Option
2915 **/
2916 VOID
2917 DisplaySystemSlotId (
2918 IN UINT16 SlotId,
2919 IN UINT8 SlotType,
2920 IN UINT8 Option
2921 )
2922 {
2923 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SLOT_ID), gShellDebug1HiiHandle);
2924 //
2925 // print option
2926 //
2927 PRINT_INFO_OPTION (SlotType, Option);
2928
2929 switch (SlotType) {
2930 //
2931 // Slot Type: MCA
2932 //
2933 case 0x04:
2934 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_MICRO_CHAN), gShellDebug1HiiHandle);
2935 if ((SlotId > 0) && (SlotId < 15)) {
2936 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), gShellDebug1HiiHandle, SlotId);
2937 } else {
2938 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), gShellDebug1HiiHandle);
2939 }
2940
2941 break;
2942
2943 //
2944 // EISA
2945 //
2946 case 0x05:
2947 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_EISA_NUM), gShellDebug1HiiHandle);
2948 if ((SlotId > 0) && (SlotId < 15)) {
2949 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), gShellDebug1HiiHandle, SlotId);
2950 } else {
2951 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), gShellDebug1HiiHandle);
2952 }
2953
2954 break;
2955
2956 //
2957 // Slot Type: PCI
2958 //
2959 case 0x06:
2960 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gShellDebug1HiiHandle, SlotId);
2961 break;
2962
2963 //
2964 // PCMCIA
2965 //
2966 case 0x07:
2967 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_IDENTIFIES_ADAPTER_NUM), gShellDebug1HiiHandle, SlotId);
2968 break;
2969
2970 //
2971 // Slot Type: PCI-E
2972 //
2973 case 0xA5:
2974 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gShellDebug1HiiHandle, SlotId);
2975 break;
2976
2977 default:
2978 if (((SlotType >= 0x0E) && (SlotType <= 0x12)) || ((SlotType >= 0xA6) && (SlotType <= 0xB6))) {
2979 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gShellDebug1HiiHandle, SlotId);
2980 } else {
2981 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_SLOT_ID), gShellDebug1HiiHandle);
2982 }
2983 }
2984 }
2985
2986 /**
2987 Display System Boot Information (Type 32) information.
2988
2989 @param[in] Parameter The parameter.
2990 @param[in] Option The options.
2991 **/
2992 VOID
2993 DisplaySystemBootStatus (
2994 IN UINT8 Parameter,
2995 IN UINT8 Option
2996 )
2997 {
2998 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_BOOT_STATUS), gShellDebug1HiiHandle);
2999 //
3000 // Print option
3001 //
3002 PRINT_INFO_OPTION (Parameter, Option);
3003
3004 //
3005 // Check value and print
3006 //
3007 if (Parameter == 0) {
3008 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_ERRORS_DETECTED), gShellDebug1HiiHandle);
3009 } else if (Parameter == 1) {
3010 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BOOTABLE_MEDIA), gShellDebug1HiiHandle);
3011 } else if (Parameter == 2) {
3012 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NORMAL_OP_SYSTEM), gShellDebug1HiiHandle);
3013 } else if (Parameter == 3) {
3014 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FIRMWARE_DETECTED), gShellDebug1HiiHandle);
3015 } else if (Parameter == 4) {
3016 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM), gShellDebug1HiiHandle);
3017 } else if (Parameter == 5) {
3018 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USER_REQUESTED_BOOT), gShellDebug1HiiHandle);
3019 } else if (Parameter == 6) {
3020 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_SECURITY_VIOLATION), gShellDebug1HiiHandle);
3021 } else if (Parameter == 7) {
3022 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PREV_REQ_IMAGE), gShellDebug1HiiHandle);
3023 } else if (Parameter == 8) {
3024 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER), gShellDebug1HiiHandle);
3025 } else if ((Parameter >= 9) && (Parameter <= 127)) {
3026 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FUTURE_ASSIGNMENT), gShellDebug1HiiHandle);
3027 } else if ((Parameter >= 128) && (Parameter <= 191)) {
3028 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VENDOR_OEM_SPECIFIC), gShellDebug1HiiHandle);
3029 } else if (Parameter >= 192) {
3030 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRODUCT_SPEC_IMPLMENTATION), gShellDebug1HiiHandle);
3031 } else {
3032 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_VALUE), gShellDebug1HiiHandle);
3033 }
3034 }
3035
3036 /**
3037 Display Portable Battery (Type 22) information.
3038
3039 The date the cell pack was manufactured, in packed format:
3040 Bits 15:9 Year, biased by 1980, in the range 0 to 127.
3041 Bits 8:5 Month, in the range 1 to 12.
3042 Bits 4:0 Date, in the range 1 to 31.
3043 For example, 01 February 2000 would be identified as
3044 0010 1000 0100 0001b (0x2841).
3045
3046 @param[in] Date The date
3047 @param[in] Option The option
3048 **/
3049 VOID
3050 DisplaySBDSManufactureDate (
3051 IN UINT16 Date,
3052 IN UINT8 Option
3053 )
3054 {
3055 UINTN Day;
3056 UINTN Month;
3057 UINTN Year;
3058
3059 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SBDS_MANUFACTURE_DATE), gShellDebug1HiiHandle);
3060 PRINT_INFO_OPTION (Date, Option);
3061 //
3062 // Print date
3063 //
3064 Day = Date & 0x001F;
3065 Month = (Date & 0x01E0) >> 5;
3066 Year = ((Date & 0xFE00) >> 9) + 1980;
3067 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONTH_DAY_YEAR), gShellDebug1HiiHandle, Day, Month, Year);
3068 }
3069
3070 /**
3071 Display System Reset (Type 23) information.
3072
3073
3074 Identifies the system-reset capabilities for the system.
3075 Bits 7:6 Reserved for future assignment via this specification, set to 00b.
3076 Bit 5 System contains a watchdog timer, either True (1) or False (0).
3077 Bits 4:3 Boot Option on Limit.
3078 Identifies the system action to be taken when the Reset Limit is reached, one of:
3079 00b Reserved, do not use.
3080 01b Operating system
3081 10b System utilities
3082 11b Do not rebootBits
3083 2:1 Boot Option. Indicates the action to be taken following a watchdog reset, one of:
3084 00b Reserved, do not use.
3085 01b Operating system
3086 10b System utilities
3087 11b Do not reboot
3088 Bit 0 Status.
3089 1b The system reset is enabled by the user
3090 0b The system reset is not enabled by the user
3091
3092 @param[in] Reset Reset
3093 @param[in] Option The option
3094 **/
3095 VOID
3096 DisplaySystemResetCapabilities (
3097 IN UINT8 Reset,
3098 IN UINT8 Option
3099 )
3100 {
3101 UINTN Temp;
3102
3103 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_RESET_CAPABILITIES), gShellDebug1HiiHandle);
3104 PRINT_INFO_OPTION (Reset, Option);
3105
3106 //
3107 // Check reserved bits 7:6
3108 //
3109 if ((Reset & 0xC0) != 0) {
3110 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO), gShellDebug1HiiHandle);
3111 }
3112
3113 //
3114 // Watch dog
3115 //
3116 if (BIT (Reset, 5) != 0) {
3117 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER_2), gShellDebug1HiiHandle);
3118 } else {
3119 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_NOT_CONTAIN_TIMER), gShellDebug1HiiHandle);
3120 }
3121
3122 //
3123 // Boot Option on Limit
3124 //
3125 Temp = (Reset & 0x18) >> 3;
3126 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION_LIMIT), gShellDebug1HiiHandle);
3127 switch (Temp) {
3128 case 0:
3129 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gShellDebug1HiiHandle);
3130 break;
3131
3132 case 1:
3133 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), gShellDebug1HiiHandle);
3134 break;
3135
3136 case 2:
3137 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), gShellDebug1HiiHandle);
3138 break;
3139
3140 case 3:
3141 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT), gShellDebug1HiiHandle);
3142 break;
3143 }
3144
3145 //
3146 // Boot Option
3147 //
3148 Temp = (Reset & 0x06) >> 1;
3149 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION), gShellDebug1HiiHandle);
3150 switch (Temp) {
3151 case 0:
3152 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gShellDebug1HiiHandle);
3153 break;
3154
3155 case 1:
3156 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), gShellDebug1HiiHandle);
3157 break;
3158
3159 case 2:
3160 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), gShellDebug1HiiHandle);
3161 break;
3162
3163 case 3:
3164 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT), gShellDebug1HiiHandle);
3165 break;
3166 }
3167
3168 //
3169 // Reset enable flag
3170 //
3171 if ((Reset & 0x01) != 0) {
3172 Print (L"The system reset is enabled by the user\n");
3173 } else {
3174 Print (L"The system reset is disabled by the user\n");
3175 }
3176 }
3177
3178 /**
3179 Display Hardware Security (Type 24) information.
3180
3181
3182 Identifies the password and reset status for the system:
3183
3184 Bits 7:6 Power-on Password Status, one of:
3185 00b Disabled
3186 01b Enabled
3187 10b Not Implemented
3188 11b Unknown
3189 Bits 5:4 Keyboard Password Status, one of:
3190 00b Disabled
3191 01b Enabled
3192 10b Not Implemented
3193 11b Unknown
3194 Bits 3:2 Administrator Password Status, one of:
3195 00b Disabled
3196 01b Enabled
3197 10b Not Implemented
3198 11b Unknown
3199 Bits 1:0 Front Panel Reset Status, one of:
3200 00b Disabled
3201 01b Enabled
3202 10b Not Implemented
3203 11b Unknown
3204
3205 @param[in] Settings The device settings.
3206 @param[in] Option The device options.
3207 **/
3208 VOID
3209 DisplayHardwareSecuritySettings (
3210 IN UINT8 Settings,
3211 IN UINT8 Option
3212 )
3213 {
3214 UINTN Temp;
3215
3216 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HARDWARE_SECURITY_SET), gShellDebug1HiiHandle);
3217 PRINT_INFO_OPTION (Settings, Option);
3218
3219 //
3220 // Power-on Password Status
3221 //
3222 Temp = (Settings & 0xC0) >> 6;
3223 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_ON_PASSWORD), gShellDebug1HiiHandle);
3224 switch (Temp) {
3225 case 0:
3226 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gShellDebug1HiiHandle);
3227 break;
3228
3229 case 1:
3230 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gShellDebug1HiiHandle);
3231 break;
3232
3233 case 2:
3234 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gShellDebug1HiiHandle);
3235 break;
3236
3237 case 3:
3238 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3239 break;
3240 }
3241
3242 //
3243 // Keyboard Password Status
3244 //
3245 Temp = (Settings & 0x30) >> 4;
3246 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_PASSWORD), gShellDebug1HiiHandle);
3247 switch (Temp) {
3248 case 0:
3249 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gShellDebug1HiiHandle);
3250 break;
3251
3252 case 1:
3253 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gShellDebug1HiiHandle);
3254 break;
3255
3256 case 2:
3257 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gShellDebug1HiiHandle);
3258 break;
3259
3260 case 3:
3261 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3262 break;
3263 }
3264
3265 //
3266 // Administrator Password Status
3267 //
3268 Temp = (Settings & 0x0C) >> 2;
3269 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ADMIN_PASSWORD_STATUS), gShellDebug1HiiHandle);
3270 switch (Temp) {
3271 case 0:
3272 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gShellDebug1HiiHandle);
3273 break;
3274
3275 case 1:
3276 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gShellDebug1HiiHandle);
3277 break;
3278
3279 case 2:
3280 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gShellDebug1HiiHandle);
3281 break;
3282
3283 case 3:
3284 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3285 break;
3286 }
3287
3288 //
3289 // Front Panel Reset Status
3290 //
3291 Temp = Settings & 0x3;
3292 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FRONT_PANEL_RESET), gShellDebug1HiiHandle);
3293 switch (Temp) {
3294 case 0:
3295 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gShellDebug1HiiHandle);
3296 break;
3297
3298 case 1:
3299 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gShellDebug1HiiHandle);
3300 break;
3301
3302 case 2:
3303 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gShellDebug1HiiHandle);
3304 break;
3305
3306 case 3:
3307 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3308 break;
3309 }
3310 }
3311
3312 /**
3313 Display Out-of-Band Remote Access (Type 30) information.
3314
3315 @param[in] Connections The device characteristics.
3316 @param[in] Option The device options.
3317 **/
3318 VOID
3319 DisplayOBRAConnections (
3320 IN UINT8 Connections,
3321 IN UINT8 Option
3322 )
3323 {
3324 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONNECTIONS), gShellDebug1HiiHandle);
3325 PRINT_INFO_OPTION (Connections, Option);
3326
3327 //
3328 // Check reserved bits 7:2
3329 //
3330 if ((Connections & 0xFC) != 0) {
3331 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO_2), gShellDebug1HiiHandle);
3332 }
3333
3334 //
3335 // Outbound Connection
3336 //
3337 if (BIT (Connections, 1) != 0) {
3338 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OUTBOUND_CONN_ENABLED), gShellDebug1HiiHandle);
3339 } else {
3340 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTUBOUND_CONN_DISABLED), gShellDebug1HiiHandle);
3341 }
3342
3343 //
3344 // Inbound Connection
3345 //
3346 if (BIT (Connections, 0) != 0) {
3347 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOIUND_CONN_ENABLED), gShellDebug1HiiHandle);
3348 } else {
3349 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOUND_CONN_DISABLED), gShellDebug1HiiHandle);
3350 }
3351 }
3352
3353 /**
3354 Display System Power Supply (Type 39) information.
3355
3356 @param[in] Characteristics The device characteristics.
3357 @param[in] Option The device options.
3358 **/
3359 VOID
3360 DisplaySPSCharacteristics (
3361 IN UINT16 Characteristics,
3362 IN UINT8 Option
3363 )
3364 {
3365 UINTN Temp;
3366
3367 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_CHAR), gShellDebug1HiiHandle);
3368 PRINT_INFO_OPTION (Characteristics, Option);
3369
3370 //
3371 // Check reserved bits 15:14
3372 //
3373 if ((Characteristics & 0xC000) != 0) {
3374 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_15_14_RSVD), gShellDebug1HiiHandle);
3375 }
3376
3377 //
3378 // Bits 13:10 - DMTF Power Supply Type
3379 //
3380 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TYPE), gShellDebug1HiiHandle);
3381 Temp = (Characteristics & 0x1C00) >> 10;
3382 switch (Temp) {
3383 case 1:
3384 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gShellDebug1HiiHandle);
3385 break;
3386
3387 case 2:
3388 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3389 break;
3390
3391 case 3:
3392 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LINEAR), gShellDebug1HiiHandle);
3393 break;
3394
3395 case 4:
3396 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SWITCHING), gShellDebug1HiiHandle);
3397 break;
3398
3399 case 5:
3400 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BATTERY), gShellDebug1HiiHandle);
3401 break;
3402
3403 case 6:
3404 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UPS), gShellDebug1HiiHandle);
3405 break;
3406
3407 case 7:
3408 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONVERTER), gShellDebug1HiiHandle);
3409 break;
3410
3411 case 8:
3412 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_REGULATOR), gShellDebug1HiiHandle);
3413 break;
3414
3415 default:
3416 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_2), gShellDebug1HiiHandle);
3417 }
3418
3419 //
3420 // Bits 9:7 - Status
3421 //
3422 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STATUS_DASH), gShellDebug1HiiHandle);
3423 Temp = (Characteristics & 0x380) >> 7;
3424 switch (Temp) {
3425 case 1:
3426 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gShellDebug1HiiHandle);
3427 break;
3428
3429 case 2:
3430 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3431 break;
3432
3433 case 3:
3434 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OK), gShellDebug1HiiHandle);
3435 break;
3436
3437 case 4:
3438 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NON_CRITICAL), gShellDebug1HiiHandle);
3439 break;
3440
3441 case 5:
3442 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CRITICAL_POWER_SUPPLY), gShellDebug1HiiHandle);
3443 break;
3444
3445 default:
3446 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED), gShellDebug1HiiHandle);
3447 }
3448
3449 //
3450 // Bits 6:3 - DMTF Input Voltage Range Switching
3451 //
3452 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INPUT_VOLTAGE_RANGE), gShellDebug1HiiHandle);
3453 Temp = (Characteristics & 0x78) >> 3;
3454 switch (Temp) {
3455 case 1:
3456 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gShellDebug1HiiHandle);
3457 break;
3458
3459 case 2:
3460 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gShellDebug1HiiHandle);
3461 break;
3462
3463 case 3:
3464 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MANUAL), gShellDebug1HiiHandle);
3465 break;
3466
3467 case 4:
3468 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AUTO_SWITCH), gShellDebug1HiiHandle);
3469 break;
3470
3471 case 5:
3472 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WIDE_RANGE), gShellDebug1HiiHandle);
3473 break;
3474
3475 case 6:
3476 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_APPLICABLE), gShellDebug1HiiHandle);
3477 break;
3478
3479 default:
3480 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_3), gShellDebug1HiiHandle);
3481 break;
3482 }
3483
3484 //
3485 // Power supply is unplugged from the wall
3486 //
3487 if (BIT (Characteristics, 2) != 0) {
3488 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_UNPLUGGED), gShellDebug1HiiHandle);
3489 } else {
3490 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PLUGGED), gShellDebug1HiiHandle);
3491 }
3492
3493 //
3494 // Power supply is present
3495 //
3496 if (BIT (Characteristics, 1) != 0) {
3497 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PRESENT), gShellDebug1HiiHandle);
3498 } else {
3499 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_PRESENT), gShellDebug1HiiHandle);
3500 }
3501
3502 //
3503 // hot replaceable
3504 //
3505 if (BIT (Characteristics, 0) != 0) {
3506 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_REPLACE), gShellDebug1HiiHandle);
3507 } else {
3508 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_REPLACE), gShellDebug1HiiHandle);
3509 }
3510 }
3511
3512 /**
3513 Display TPM Device (Type 43) Characteristics.
3514
3515 @param[in] Chara The information bits.
3516 @param[in] Option The optional information.
3517 **/
3518 VOID
3519 DisplayTpmDeviceCharacteristics (
3520 IN UINT64 Chara,
3521 IN UINT8 Option
3522 )
3523 {
3524 //
3525 // Print header
3526 //
3527 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CHAR), gShellDebug1HiiHandle);
3528 //
3529 // print option
3530 //
3531 PRINT_INFO_OPTION (Chara, Option);
3532
3533 //
3534 // Check all the bits and print information
3535 // This function does not use Table because table of bits
3536 // are designed not to deal with UINT64
3537 //
3538 if (BIT (Chara, 0) != 0) {
3539 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gShellDebug1HiiHandle);
3540 }
3541
3542 if (BIT (Chara, 1) != 0) {
3543 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gShellDebug1HiiHandle);
3544 }
3545
3546 if (BIT (Chara, 2) != 0) {
3547 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CHAR_NOT_SUPPORTED), gShellDebug1HiiHandle);
3548 }
3549
3550 if (BIT (Chara, 3) != 0) {
3551 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CONFIG_FWU), gShellDebug1HiiHandle);
3552 }
3553
3554 if (BIT (Chara, 4) != 0) {
3555 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CONFIG_PLAT_SW), gShellDebug1HiiHandle);
3556 }
3557
3558 if (BIT (Chara, 5) != 0) {
3559 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CONFIG_OEM), gShellDebug1HiiHandle);
3560 }
3561
3562 //
3563 // Just print the Reserved
3564 //
3565 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_06_63), gShellDebug1HiiHandle);
3566 }