Add support in smbiosview command to display Type 45 table. There is a bug in 
Type 3 table which displays SystemEnclosureType as Undefined. As per Smbios 
spec, BIT7 in SMBIOS_TABLE_TYPE3.Type denotes whether chassis lock is present 
or not. But, currently BIT7 considered to display SystemEnclosureType.

Signed-off by: kalaivani P <kalaiva...@ami.com>

cc: Vasudevan S <vasudev...@ami.com>
cc: Sundaresan S <sundares...@ami.com>
cc: Liming Gao <gaolim...@byosoft.com.cn>

---
 .../SmbiosView/PrintInfo.c                    |  28 +++
 .../SmbiosView/PrintInfo.h                    |  48 +++++
 .../SmbiosView/QueryTable.c                   | 165 +++++++++++++++++-
 .../SmbiosView/SmbiosViewStrings.uni          |   7 +-
 4 files changed, 246 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
index bf5306205b..2b2a18bdce 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
@@ -1274,6 +1274,34 @@ SmbiosPrintStructure (
       DisplayProcessorArchitectureType 
(Struct->Type44->ProcessorSpecificBlock.ProcessorArchType, Option);

       break;



+    //

+    // Firmware Inventory Information (Type 45)

+    //

+    case 45:

+    {

+        UINT16  *AssociatedComponentHandles;

+

+        PRINT_PENDING_STRING  (Struct, Type45, FirmwareComponentName);

+        PRINT_PENDING_STRING  (Struct, Type45, FirmwareVersion);

+        DisplayFirmwareVersionFormat (Struct->Type45->FirmwareVersionFormat, 
Option);

+        PRINT_PENDING_STRING  (Struct, Type45, FirmwareId);

+        DisplayFirmwareIdFormat (Struct->Type45->FirmwareIdFormat, Option);

+        PRINT_PENDING_STRING  (Struct, Type45, ReleaseDate);

+        PRINT_PENDING_STRING  (Struct, Type45, Manufacturer);

+        PRINT_PENDING_STRING  (Struct, Type45, LowestSupportedVersion);

+        PRINT_STRUCT_VALUE_LH (Struct, Type45, ImageSize);

+        DisplayFirmwareCharacteristics (*(UINT16 
*)(UINTN)&Struct->Type45->Characteristics, Option);

+        DisplayFirmwareStateInformation (Struct->Type45->State, Option);

+        PRINT_STRUCT_VALUE_H (Struct, Type45, AssociatedComponentCount);

+

+        AssociatedComponentHandles = (UINT16 *)((UINTN)Struct->Type45 + 
sizeof(SMBIOS_TABLE_TYPE45));

+        for (Index = 0; Index < Struct->Type45->AssociatedComponentCount; 
Index++) {

+            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_PRINTINFO_FW_INVENTORY_HANDLE), gShellDebug1HiiHandle, Index + 
1, AssociatedComponentHandles[Index]);

+        }

+

+        break;

+    }

+

     //

     // Inactive (Type 126)

     //

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.h 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.h
index 8ecec693ad..43dbfcb94f 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.h
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.h
@@ -3,6 +3,7 @@


   Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>

   (C) Copyright 2017 - 2019 Hewlett Packard Enterprise Development LP<BR>

+  Copyright (c) 1985 - 2022, American Megatrends International LLC.<BR>

   SPDX-License-Identifier: BSD-2-Clause-Patent



 **/

@@ -439,4 +440,51 @@ DisplayProcessorArchitectureType (
   IN UINT8  Option

   );



+/**

+  Display Firmware Version Format (Type 45).

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareVersionFormat (

+  IN UINT8  Key,

+  IN UINT8  Option

+  );

+

+/**

+  Display Firmware ID Format (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareIdFormat (

+  IN UINT8  Key,

+  IN UINT8  Option

+  );

+

+/**

+  Display Firmware State Information (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareStateInformation (

+  IN UINT8  Key,

+  IN UINT8  Option

+  );

+

+/**

+  Display Firmware Inventory Characteristics (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareCharacteristics (

+  IN UINT16  Key,

+  IN UINT8   Option

+  );

 #endif

diff --git 
a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c
index 2e62ae3a34..06b24b55cd 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c
@@ -4,6 +4,7 @@


   Copyright (c) 2005 - 2021, Intel Corporation. All rights reserved.<BR>

   (C) Copyright 2016-2019 Hewlett Packard Enterprise Development LP<BR>

+  Copyright (c) 1985 - 2022, American Megatrends International LLC.<BR>

   SPDX-License-Identifier: BSD-2-Clause-Patent



 **/

@@ -3586,6 +3587,71 @@ TABLE_ITEM  ProcessorArchitectureTypesTable[] = {
   }

 };



+TABLE_ITEM  FirmwareVersionFormatTable[] = {

+  {

+    VersionFormatTypeFreeForm,

+    L" Free Form "

+  },

+  {

+    VersionFormatTypeMajorMinor,

+    L" MAJOR.MINOR "

+  },

+  {

+    VersionFormatType32BitHex,

+    L" 32-bit Numeric in Hex "

+  },

+  {

+    VersionFormatType64BitHex,

+    L" 64-bit Numeric in Hex "

+  }

+};

+

+TABLE_ITEM  FirmwareIdFormatTable[] = {

+  {

+    FirmwareIdFormatTypeFreeForm,

+    L" Free Form "

+  },

+  {

+    FirmwareIdFormatTypeUuid,

+    L" UUID "

+  }

+};

+

+TABLE_ITEM  FirmwareStateTable[] = {

+  {

+    FirmwareInventoryStateOther,

+    L" Other "

+  },

+  {

+    FirmwareInventoryStateUnknown,

+    L" Unknown "

+  },

+  {

+    FirmwareInventoryStateDisabled,

+    L" Disabled "

+  },

+  {

+    FirmwareInventoryStateEnabled,

+    L" Enabled "

+  },

+  {

+    FirmwareInventoryStateAbsent,

+    L" Absent "

+  },

+  {

+    FirmwareInventoryStateStandbyOffline,

+    L" Standby Offline "

+  },

+  {

+    FirmwareInventoryStateStandbySpare,

+    L" Standby Spare "

+  },

+  {

+    FirmwareInventoryStateUnavailableOffline,

+    L" Unavailable Offline "

+  }

+};

+

 TABLE_ITEM  StructureTypeInfoTable[] = {

   {

     0,

@@ -3767,6 +3833,10 @@ TABLE_ITEM  StructureTypeInfoTable[] = {
     44,

     L" Processor Additional Information"

   },

+  {

+    45,

+    L" Firmware Inventory Information"

+  },

   {

     0x7E,

     L" Inactive"

@@ -4002,7 +4072,7 @@ DisplaySystemEnclosureType (
   //

   // query table and print info

   //

-  PRINT_TABLE_ITEM (SystemEnclosureTypeTable, Type);

+  PRINT_TABLE_ITEM (SystemEnclosureTypeTable, (Type & ~BIT7));



   if (BIT (Type, 7) != 0) {

     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_QUERYTABLE_CHASSIS_LOCK_PRESENT), gShellDebug1HiiHandle);

@@ -5090,6 +5160,99 @@ DisplayProcessorArchitectureType (
   PRINT_TABLE_ITEM (ProcessorArchitectureTypesTable, Key);

 }



+/**

+  Display Firmware Version Format (Type 45).

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareVersionFormat (

+  IN UINT8  Key,

+  IN UINT8  Option

+  )

+{

+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_QUERYTABLE_FW_VERSION_FORMAT), gShellDebug1HiiHandle);

+    PRINT_INFO_OPTION (Key, Option);

+

+    if (Key <= VersionFormatType64BitHex) {

+        PRINT_TABLE_ITEM (FirmwareVersionFormatTable, Key);

+    } else if ((Key >= VersionFormatTypeReserved) && (Key < 
VersionFormatTypeOem)) {

+        ShellPrintEx (-1, -1, L" Reserved\n");

+    } else {

+        ShellPrintEx (-1, -1, L" BIOS Vendor / OEM-specific\n");

+    }

+}

+

+/**

+  Display Firmware ID Format (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareIdFormat (

+  IN UINT8  Key,

+  IN UINT8  Option

+  )

+{

+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_QUERYTABLE_FW_ID_FORMAT), gShellDebug1HiiHandle);

+    PRINT_INFO_OPTION (Key, Option);

+

+    if (Key <= FirmwareIdFormatTypeUuid) {

+        PRINT_TABLE_ITEM (FirmwareIdFormatTable, Key);

+    } else if ((Key >= FirmwareIdFormatTypeReserved) && (Key < 
InventoryFirmwareIdFormatTypeOem)) {

+        ShellPrintEx (-1, -1, L" Reserved\n");

+    } else {

+        ShellPrintEx (-1, -1, L" BIOS Vendor / OEM-specific\n");

+    }

+}

+

+/**

+  Display Firmware Inventory Characteristics (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareCharacteristics (

+  IN UINT16  Key,

+  IN UINT8   Option

+  )

+{

+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_PRINTINFO_FW_INVENTORY_CHAR), gShellDebug1HiiHandle);

+    PRINT_INFO_OPTION (Key, Option);

+

+    if (BIT (Key, 0) == 1) {

+        ShellPrintEx (-1, -1, L"Updatable\n");

+    } else {

+        ShellPrintEx (-1, -1, L"Not Updatable\n");

+    }

+

+    if (BIT (Key, 1) == 1) {

+        ShellPrintEx (-1, -1, L"Write Protected\n");

+    } else {

+        ShellPrintEx (-1, -1, L"Not Write Protected\n");

+    }

+}

+

+/**

+  Display Firmware State Information (Type 45)

+

+  @param[in] Key            The key of the structure.

+  @param[in] Option         The optional information.

+**/

+VOID

+DisplayFirmwareStateInformation (

+  IN UINT8  Key,

+  IN UINT8  Option

+  )

+{

+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_SMBIOSVIEW_QUERYTABLE_FW_STATE), gShellDebug1HiiHandle);

+    PRINT_INFO_OPTION (Key, Option);

+    PRINT_TABLE_ITEM (FirmwareStateTable, Key);

+}

+

 /**

   Display the structure type information.



diff --git 
a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
index 68211ce7ab..fc8ff317e6 100644
--- 
a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
+++ 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
@@ -3,6 +3,7 @@
 // Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>

 // (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR>

 // (C) Copyright 2015-2019 Hewlett Packard Enterprise Development LP<BR>

+// Copyright (c) 1985 - 2022, American Megatrends International LLC.<BR>

 // SPDX-License-Identifier: BSD-2-Clause-Patent

 //

 // Module Name:

@@ -504,4 +505,8 @@
 #string STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CONFIG_PLAT_SW      #language 
en-US "Family configurable via platform software support\r\n"

 #string STR_SMBIOSVIEW_PRINTINFO_TPM_DEVICE_CONFIG_OEM          #language 
en-US "Family configurable via OEM proprietary mechanism\r\n"

 #string STR_SMBIOSVIEW_PRINTINFO_BITS_06_63                     #language 
en-US "Bits 6:63 are reserved\r\n"

-

+#string STR_SMBIOSVIEW_PRINTINFO_FW_INVENTORY_CHAR              #language 
en-US "Firmware Characteristics: \r\n"

+#string STR_SMBIOSVIEW_PRINTINFO_FW_INVENTORY_HANDLE            #language 
en-US "Associated Component Handle %d: 0x%x\r\n"

+#string STR_SMBIOSVIEW_QUERYTABLE_FW_VERSION_FORMAT             #language 
en-US "Firmware Version Format:"

+#string STR_SMBIOSVIEW_QUERYTABLE_FW_ID_FORMAT                  #language 
en-US "Firmware ID Format:"

+#string STR_SMBIOSVIEW_QUERYTABLE_FW_STATE                      #language 
en-US "Firmware State:"

--
2.36.0.windows.1
-The information contained in this message may be confidential and proprietary 
to American Megatrends (AMI). This communication is intended to be read only by 
the individual or entity to whom it is addressed or by their designee. If the 
reader of this message is not the intended recipient, you are on notice that 
any distribution of this message, in any form, is strictly prohibited. Please 
promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and 
then delete or destroy all copies of the transmission.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#94535): https://edk2.groups.io/g/devel/message/94535
Mute This Topic: https://groups.io/mt/94007102/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to