[edk2-devel] [PATCH v6 16/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01

Rebecca Cran posted 22 patches 3 years, 10 months ago
There is a newer version of this series
[edk2-devel] [PATCH v6 16/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01
Posted by Rebecca Cran 3 years, 10 months ago
This code provides information for the SMBIOS Type 1 table.

Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
---
 ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c     |  36 ++++
 ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c | 196 ++++++++++++++++++++
 ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni       |  20 ++
 3 files changed, 252 insertions(+)

diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c
new file mode 100644
index 000000000000..c03b133690ce
--- /dev/null
+++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c
@@ -0,0 +1,36 @@
+/** @file
+  This file provides Smbios Type1 Data
+
+  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
+
+  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
+  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
+  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "SmbiosMisc.h"
+
+
+//
+// Static (possibly build generated) System Manufacturer data.
+//
+SMBIOS_MISC_TABLE_DATA(SMBIOS_TABLE_TYPE1, MiscSystemManufacturer) = {
+  {                                               // Hdr
+    EFI_SMBIOS_TYPE_SYSTEM_INFORMATION,             // Type,
+    0,                                              // Length,
+    0                                               // Handle
+  },
+  1,                                              // Manufacturer
+  2,                                              // ProductName
+  3,                                              // Version
+  4,                                              // SerialNumber
+  {                                               // Uuid
+    0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+  },
+  SystemWakeupTypePowerSwitch,                    // SystemWakeupType
+  5,                                              // SKUNumber,
+  6                                               // Family
+};
diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c
new file mode 100644
index 000000000000..2c69c2593f5d
--- /dev/null
+++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c
@@ -0,0 +1,196 @@
+/** @file
+  This driver parses the mMiscSubclassDataTable structure and reports
+  any generated data to smbios.
+
+  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
+
+  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
+  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
+  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HiiLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/OemMiscLib.h>
+#include <Library/PrintLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include "SmbiosMisc.h"
+
+/**
+  This function makes boot time changes to the contents of the
+  MiscSystemManufacturer (Type 1) record.
+
+  @param  RecordData                 Pointer to SMBIOS table with default values.
+  @param  Smbios                     SMBIOS protocol.
+
+  @retval EFI_SUCCESS                The SMBIOS table was successfully added.
+  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
+  @retval EFI_OUT_OF_RESOURCES       Failed to allocate required memory.
+
+**/
+SMBIOS_MISC_TABLE_FUNCTION(MiscSystemManufacturer)
+{
+  CHAR8                           *OptionalStrStart;
+  CHAR8                           *StrStart;
+  UINTN                           ManuStrLen;
+  UINTN                           VerStrLen;
+  UINTN                           PdNameStrLen;
+  UINTN                           SerialNumStrLen;
+  UINTN                           SKUNumStrLen;
+  UINTN                           FamilyStrLen;
+  UINTN                           RecordLength;
+  EFI_STRING                      Manufacturer;
+  EFI_STRING                      ProductName;
+  EFI_STRING                      Version;
+  EFI_STRING                      SerialNumber;
+  EFI_STRING                      SKUNumber;
+  EFI_STRING                      Family;
+  EFI_STRING_ID                   TokenToGet;
+  SMBIOS_TABLE_TYPE1              *SmbiosRecord;
+  SMBIOS_TABLE_TYPE1              *InputData;
+  EFI_STATUS                      Status;
+  EFI_STRING_ID                   TokenToUpdate;
+  CHAR16                          *Product;
+  CHAR16                          *pVersion;
+
+  Status = EFI_SUCCESS;
+
+  //
+  // First check for invalid parameters.
+  //
+  if (RecordData == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
+
+  InputData = (SMBIOS_TABLE_TYPE1 *)RecordData;
+
+  Product = (CHAR16 *) PcdGetPtr (PcdSystemProductName);
+  if (StrLen (Product) > 0) {
+    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
+    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Product, NULL);
+  }
+
+  pVersion = (CHAR16 *) PcdGetPtr (PcdSystemVersion);
+  if (StrLen (pVersion) > 0) {
+    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
+    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, pVersion, NULL);
+  }
+
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
+                       STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER),
+                       SerialNumType01);
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
+                       STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER),
+                       SystemManufacturerType01);
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
+                       STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER),
+                       SkuNumberType01);
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
+                       STRING_TOKEN (STR_MISC_SYSTEM_FAMILY),
+                       FamilyType01);
+
+  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER);
+  Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  ManuStrLen   = StrLen (Manufacturer);
+
+  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
+  ProductName  = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  PdNameStrLen = StrLen (ProductName);
+
+  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
+  Version    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  VerStrLen  = StrLen (Version);
+
+  TokenToGet      = STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER);
+  SerialNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  SerialNumStrLen = StrLen (SerialNumber);
+
+  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER);
+  SKUNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  SKUNumStrLen = StrLen (SKUNumber);
+
+  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_FAMILY);
+  Family       = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
+  FamilyStrLen = StrLen (Family);
+
+  //
+  // Two zeros following the last string.
+  //
+  RecordLength = sizeof (SMBIOS_TABLE_TYPE1) +
+                 ManuStrLen      + 1 +
+                 PdNameStrLen    + 1 +
+                 VerStrLen       + 1 +
+                 SerialNumStrLen + 1 +
+                 SKUNumStrLen    + 1 +
+                 FamilyStrLen    + 1 + 1;
+  SmbiosRecord = AllocateZeroPool (RecordLength);
+
+  if (SmbiosRecord == NULL) {
+    Status = EFI_OUT_OF_RESOURCES;
+    goto Exit;
+  }
+
+  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE1));
+
+  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE1);
+
+  CopyGuid(&SmbiosRecord->Uuid, &InputData->Uuid);
+
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
+  UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);
+  StrStart = OptionalStrStart + ManuStrLen + 1;
+  UnicodeStrToAsciiStrS (ProductName,  StrStart, PdNameStrLen + 1);
+  StrStart += PdNameStrLen + 1;
+  UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);
+  StrStart += VerStrLen + 1;
+  UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
+  StrStart += SerialNumStrLen + 1;
+  UnicodeStrToAsciiStrS (SKUNumber, StrStart, SKUNumStrLen + 1);
+  StrStart += SKUNumStrLen + 1;
+  UnicodeStrToAsciiStrS (Family, StrStart, FamilyStrLen + 1);
+
+  //
+  // Now we have got the full smbios record, call smbios protocol to add this record.
+  //
+  Status = SmbiosMiscAddRecord ((UINT8*)SmbiosRecord, NULL);
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type01 Table Log Failed! %r \n",
+            __FUNCTION__, __LINE__, Status));
+  }
+
+  FreePool (SmbiosRecord);
+
+Exit:
+  if (Manufacturer != NULL) {
+    FreePool (Manufacturer);
+  }
+
+  if (ProductName != NULL) {
+    FreePool (ProductName);
+  }
+
+  if (Version != NULL) {
+    FreePool (Version);
+  }
+
+  if (SerialNumber != NULL) {
+    FreePool (SerialNumber);
+  }
+
+  if (SKUNumber != NULL) {
+    FreePool (SKUNumber);
+  }
+
+  if (Family != NULL) {
+    FreePool (Family);
+  }
+
+  return Status;
+}
diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni
new file mode 100644
index 000000000000..8038f0e4b0bf
--- /dev/null
+++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni
@@ -0,0 +1,20 @@
+/** @file
+  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
+
+  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
+  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
+  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/=#
+
+#string STR_MISC_SYSTEM_MANUFACTURER   #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_VERSION        #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_SERIAL_NUMBER  #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_SKU_NUMBER     #language en-US  "Not Specified"
+#string STR_MISC_SYSTEM_FAMILY         #language en-US  "Not Specified"
-- 
2.26.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70311): https://edk2.groups.io/g/devel/message/70311
Mute This Topic: https://groups.io/mt/79679261/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v6 16/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01
Posted by Samer El-Haj-Mahmoud 3 years, 10 months ago
Reviewed-by: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Rebecca
> Cran via groups.io
> Sent: Thursday, January 14, 2021 11:36 AM
> To: devel@edk2.groups.io
> Cc: Rebecca Cran <rebecca@nuviainc.com>; Leif Lindholm
> <leif@nuviainc.com>; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; nd
> <nd@arm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Michael D Kinney
> <michael.d.kinney@intel.com>; Zhiguang Liu <zhiguang.liu@intel.com>
> Subject: [edk2-devel] [PATCH v6 16/22] ArmPkg: Add
> Universal/Smbios/SmbiosMiscDxe/Type01
> 
> This code provides information for the SMBIOS Type 1 table.
> 
> Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
> ---
> 
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerDa
> ta.c     |  36 ++++
> 
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFu
> nction.c | 196 ++++++++++++++++++++
> 
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.un
> i       |  20 ++
>  3 files changed, 252 insertions(+)
> 
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer
> Data.c
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer
> Data.c
> new file mode 100644
> index 000000000000..c03b133690ce
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacture
> +++ rData.c
> @@ -0,0 +1,36 @@
> +/** @file
> +  This file provides Smbios Type1 Data
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>  Copyright
> + (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> + Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include "SmbiosMisc.h"
> +
> +
> +//
> +// Static (possibly build generated) System Manufacturer data.
> +//
> +SMBIOS_MISC_TABLE_DATA(SMBIOS_TABLE_TYPE1,
> MiscSystemManufacturer) = {
> +  {                                               // Hdr
> +    EFI_SMBIOS_TYPE_SYSTEM_INFORMATION,             // Type,
> +    0,                                              // Length,
> +    0                                               // Handle
> +  },
> +  1,                                              // Manufacturer
> +  2,                                              // ProductName
> +  3,                                              // Version
> +  4,                                              // SerialNumber
> +  {                                               // Uuid
> +    0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +0x00, 0x00}
> +  },
> +  SystemWakeupTypePowerSwitch,                    // SystemWakeupType
> +  5,                                              // SKUNumber,
> +  6                                               // Family
> +};
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer
> Function.c
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer
> Function.c
> new file mode 100644
> index 000000000000..2c69c2593f5d
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacture
> +++ rFunction.c
> @@ -0,0 +1,196 @@
> +/** @file
> +  This driver parses the mMiscSubclassDataTable structure and reports
> +  any generated data to smbios.
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>  Copyright
> + (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> + Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/HiiLib.h>
> +#include <Library/MemoryAllocationLib.h> #include
> +<Library/OemMiscLib.h> #include <Library/PrintLib.h> #include
> +<Library/UefiBootServicesTableLib.h>
> +
> +#include "SmbiosMisc.h"
> +
> +/**
> +  This function makes boot time changes to the contents of the
> +  MiscSystemManufacturer (Type 1) record.
> +
> +  @param  RecordData                 Pointer to SMBIOS table with default values.
> +  @param  Smbios                     SMBIOS protocol.
> +
> +  @retval EFI_SUCCESS                The SMBIOS table was successfully added.
> +  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
> +  @retval EFI_OUT_OF_RESOURCES       Failed to allocate required memory.
> +
> +**/
> +SMBIOS_MISC_TABLE_FUNCTION(MiscSystemManufacturer)
> +{
> +  CHAR8                           *OptionalStrStart;
> +  CHAR8                           *StrStart;
> +  UINTN                           ManuStrLen;
> +  UINTN                           VerStrLen;
> +  UINTN                           PdNameStrLen;
> +  UINTN                           SerialNumStrLen;
> +  UINTN                           SKUNumStrLen;
> +  UINTN                           FamilyStrLen;
> +  UINTN                           RecordLength;
> +  EFI_STRING                      Manufacturer;
> +  EFI_STRING                      ProductName;
> +  EFI_STRING                      Version;
> +  EFI_STRING                      SerialNumber;
> +  EFI_STRING                      SKUNumber;
> +  EFI_STRING                      Family;
> +  EFI_STRING_ID                   TokenToGet;
> +  SMBIOS_TABLE_TYPE1              *SmbiosRecord;
> +  SMBIOS_TABLE_TYPE1              *InputData;
> +  EFI_STATUS                      Status;
> +  EFI_STRING_ID                   TokenToUpdate;
> +  CHAR16                          *Product;
> +  CHAR16                          *pVersion;
> +
> +  Status = EFI_SUCCESS;
> +
> +  //
> +  // First check for invalid parameters.
> +  //
> +  if (RecordData == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  InputData = (SMBIOS_TABLE_TYPE1 *)RecordData;
> +
> +  Product = (CHAR16 *) PcdGetPtr (PcdSystemProductName);  if (StrLen
> + (Product) > 0) {
> +    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
> +    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Product, NULL);
> + }
> +
> +  pVersion = (CHAR16 *) PcdGetPtr (PcdSystemVersion);  if (StrLen
> + (pVersion) > 0) {
> +    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
> +    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, pVersion, NULL);
> + }
> +
> +  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER),
> +                       SerialNumType01);  OemUpdateSmbiosInfo
> + (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER),
> +                       SystemManufacturerType01);  OemUpdateSmbiosInfo
> + (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER),
> +                       SkuNumberType01);  OemUpdateSmbiosInfo
> + (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_FAMILY),
> +                       FamilyType01);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER);
> +  Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  ManuStrLen   = StrLen (Manufacturer);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
> +  ProductName  = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet,
> + NULL);  PdNameStrLen = StrLen (ProductName);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
> +  Version    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  VerStrLen  = StrLen (Version);
> +
> +  TokenToGet      = STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER);
> +  SerialNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet,
> NULL);
> +  SerialNumStrLen = StrLen (SerialNumber);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER);
> +  SKUNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  SKUNumStrLen = StrLen (SKUNumber);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_FAMILY);
> +  Family       = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  FamilyStrLen = StrLen (Family);
> +
> +  //
> +  // Two zeros following the last string.
> +  //
> +  RecordLength = sizeof (SMBIOS_TABLE_TYPE1) +
> +                 ManuStrLen      + 1 +
> +                 PdNameStrLen    + 1 +
> +                 VerStrLen       + 1 +
> +                 SerialNumStrLen + 1 +
> +                 SKUNumStrLen    + 1 +
> +                 FamilyStrLen    + 1 + 1;
> +  SmbiosRecord = AllocateZeroPool (RecordLength);
> +
> +  if (SmbiosRecord == NULL) {
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto Exit;
> +  }
> +
> +  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE1));
> +
> +  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE1);
> +
> +  CopyGuid(&SmbiosRecord->Uuid, &InputData->Uuid);
> +
> +  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
> + UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen +
> + 1);  StrStart = OptionalStrStart + ManuStrLen + 1;
> + UnicodeStrToAsciiStrS (ProductName,  StrStart, PdNameStrLen + 1);
> + StrStart += PdNameStrLen + 1;  UnicodeStrToAsciiStrS (Version,
> + StrStart, VerStrLen + 1);  StrStart += VerStrLen + 1;
> + UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
> + StrStart += SerialNumStrLen + 1;  UnicodeStrToAsciiStrS (SKUNumber,
> + StrStart, SKUNumStrLen + 1);  StrStart += SKUNumStrLen + 1;
> + UnicodeStrToAsciiStrS (Family, StrStart, FamilyStrLen + 1);
> +
> +  //
> +  // Now we have got the full smbios record, call smbios protocol to add this
> record.
> +  //
> +  Status = SmbiosMiscAddRecord ((UINT8*)SmbiosRecord, NULL);  if
> + (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type01 Table Log Failed! %r
> \n",
> +            __FUNCTION__, __LINE__, Status));  }
> +
> +  FreePool (SmbiosRecord);
> +
> +Exit:
> +  if (Manufacturer != NULL) {
> +    FreePool (Manufacturer);
> +  }
> +
> +  if (ProductName != NULL) {
> +    FreePool (ProductName);
> +  }
> +
> +  if (Version != NULL) {
> +    FreePool (Version);
> +  }
> +
> +  if (SerialNumber != NULL) {
> +    FreePool (SerialNumber);
> +  }
> +
> +  if (SKUNumber != NULL) {
> +    FreePool (SKUNumber);
> +  }
> +
> +  if (Family != NULL) {
> +    FreePool (Family);
> +  }
> +
> +  return Status;
> +}
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.
> uni
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.
> uni
> new file mode 100644
> index 000000000000..8038f0e4b0bf
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacture
> +++ r.uni
> @@ -0,0 +1,20 @@
> +/** @file
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>  Copyright
> + (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> + Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +
> +#string STR_MISC_SYSTEM_MANUFACTURER   #language en-US  "Not
> Specified"
> +#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not
> Specified"
> +#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not
> Specified"
> +#string STR_MISC_SYSTEM_VERSION        #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_SERIAL_NUMBER  #language en-US  "Not
> Specified"
> +#string STR_MISC_SYSTEM_SKU_NUMBER     #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_FAMILY         #language en-US  "Not Specified"
> --
> 2.26.2
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70458): https://edk2.groups.io/g/devel/message/70458
Mute This Topic: https://groups.io/mt/79679261/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v6 16/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01
Posted by Leif Lindholm 3 years, 10 months ago
On Thu, Jan 14, 2021 at 09:36:22 -0700, Rebecca Cran wrote:
> This code provides information for the SMBIOS Type 1 table.
> 
> Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>

Reviewed-by: Leif Lindholm <leif@nuviainc.com>

> ---
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c     |  36 ++++
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c | 196 ++++++++++++++++++++
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni       |  20 ++
>  3 files changed, 252 insertions(+)
> 
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c
> new file mode 100644
> index 000000000000..c03b133690ce
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c
> @@ -0,0 +1,36 @@
> +/** @file
> +  This file provides Smbios Type1 Data
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
> +  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> +  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include "SmbiosMisc.h"
> +
> +
> +//
> +// Static (possibly build generated) System Manufacturer data.
> +//
> +SMBIOS_MISC_TABLE_DATA(SMBIOS_TABLE_TYPE1, MiscSystemManufacturer) = {
> +  {                                               // Hdr
> +    EFI_SMBIOS_TYPE_SYSTEM_INFORMATION,             // Type,
> +    0,                                              // Length,
> +    0                                               // Handle
> +  },
> +  1,                                              // Manufacturer
> +  2,                                              // ProductName
> +  3,                                              // Version
> +  4,                                              // SerialNumber
> +  {                                               // Uuid
> +    0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
> +  },
> +  SystemWakeupTypePowerSwitch,                    // SystemWakeupType
> +  5,                                              // SKUNumber,
> +  6                                               // Family
> +};
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c
> new file mode 100644
> index 000000000000..2c69c2593f5d
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c
> @@ -0,0 +1,196 @@
> +/** @file
> +  This driver parses the mMiscSubclassDataTable structure and reports
> +  any generated data to smbios.
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
> +  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> +  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/HiiLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/OemMiscLib.h>
> +#include <Library/PrintLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +
> +#include "SmbiosMisc.h"
> +
> +/**
> +  This function makes boot time changes to the contents of the
> +  MiscSystemManufacturer (Type 1) record.
> +
> +  @param  RecordData                 Pointer to SMBIOS table with default values.
> +  @param  Smbios                     SMBIOS protocol.
> +
> +  @retval EFI_SUCCESS                The SMBIOS table was successfully added.
> +  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
> +  @retval EFI_OUT_OF_RESOURCES       Failed to allocate required memory.
> +
> +**/
> +SMBIOS_MISC_TABLE_FUNCTION(MiscSystemManufacturer)
> +{
> +  CHAR8                           *OptionalStrStart;
> +  CHAR8                           *StrStart;
> +  UINTN                           ManuStrLen;
> +  UINTN                           VerStrLen;
> +  UINTN                           PdNameStrLen;
> +  UINTN                           SerialNumStrLen;
> +  UINTN                           SKUNumStrLen;
> +  UINTN                           FamilyStrLen;
> +  UINTN                           RecordLength;
> +  EFI_STRING                      Manufacturer;
> +  EFI_STRING                      ProductName;
> +  EFI_STRING                      Version;
> +  EFI_STRING                      SerialNumber;
> +  EFI_STRING                      SKUNumber;
> +  EFI_STRING                      Family;
> +  EFI_STRING_ID                   TokenToGet;
> +  SMBIOS_TABLE_TYPE1              *SmbiosRecord;
> +  SMBIOS_TABLE_TYPE1              *InputData;
> +  EFI_STATUS                      Status;
> +  EFI_STRING_ID                   TokenToUpdate;
> +  CHAR16                          *Product;
> +  CHAR16                          *pVersion;
> +
> +  Status = EFI_SUCCESS;
> +
> +  //
> +  // First check for invalid parameters.
> +  //
> +  if (RecordData == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  InputData = (SMBIOS_TABLE_TYPE1 *)RecordData;
> +
> +  Product = (CHAR16 *) PcdGetPtr (PcdSystemProductName);
> +  if (StrLen (Product) > 0) {
> +    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
> +    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Product, NULL);
> +  }
> +
> +  pVersion = (CHAR16 *) PcdGetPtr (PcdSystemVersion);
> +  if (StrLen (pVersion) > 0) {
> +    TokenToUpdate = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
> +    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, pVersion, NULL);
> +  }
> +
> +  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER),
> +                       SerialNumType01);
> +  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER),
> +                       SystemManufacturerType01);
> +  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER),
> +                       SkuNumberType01);
> +  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,
> +                       STRING_TOKEN (STR_MISC_SYSTEM_FAMILY),
> +                       FamilyType01);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_MANUFACTURER);
> +  Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  ManuStrLen   = StrLen (Manufacturer);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_PRODUCT_NAME);
> +  ProductName  = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  PdNameStrLen = StrLen (ProductName);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_VERSION);
> +  Version    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  VerStrLen  = StrLen (Version);
> +
> +  TokenToGet      = STRING_TOKEN (STR_MISC_SYSTEM_SERIAL_NUMBER);
> +  SerialNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  SerialNumStrLen = StrLen (SerialNumber);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_SKU_NUMBER);
> +  SKUNumber    = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  SKUNumStrLen = StrLen (SKUNumber);
> +
> +  TokenToGet   = STRING_TOKEN (STR_MISC_SYSTEM_FAMILY);
> +  Family       = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  FamilyStrLen = StrLen (Family);
> +
> +  //
> +  // Two zeros following the last string.
> +  //
> +  RecordLength = sizeof (SMBIOS_TABLE_TYPE1) +
> +                 ManuStrLen      + 1 +
> +                 PdNameStrLen    + 1 +
> +                 VerStrLen       + 1 +
> +                 SerialNumStrLen + 1 +
> +                 SKUNumStrLen    + 1 +
> +                 FamilyStrLen    + 1 + 1;
> +  SmbiosRecord = AllocateZeroPool (RecordLength);
> +
> +  if (SmbiosRecord == NULL) {
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto Exit;
> +  }
> +
> +  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE1));
> +
> +  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE1);
> +
> +  CopyGuid(&SmbiosRecord->Uuid, &InputData->Uuid);
> +
> +  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
> +  UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);
> +  StrStart = OptionalStrStart + ManuStrLen + 1;
> +  UnicodeStrToAsciiStrS (ProductName,  StrStart, PdNameStrLen + 1);
> +  StrStart += PdNameStrLen + 1;
> +  UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);
> +  StrStart += VerStrLen + 1;
> +  UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
> +  StrStart += SerialNumStrLen + 1;
> +  UnicodeStrToAsciiStrS (SKUNumber, StrStart, SKUNumStrLen + 1);
> +  StrStart += SKUNumStrLen + 1;
> +  UnicodeStrToAsciiStrS (Family, StrStart, FamilyStrLen + 1);
> +
> +  //
> +  // Now we have got the full smbios record, call smbios protocol to add this record.
> +  //
> +  Status = SmbiosMiscAddRecord ((UINT8*)SmbiosRecord, NULL);
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type01 Table Log Failed! %r \n",
> +            __FUNCTION__, __LINE__, Status));
> +  }
> +
> +  FreePool (SmbiosRecord);
> +
> +Exit:
> +  if (Manufacturer != NULL) {
> +    FreePool (Manufacturer);
> +  }
> +
> +  if (ProductName != NULL) {
> +    FreePool (ProductName);
> +  }
> +
> +  if (Version != NULL) {
> +    FreePool (Version);
> +  }
> +
> +  if (SerialNumber != NULL) {
> +    FreePool (SerialNumber);
> +  }
> +
> +  if (SKUNumber != NULL) {
> +    FreePool (SKUNumber);
> +  }
> +
> +  if (Family != NULL) {
> +    FreePool (Family);
> +  }
> +
> +  return Status;
> +}
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni
> new file mode 100644
> index 000000000000..8038f0e4b0bf
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni
> @@ -0,0 +1,20 @@
> +/** @file
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
> +  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
> +  Copyright (c) 2015, Linaro Limited. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +
> +#string STR_MISC_SYSTEM_MANUFACTURER   #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_PRODUCT_NAME   #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_VERSION        #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_SERIAL_NUMBER  #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_SKU_NUMBER     #language en-US  "Not Specified"
> +#string STR_MISC_SYSTEM_FAMILY         #language en-US  "Not Specified"
> -- 
> 2.26.2
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70731): https://edk2.groups.io/g/devel/message/70731
Mute This Topic: https://groups.io/mt/79679261/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-