]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01
authorRebecca Cran <rebecca@nuviainc.com>
Mon, 8 Feb 2021 00:52:48 +0000 (17:52 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 8 Feb 2021 19:35:23 +0000 (19:35 +0000)
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>
Reviewed-by: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturer.uni [new file with mode: 0644]
ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerData.c [new file with mode: 0644]
ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type01/MiscSystemManufacturerFunction.c [new file with mode: 0644]

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