]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type02
authorRebecca Cran <rebecca@nuviainc.com>
Mon, 8 Feb 2021 00:52:49 +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 2 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/Type02/MiscBaseBoardManufacturer.uni [new file with mode: 0644]
ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c [new file with mode: 0644]
ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c [new file with mode: 0644]

diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturer.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturer.uni
new file mode 100644 (file)
index 0000000..0f0fb1f
--- /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_BASE_BOARD_MANUFACTURER     #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_PRODUCT_NAME     #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_VERSION          #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_SERIAL_NUMBER    #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_ASSET_TAG        #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_CHASSIS_LOCATION #language en-US  "Not Specified"\r
+#string STR_MISC_BASE_BOARD_SKU_NUMBER       #language en-US  "Not Specified"\r
diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c
new file mode 100644 (file)
index 0000000..dfe1f2d
--- /dev/null
@@ -0,0 +1,46 @@
+/** @file\r
+\r
+  This file provide OEM to define Smbios Type2 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
+// Static (possibly build generated) Chassis Manufacturer data.\r
+//\r
+SMBIOS_MISC_TABLE_DATA(SMBIOS_TABLE_TYPE2, MiscBaseBoardManufacturer) = {\r
+  {                                                       // Hdr\r
+    EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION,                // Type,\r
+    0,                                                    // Length,\r
+    0                                                     // Handle\r
+  },\r
+  1,                                                      // BaseBoardManufacturer\r
+  2,                                                      // BaseBoardProductName\r
+  3,                                                      // BaseBoardVersion\r
+  4,                                                      // BaseBoardSerialNumber\r
+  5,                                                      // BaseBoardAssetTag\r
+  {                                                       // FeatureFlag\r
+    1,                                                    // Motherboard           :1\r
+    0,                                                    // RequiresDaughterCard  :1\r
+    0,                                                    // Removable             :1\r
+    1,                                                    // Replaceable           :1\r
+    0,                                                    // HotSwappable          :1\r
+    0                                                     // Reserved              :3\r
+  },\r
+  6,                                                      // BaseBoardChassisLocation\r
+  0,                                                      // ChassisHandle;\r
+  BaseBoardTypeMotherBoard,                               // BoardType;\r
+  0,                                                      // NumberOfContainedObjectHandles;\r
+  {\r
+    0\r
+  }                                                       // ContainedObjectHandles[1];\r
+};\r
diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c
new file mode 100644 (file)
index 0000000..097777a
--- /dev/null
@@ -0,0 +1,230 @@
+/** @file\r
+  This driver parses the mSmbiosMiscDataTable structure and reports\r
+  any generated data using SMBIOS protocol.\r
+\r
+  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/\r
+\r
+  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 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
+/**\r
+  This function makes boot time changes to the contents of the\r
+  MiscBaseBoardManufacturer (Type 2) 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(MiscBaseBoardManufacturer)\r
+{\r
+  CHAR8                             *OptionalStrStart;\r
+  CHAR8                             *StrStart;\r
+  UINTN                             RecordLength;\r
+  UINTN                             ManuStrLen;\r
+  UINTN                             ProductNameStrLen;\r
+  UINTN                             VerStrLen;\r
+  UINTN                             SerialNumStrLen;\r
+  UINTN                             AssetTagStrLen;\r
+  UINTN                             ChassisLocaStrLen;\r
+  UINTN                             HandleCount;\r
+  UINT16                            *HandleArray;\r
+  CHAR16                            *BaseBoardManufacturer;\r
+  CHAR16                            *BaseBoardProductName;\r
+  CHAR16                            *Version;\r
+  EFI_STRING                        SerialNumber;\r
+  EFI_STRING                        AssetTag;\r
+  EFI_STRING                        ChassisLocation;\r
+  EFI_STRING_ID                     TokenToGet;\r
+  SMBIOS_TABLE_TYPE2                *SmbiosRecord;\r
+  SMBIOS_TABLE_TYPE2                *InputData;\r
+  EFI_STATUS                        Status;\r
+\r
+  EFI_STRING_ID                     TokenToUpdate;\r
+\r
+  HandleCount = 0;\r
+  HandleArray = NULL;\r
+  InputData = NULL;\r
+\r
+  //\r
+  // First check for invalid parameters.\r
+  //\r
+  if (RecordData == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  InputData = (SMBIOS_TABLE_TYPE2*)RecordData;\r
+\r
+  BaseBoardManufacturer = (CHAR16 *) PcdGetPtr (PcdBaseBoardManufacturer);\r
+  if (StrLen (BaseBoardManufacturer) > 0) {\r
+    TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
+    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardManufacturer, NULL);\r
+  }\r
+\r
+  BaseBoardProductName = (CHAR16 *) PcdGetPtr (PcdBaseBoardProductName);\r
+  if (StrLen (BaseBoardProductName) > 0) {\r
+    TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
+    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, BaseBoardProductName, NULL);\r
+  }\r
+\r
+  Version = (CHAR16 *) PcdGetPtr (PcdBaseBoardVersion);\r
+  if (StrLen (Version) > 0) {\r
+    TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
+    HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);\r
+  }\r
+\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG),\r
+    AssertTagType02\r
+    );\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
+    SerialNumberType02\r
+    );\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER),\r
+    BoardManufacturerType02\r
+    );\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),\r
+    SerialNumberType02\r
+    );\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_SKU_NUMBER),\r
+    SerialNumberType02\r
+    );\r
+  OemUpdateSmbiosInfo (mSmbiosMiscHiiHandle,\r
+    STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION),\r
+    ChassisLocationType02\r
+    );\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);\r
+  BaseBoardManufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ManuStrLen = StrLen (BaseBoardManufacturer);\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);\r
+  BaseBoardProductName = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ProductNameStrLen = StrLen (BaseBoardProductName);\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);\r
+  Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  VerStrLen = StrLen (Version);\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);\r
+  SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  SerialNumStrLen = StrLen (SerialNumber);\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);\r
+  AssetTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  AssetTagStrLen = StrLen (AssetTag);\r
+\r
+  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);\r
+  ChassisLocation = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);\r
+  ChassisLocaStrLen = StrLen (ChassisLocation);\r
+\r
+  //\r
+  // Two zeros following the last string.\r
+  //\r
+  RecordLength = sizeof (SMBIOS_TABLE_TYPE2) +\r
+                 ManuStrLen        + 1 +\r
+                 ProductNameStrLen + 1 +\r
+                 VerStrLen         + 1 +\r
+                 SerialNumStrLen   + 1 +\r
+                 AssetTagStrLen    + 1 +\r
+                 ChassisLocaStrLen + 1 + 1;\r
+  SmbiosRecord = AllocateZeroPool (RecordLength);\r
+  if (SmbiosRecord == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
+  }\r
+\r
+  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE2));\r
+  SmbiosRecord->Hdr.Length        = sizeof (SMBIOS_TABLE_TYPE2);\r
+\r
+  //\r
+  //  Update Contained objects Handle\r
+  //\r
+  SmbiosRecord->NumberOfContainedObjectHandles = 0;\r
+  SmbiosMiscGetLinkTypeHandle (EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, &HandleArray,\r
+                               &HandleCount);\r
+  // It's assumed there's at most a single chassis\r
+  ASSERT (HandleCount < 2);\r
+  if (HandleCount > 0) {\r
+    SmbiosRecord->ChassisHandle = HandleArray[0];\r
+  }\r
+\r
+  FreePool (HandleArray);\r
+\r
+  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
+  UnicodeStrToAsciiStrS (BaseBoardManufacturer, OptionalStrStart, ManuStrLen + 1);\r
+\r
+  StrStart = OptionalStrStart + ManuStrLen + 1;\r
+  UnicodeStrToAsciiStrS (BaseBoardProductName, StrStart, ProductNameStrLen + 1);\r
+\r
+  StrStart += ProductNameStrLen + 1;\r
+  UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);\r
+\r
+  StrStart += VerStrLen + 1;\r
+  UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);\r
+\r
+  StrStart += SerialNumStrLen + 1;\r
+  UnicodeStrToAsciiStrS (AssetTag, StrStart, AssetTagStrLen + 1);\r
+\r
+  StrStart += AssetTagStrLen + 1;\r
+  UnicodeStrToAsciiStrS (ChassisLocation, StrStart, ChassisLocaStrLen + 1);\r
+\r
+  Status = SmbiosMiscAddRecord ((UINT8 *)SmbiosRecord, NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type02 Table Log Failed! %r \n",\r
+            __FUNCTION__, __LINE__, Status));\r
+  }\r
+\r
+  FreePool (SmbiosRecord);\r
+\r
+Exit:\r
+  if (BaseBoardManufacturer != NULL) {\r
+    FreePool (BaseBoardManufacturer);\r
+  }\r
+\r
+  if (BaseBoardProductName != NULL) {\r
+    FreePool (BaseBoardProductName);\r
+  }\r
+\r
+  if (Version != NULL) {\r
+    FreePool (Version);\r
+  }\r
+\r
+  if (SerialNumber != NULL) {\r
+    FreePool (SerialNumber);\r
+  }\r
+\r
+  if (AssetTag != NULL) {\r
+    FreePool (AssetTag);\r
+  }\r
+\r
+  if (ChassisLocation != NULL) {\r
+    FreePool (ChassisLocation);\r
+  }\r
+\r
+  return 0;\r
+}\r