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