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