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