Re: [PATCH] ShellPkg: Update smbiosview type 9 with SMBIOS 3.5 fields


Zeng, Star
 

Personally, you'd better to split this one patch to two, one is for MdePkg and another is for ShellPkg.
Also cc MdePkg and ShellPkg maintainers.


Thanks,
Star

-----Original Message-----
From: Ke, Bo-ChangX <bo-changx.ke@...>
Sent: Friday, April 8, 2022 1:55 PM
To: devel@edk2.groups.io
Cc: Bi, Dandan <dandan.bi@...>; Zeng, Star <star.zeng@...>
Subject: [PATCH] ShellPkg: Update smbiosview type 9 with SMBIOS 3.5 fields

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3896

update smbiosview type 9 related fileds.

Signed-off-by: Bo Chang Ke <bo-changx.ke@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Star Zeng <star.zeng@...>
---
MdePkg/Include/IndustryStandard/SmBios.h | 50 +++-
.../SmbiosView/PrintInfo.c | 11 +-
.../SmbiosView/QueryTable.c | 238 ++++++++++++++++++
.../SmbiosView/QueryTable.h | 36 +++
.../SmbiosView/SmbiosViewStrings.uni | 5 +-
5 files changed, 334 insertions(+), 6 deletions(-)

diff --git a/MdePkg/Include/IndustryStandard/SmBios.h b/MdePkg/Include/IndustryStandard/SmBios.h
index 2b1567b052..cb39470c92 100644
--- a/MdePkg/Include/IndustryStandard/SmBios.h
+++ b/MdePkg/Include/IndustryStandard/SmBios.h
@@ -1306,6 +1306,11 @@ typedef enum {
SlotTypePciExpressMini52pinWithBSKO = 0x21, ///< PCI Express Mini 52-pin (CEM spec. 2.0) with bottom-side keep-outs.
SlotTypePciExpressMini52pinWithoutBSKO = 0x22, ///< PCI Express Mini 52-pin (CEM spec. 2.0) without bottom-side keep-outs.
SlotTypePciExpressMini76pin = 0x23, ///< PCI Express Mini 76-pin (CEM spec. 2.0) Corresponds to Display-Mini card.
+ SlotTypePCIExpressGen4SFF_8639 = 0x24, ///< U.2
+ SlotTypePCIExpressGen5SFF_8639 = 0x25, ///< U.2
+ SlotTypeOCPNIC30SmallFormFactor = 0x26, ///< SFF
+ SlotTypeOCPNIC30LargeFormFactor = 0x27, ///< LFF
+ SlotTypeOCPNICPriorto30 = 0x28,
SlotTypeCXLFlexbus10 = 0x30,
SlotTypePC98C20 = 0xA0,
SlotTypePC98C24 = 0xA1,
@@ -1335,7 +1340,17 @@ typedef enum {
SlotTypePciExpressGen4X2 = 0xBA,
SlotTypePciExpressGen4X4 = 0xBB,
SlotTypePciExpressGen4X8 = 0xBC,
- SlotTypePciExpressGen4X16 = 0xBD
+ SlotTypePciExpressGen4X16 = 0xBD,
+ SlotTypePCIExpressGen5 = 0xBE,
+ SlotTypePCIExpressGen5X1 = 0xBF,
+ SlotTypePCIExpressGen5X2 = 0xC0,
+ SlotTypePCIExpressGen5X4 = 0xC1,
+ SlotTypePCIExpressGen5X8 = 0xC2,
+ SlotTypePCIExpressGen5X16 = 0xC3,
+ SlotTypePCIExpressGen6andBeyond = 0xC4,
+ SlotTypeEnterpriseandDatacenter1UE1FormFactorSlot = 0xC5,
+ SlotTypeEnterpriseandDatacenter3E3FormFactorSlot = 0xC6
+
} MISC_SLOT_TYPE;

///
@@ -1358,6 +1373,39 @@ typedef enum {
SlotDataBusWidth32X = 0x0E ///< Or X32
} MISC_SLOT_DATA_BUS_WIDTH;

+///
+/// System Slots - Slot Physical Width.
+///
+typedef enum {
+ SlotPhysicalWidthOther = 0x01,
+ SlotPhysicalWidthUnknown = 0x02,
+ SlotPhysicalWidth8Bit = 0x03,
+ SlotPhysicalWidth16Bit = 0x04,
+ SlotPhysicalWidth32Bit = 0x05,
+ SlotPhysicalWidth64Bit = 0x06,
+ SlotPhysicalWidth128Bit = 0x07,
+ SlotPhysicalWidth1X = 0x08, ///< Or X1
+ SlotPhysicalWidth2X = 0x09, ///< Or X2
+ SlotPhysicalWidth4X = 0x0A, ///< Or X4
+ SlotPhysicalWidth8X = 0x0B, ///< Or X8
+ SlotPhysicalWidth12X = 0x0C, ///< Or X12
+ SlotPhysicalWidth16X = 0x0D, ///< Or X16
+ SlotPhysicalWidth32X = 0x0E ///< Or X32
+} MISC_SLOT_PHYSICAL_WIDTH;
+
+///
+/// System Slots - Slot Information.
+///
+typedef enum{
+ others = 0x00,
+ Gen1 = 0x01,
+ Gen2 = 0x01,
+ Gen3 = 0x03,
+ Gen4 = 0x04,
+ Gen5 = 0x05,
+ Gen6 = 0x06
+}MISC_SLOT_INFORMATION;
+
///
/// System Slots - Current Usage.
///
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
index b144600a25..0fa40dbe0c 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
@@ -637,6 +637,13 @@ SmbiosPrintStructure (
}
}
}
+ if (AE_SMBIOS_VERSION (0x3, 0x2)) {
+ if (Struct->Hdr->Length > 0x12) {
+ DisplaySystemSlotHeight(Struct->Type9->SlotHeight, Option);
+ DisplaySystemSlotPhysicalWidth(Struct->Type9->SlotPhysicalWidth, Option);
+ DisplaySystemSlotInformation(Struct->Type9->SlotInformation, Option);
+ }
+ }

break;
}
@@ -2898,10 +2905,6 @@ DisplaySystemSlotId (
IN UINT8 Option
)
{
- //
- // Display slot type first
- //
- DisplaySystemSlotType (SlotType, Option);

ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SLOT_ID), gShellDebug1HiiHandle);
//
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c
index c4a6acb167..96e0e4036a 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.
+++ c
@@ -1447,6 +1447,27 @@ TABLE_ITEM SystemSlotTypeTable[] = {
0x23,
L"PCI Express Mini 76-pin (CEM spec. 2.0) Corresponds to Display-Mini card"
},
+ {
+ 0x24,
+ L"PCI Express Gen 4 SFF-8639 (U.2)"
+ },
+ {
+ 0x25,
+ L"PCI Express Gen 5 SFF-8639 (U.2)"
+ },
+ {
+ 0x26,
+ L"OCP NIC 3.0 Small Form Factor (SFF)"
+ },
+ {
+ 0x27,
+ L"OCP NIC 3.0 Large Form Factor (LFF)"
+ },
+ {
+ 0x28,
+ L"OCP NIC Prior to 3.0"
+ },
+
{
SlotTypeCXLFlexbus10,
L"CXL Flexbus 1.0"
@@ -1566,6 +1587,42 @@ TABLE_ITEM SystemSlotTypeTable[] = {
{
SlotTypePciExpressGen4X16,
L"PCI Express Gen 4 X16"
+ },
+ {
+ SlotTypePCIExpressGen5,
+ L"PCI Express Gen 5"
+ },
+ {
+ SlotTypePCIExpressGen5X1,
+ L"PCI Express Gen 5 x1"
+ },
+ {
+ SlotTypePCIExpressGen5X2,
+ L"PCI Express Gen 5 x2"
+ },
+ {
+ SlotTypePCIExpressGen5X4,
+ L"PCI Express Gen 5 x4"
+ },
+ {
+ SlotTypePCIExpressGen5X8,
+ L"PCI Express Gen 5 x8"
+ },
+ {
+ SlotTypePCIExpressGen5X16,
+ L"PCI Express Gen 5 x16"
+ },
+ {
+ SlotTypePCIExpressGen6andBeyond,
+ L"PCI Express Gen 6 and Beyond"
+ },
+ {
+ SlotTypeEnterpriseandDatacenter1UE1FormFactorSlot,
+ L"Enterprise and Datacenter 1U E1 Form Factor Slot"
+ },
+ {
+ SlotTypeEnterpriseandDatacenter3E3FormFactorSlot,
+ L"Enterprise and Datacenter 3'E3 Form Factor Slot"
}
};

@@ -1628,6 +1685,96 @@ TABLE_ITEM SystemSlotDataBusWidthTable[] = {
}
};

+TABLE_ITEM SystemSlotPhysicalWidthTable[] = {
+ {
+ 0x01,
+ L" Other"
+ },
+ {
+ 0x02,
+ L" Unknown"
+ },
+ {
+ 0x03,
+ L" 8 bit"
+ },
+ {
+ 0x04,
+ L" 16 bit"
+ },
+ {
+ 0x05,
+ L" 32 bit"
+ },
+ {
+ 0x06,
+ L" 64 bit"
+ },
+ {
+ 0x07,
+ L" 128 bit"
+ },
+ {
+ 0x08,
+ L" 1x or x1"
+ },
+ {
+ 0x09,
+ L" 2x or x2"
+ },
+ {
+ 0x0A,
+ L" 4x or x4"
+ },
+ {
+ 0x0B,
+ L" 8x or x8"
+ },
+ {
+ 0x0C,
+ L" 12x or x12"
+ },
+ {
+ 0x0D,
+ L" 16x or x16"
+ },
+ {
+ 0x0E,
+ L" 32x or x32"
+ }
+};
+
+TABLE_ITEM SystemSlotInformationTable[] = {
+ {
+ 0x00,
+ L" Others"
+ },
+ {
+ 0x01,
+ L" Gen 1"
+ },
+ {
+ 0x02,
+ L" Gen 2"
+ },
+ {
+ 0x03,
+ L" Gen 3"
+ },
+ {
+ 0x04,
+ L" Gen 4"
+ },
+ {
+ 0x05,
+ L" Gen 5"
+ },
+ {
+ 0x06,
+ L" Gen 6"
+ }
+};
+
TABLE_ITEM SystemSlotCurrentUsageTable[] = {
{
0x01,
@@ -1670,6 +1817,30 @@ TABLE_ITEM SystemSlotLengthTable[] = {
},
};

+TABLE_ITEM SystemSlotHeightTable[] = {
+ {
+ 0x00,
+ L" Not applicable"
+ },
+ {
+ 0x01,
+ L" Other"
+ },
+ {
+ 0x02,
+ L" Unkown"
+ },
+ {
+ 0x03,
+ L" Full height"
+ },
+ {
+ 0x04,
+ L" Low-Profile"
+ },
+
+};
+
TABLE_ITEM SlotCharacteristics1Table[] = {
{
0,
@@ -1722,6 +1893,22 @@ TABLE_ITEM SlotCharacteristics2Table[] = {
{
3,
L" PCIe slot supports bifurcation"
+ },
+ {
+ 4,
+ L" Slot supports async/surprise removal"
+ },
+ {
+ 5,
+ L" Flexbus slot, CXL 1.0 capable"
+ },
+ {
+ 6,
+ L" Flexbus slot, CXL 2.0 capable"
+ },
+ {
+ 7,
+ L" Reserved"
}
};

@@ -4208,6 +4395,57 @@ DisplaySlotCharacteristics2 (
PRINT_BITS_INFO (SlotCharacteristics2Table, Chara2); }

+/**
+ Display System Slots (Type 9) Information.
+
+ @param[in] Width The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotInformation (
+ IN UINT8 Width,
+ IN UINT8 Option
+ )
+{
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
+(STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_INFORMATION),
+gShellDebug1HiiHandle);
+ PRINT_INFO_OPTION (Width, Option);
+ PRINT_TABLE_ITEM (SystemSlotInformationTable, Width); }
+
+/**
+ Display System Slots (Type 9) Physical Width.
+
+ @param[in] Width The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotPhysicalWidth (
+ IN UINT8 Width,
+ IN UINT8 Option
+ )
+{
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
+(STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_PHYSICAL_WIDTH),
+gShellDebug1HiiHandle);
+ PRINT_INFO_OPTION (Width, Option);
+ PRINT_TABLE_ITEM (SystemSlotPhysicalWidthTable, Width); }
+
+/**
+ Display System Slots (Type 9) slot height.
+
+ @param[in] Length The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotHeight (
+ IN UINT8 Length,
+ IN UINT8 Option
+ )
+{
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
+(STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_HEIGHT), gShellDebug1HiiHandle);
+ PRINT_INFO_OPTION (Length, Option);
+ PRINT_TABLE_ITEM (SystemSlotHeightTable, Length); }
+
/**
Display On Board Devices Information (Type 10) types.

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.h b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.h
index 5111d35f63..5f062762b3 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.h
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/QueryTable.
+++ h
@@ -415,6 +415,42 @@ DisplaySlotCharacteristics2 (
IN UINT8 Option
);

+/**
+ Display System Slots (Type 9) Information.
+
+ @param[in] Width The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotInformation (
+ IN UINT8 Width,
+ IN UINT8 Option
+ );
+
+/**
+ Display System Slots (Type 9) Physical Width.
+
+ @param[in] Width The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotPhysicalWidth (
+ IN UINT8 Width,
+ IN UINT8 Option
+ );
+
+/**
+ Display System Slots (Type 9) slot height.
+
+ @param[in] Length The key of the structure.
+ @param[in] Option The optional information.
+**/
+VOID
+DisplaySystemSlotHeight (
+ IN UINT8 Length,
+ IN UINT8 Option
+ );
+
/**
Display On Board Devices Information (Type 10) types.

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
index 9433e8a25f..a8728d6abc 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewS
+++ trings.uni
@@ -294,7 +294,7 @@
#string STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE #language en-US " Memory Size: %d MB\r\n"
#string STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_DOUBLE_BANK #language en-US "The memory module has a Double-bank connection\r\n"
#string STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_SINGLE_BANK #language en-US "The memory module has a Single-bank connection\r\n"
-#string STR_SMBIOSVIEW_PRINTINFO_SLOT_ID #language en-US " Slot Id:"
+#string STR_SMBIOSVIEW_PRINTINFO_SLOT_ID #language en-US "Slot Id:"
#string STR_SMBIOSVIEW_PRINTINFO_LOGICAL_MICRO_CHAN #language en-US " the logical Micro Channel slot number is:"
#string STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D #language en-US " %d\r\n"
#string STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15 #language en-US " error, not 1-15.\r\n"
@@ -412,6 +412,9 @@
#string STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_LENGTH #language en-US "System Slot Length: "
#string STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS #language en-US "Slot characteristics 1: "
#string STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS_2 #language en-US "Slot characteristics 2: "
+#string STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_INFORMATION #language en-US "System Slot Information: "
+#string STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_HEIGHT #language en-US "System Slot Height: "
+#string STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_PHYSICAL_WIDTH #language en-US "System Slot Physical Width: "
#string STR_SMBIOSVIEW_QUERYTABLE_ONBOARD_DEVICE_TYPE #language en-US "Onboard Device Type: "
#string STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_EVENT_LOG_TYPE #language en-US "System Event Log Type: "
#string STR_SMBIOSVIEW_QUERYTABLE_EVENT_LOG_VAR_DATA_FORMAT #language en-US "Event Log Variable Data Format Types: "
--
2.32.0.windows.1

Join devel@edk2.groups.io to automatically receive all group messages.