]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Update the SMBIOS version by UPL
authorKasimX Liu <kasimx.liu@intel.com>
Fri, 5 Aug 2022 08:17:21 +0000 (16:17 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 15 Aug 2022 08:43:38 +0000 (08:43 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4013

For the SMBIOS version can be update by UPL,we create
the gUniversalPayloadSmbios3TableGuid HOB to store
the value then updated version.

Cc: Guo Dong <guo.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: James Lu <james.lu@intel.com>
Reviewed-by: Gua Guo <gua.guo@intel.com>
Signed-off-by: KasimX Liu <kasimx.liu@intel.com>
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.h

index 81df59cd0f8c7b8a92e1fe16d7fc753cdb847b1e..1d43adc7662c62bab7ff0512267959e44f7f44fc 100644 (file)
@@ -1447,7 +1447,9 @@ BOOLEAN
 IsValidSmbios20Table (\r
   IN  VOID   *TableEntry,\r
   OUT VOID   **TableAddress,\r
-  OUT UINTN  *TableMaximumSize\r
+  OUT UINTN  *TableMaximumSize,\r
+  OUT UINT8  *MajorVersion,\r
+  OUT UINT8  *MinorVersion\r
   )\r
 {\r
   UINT8                     Checksum;\r
@@ -1479,6 +1481,9 @@ IsValidSmbios20Table (
     return FALSE;\r
   }\r
 \r
+  *MajorVersion = SmbiosTable->MajorVersion;\r
+  *MinorVersion = SmbiosTable->MinorVersion;\r
+\r
   //\r
   // The whole struct check sum should be zero\r
   //\r
@@ -1522,7 +1527,9 @@ BOOLEAN
 IsValidSmbios30Table (\r
   IN  VOID   *TableEntry,\r
   OUT VOID   **TableAddress,\r
-  OUT UINTN  *TableMaximumSize\r
+  OUT UINTN  *TableMaximumSize,\r
+  OUT UINT8  *MajorVersion,\r
+  OUT UINT8  *MinorVersion\r
   )\r
 {\r
   UINT8                         Checksum;\r
@@ -1542,6 +1549,9 @@ IsValidSmbios30Table (
     return FALSE;\r
   }\r
 \r
+  *MajorVersion = SmbiosTable->MajorVersion;\r
+  *MinorVersion = SmbiosTable->MinorVersion;\r
+\r
   //\r
   // The whole struct check sum should be zero\r
   //\r
@@ -1575,7 +1585,9 @@ EFI_STATUS
 ParseAndAddExistingSmbiosTable (\r
   IN EFI_HANDLE                ImageHandle,\r
   IN SMBIOS_STRUCTURE_POINTER  Smbios,\r
-  IN UINTN                     Length\r
+  IN UINTN                     Length,\r
+  IN UINT8                     MajorVersion,\r
+  IN UINT8                     MinorVersion\r
   )\r
 {\r
   EFI_STATUS                Status;\r
@@ -1583,6 +1595,9 @@ ParseAndAddExistingSmbiosTable (
   EFI_SMBIOS_HANDLE         SmbiosHandle;\r
   SMBIOS_STRUCTURE_POINTER  SmbiosEnd;\r
 \r
+  mPrivateData.Smbios.MajorVersion = MajorVersion;\r
+  mPrivateData.Smbios.MinorVersion = MinorVersion;\r
+\r
   SmbiosEnd.Raw = Smbios.Raw + Length;\r
 \r
   if ((Smbios.Raw >= SmbiosEnd.Raw) || (Smbios.Raw == NULL)) {\r
@@ -1692,9 +1707,14 @@ RetrieveSmbiosFromHob (
   UNIVERSAL_PAYLOAD_GENERIC_HEADER  *GenericHeader;\r
   VOID                              *TableAddress;\r
   UINTN                             TableMaximumSize;\r
+  UINT8                             MajorVersion;\r
+  UINT8                             MinorVersion;\r
 \r
   Status = EFI_NOT_FOUND;\r
 \r
+  MajorVersion = 0;\r
+  MinorVersion = 0;\r
+\r
   for (Index = 0; Index < ARRAY_SIZE (mIsSmbiosTableValid); Index++) {\r
     GuidHob = GetFirstGuidHob (mIsSmbiosTableValid[Index].Guid);\r
     if (GuidHob == NULL) {\r
@@ -1709,9 +1729,9 @@ RetrieveSmbiosFromHob (
         //\r
         SmBiosTableAdress = (UNIVERSAL_PAYLOAD_SMBIOS_TABLE *)GET_GUID_HOB_DATA (GuidHob);\r
         if (GenericHeader->Length >= UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_SMBIOS_TABLE, SmBiosEntryPoint)) {\r
-          if (mIsSmbiosTableValid[Index].IsValid ((VOID *)(UINTN)SmBiosTableAdress->SmBiosEntryPoint, &TableAddress, &TableMaximumSize)) {\r
+          if (mIsSmbiosTableValid[Index].IsValid ((VOID *)(UINTN)SmBiosTableAdress->SmBiosEntryPoint, &TableAddress, &TableMaximumSize, &MajorVersion, &MinorVersion)) {\r
             Smbios.Raw = TableAddress;\r
-            Status     = ParseAndAddExistingSmbiosTable (ImageHandle, Smbios, TableMaximumSize);\r
+            Status     = ParseAndAddExistingSmbiosTable (ImageHandle, Smbios, TableMaximumSize, MajorVersion, MinorVersion);\r
             if (EFI_ERROR (Status)) {\r
               DEBUG ((DEBUG_ERROR, "RetrieveSmbiosFromHob: Failed to parse preinstalled tables from Guid Hob\n"));\r
               Status = EFI_UNSUPPORTED;\r
index 019798ea777011b5af1390b895dde4ac9e5c0153..f1500beabdb8dd508540cd23607b06f25ff203dc 100644 (file)
@@ -136,7 +136,9 @@ BOOLEAN
 IsValidSmbios30Table (\r
   IN  VOID   *TableEntry,\r
   OUT VOID   **TableAddress,\r
-  OUT UINTN  *TableMaximumSize\r
+  OUT UINTN  *TableMaximumSize,\r
+  OUT UINT8  *MajorVersion,\r
+  OUT UINT8  *MinorVersion\r
   );\r
 \r
 /**\r
@@ -155,7 +157,9 @@ BOOLEAN
 IsValidSmbios20Table (\r
   IN  VOID   *TableEntry,\r
   OUT VOID   **TableAddress,\r
-  OUT UINTN  *TableMaximumSize\r
+  OUT UINTN  *TableMaximumSize,\r
+  OUT UINT8  *MajorVersion,\r
+  OUT UINT8  *MinorVersion\r
   );\r
 \r
 /**\r
@@ -174,7 +178,9 @@ BOOLEAN
 (*IS_SMBIOS_TABLE_VALID) (\r
   IN  VOID   *TableEntry,\r
   OUT VOID   **TableAddress,\r
-  OUT UINTN  *TableMaximumSize\r
+  OUT UINTN  *TableMaximumSize,\r
+  OUT UINT8  *MajorVersion,\r
+  OUT UINT8  *MinorVersion\r
   );\r
 typedef struct {\r
   EFI_GUID                 *Guid;\r