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