[edk2-devel] [PATCH v5 14/23] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type02

Samer El-Haj-Mahmoud samer.el-haj-mahmoud at arm.com
Tue Jan 5 21:59:03 UTC 2021



> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Rebecca
> Cran via groups.io
> Sent: Monday, January 4, 2021 5:58 PM
> To: devel at edk2.groups.io
> Cc: Rebecca Cran <rebecca at nuviainc.com>; Leif Lindholm
> <leif at nuviainc.com>; Ard Biesheuvel <Ard.Biesheuvel at arm.com>; Sami
> Mujawar <Sami.Mujawar at arm.com>; Liming Gao
> <gaoliming at byosoft.com.cn>; Michael D Kinney
> <michael.d.kinney at intel.com>; Zhiguang Liu <zhiguang.liu at intel.com>
> Subject: [edk2-devel] [PATCH v5 14/23] ArmPkg: Add
> Universal/Smbios/SmbiosMiscDxe/Type02
>
> This code provides information for the SMBIOS Type 2 table.
>
> Signed-off-by: Rebecca Cran <rebecca at nuviainc.com>
> ---
>
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacture
> rData.c     |  45 +++++
>
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacture
> rFunction.c | 207 ++++++++++++++++++++
>
> ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacture
> r.uni       |  20 ++
>  3 files changed, 272 insertions(+)
>
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rerData.c
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rerData.c
> new file mode 100644
> index 000000000000..f9122d5d8963
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufact
> +++ urerData.c
> @@ -0,0 +1,45 @@
> +/** @file
> +
> +  This file provide OEM to define Smbios Type2 Data
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  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) Chassis Manufacturer data.
> +//
> +MISC_SMBIOS_TABLE_DATA(SMBIOS_TABLE_TYPE2,
> MiscBaseBoardManufacturer) = {
> +  {                                                       // Hdr
> +    EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION,                // Type,
> +    0,                                                    // Length,
> +    0                                                     // Handle
> +  },
> +  1,                                                      // BaseBoardManufacturer
> +  2,                                                      // BaseBoardProductName
> +  3,                                                      // BaseBoardVersion
> +  4,                                                      // BaseBoardSerialNumber
> +  5,                                                      // BaseBoardAssetTag
> +  {                                                       // FeatureFlag
> +    1,                                                    // Motherboard           :1
> +    0,                                                    // RequiresDaughterCard  :1
> +    0,                                                    // Removable             :1
> +    1,                                                    // Replaceable           :1

Not true for all platforms


> +    0,                                                    // HotSwappable          :1
> +    0                                                     // Reserved              :3
> +  },
> +  6,                                                      // BaseBoardChassisLocation
> +  0,                                                      // ChassisHandle;
> +  BaseBoardTypeMotherBoard,                               // BoardType;
> +  0,                                                      // NumberOfContainedObjectHandles;
> +  {
> +    0
> +  }                                                       // ContainedObjectHandles[1];
> +};
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rerFunction.c
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rerFunction.c
> new file mode 100644
> index 000000000000..6c9bfa803ee5
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufact
> +++ urerFunction.c
> @@ -0,0 +1,207 @@
> +/** @file
> +  This driver parses the mSmbiosMiscDataTable structure and reports
> +  any generated data using SMBIOS protocol.
> +
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  Copyright (c) 2009 - 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 "SmbiosMisc.h"
> +
> +
> +/**
> +  This function makes basic board manufacturer to the contents of the
> +  Misc Base Board Manufacturer (Type 2).
> +
> +  @param  RecordData                 Pointer to copy of RecordData from the Data
> Table.
> +
> +  @retval EFI_SUCCESS                All parameters were valid.
> +  @retval EFI_UNSUPPORTED            Unexpected RecordType value.
> +  @retval EFI_INVALID_PARAMETER      Invalid parameter was found.
> +
> +**/
> +MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer)
> +{
> +  CHAR8                             *OptionalStrStart;
> +  CHAR8                             *StrStart;
> +  UINTN                             RecordLength;
> +  UINTN                             ManuStrLen;
> +  UINTN                             ProductNameStrLen;
> +  UINTN                             VerStrLen;
> +  UINTN                             SerialNumStrLen;
> +  UINTN                             AssetTagStrLen;
> +  UINTN                             ChassisLocaStrLen;
> +  UINTN                             HandleCount;
> +  UINT16                            *HandleArray;
> +  CHAR16                            *BaseBoardManufacturer;
> +  CHAR16                            *BaseBoardProductName;
> +  CHAR16                            *Version;
> +  EFI_STRING                        SerialNumber;
> +  EFI_STRING                        AssetTag;
> +  EFI_STRING                        ChassisLocation;
> +  EFI_STRING_ID                     TokenToGet;
> +  EFI_SMBIOS_HANDLE                 SmbiosHandle;
> +  SMBIOS_TABLE_TYPE2                *SmbiosRecord;
> +  SMBIOS_TABLE_TYPE2                *InputData;
> +  EFI_STATUS                        Status;
> +
> +  EFI_STRING_ID                     TokenToUpdate;
> +
> +  HandleCount = 0;
> +  HandleArray = NULL;
> +  InputData = NULL;
> +
> +  //
> +  // First check for invalid parameters.
> +  //
> +  if (RecordData == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  InputData = (SMBIOS_TABLE_TYPE2*)RecordData;
> +
> +  BaseBoardManufacturer = (CHAR16 *) PcdGetPtr
> + (PcdBaseBoardManufacturer);  if (StrLen (BaseBoardManufacturer) > 0) {
> +    TokenToUpdate = STRING_TOKEN
> (STR_MISC_BASE_BOARD_MANUFACTURER);
> +    HiiSetString (mHiiHandle, TokenToUpdate, BaseBoardManufacturer,
> + NULL);  }
> +
> +  BaseBoardProductName = (CHAR16 *) PcdGetPtr
> + (PcdBaseBoardProductName);  if (StrLen (BaseBoardProductName) > 0) {
> +    TokenToUpdate = STRING_TOKEN
> (STR_MISC_BASE_BOARD_PRODUCT_NAME);
> +    HiiSetString (mHiiHandle, TokenToUpdate, BaseBoardProductName,
> + NULL);  }
> +
> +  Version = (CHAR16 *) PcdGetPtr (PcdBaseBoardVersion);  if (StrLen
> + (Version) > 0) {
> +    TokenToUpdate = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);
> +    HiiSetString (mHiiHandle, TokenToUpdate, Version, NULL);  }
> +
> +  UpdateSmbiosInfo (mHiiHandle,
> +    STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG),
> +    AssertTagType02
> +    );
> +  UpdateSmbiosInfo (mHiiHandle,
> +    STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER),
> +    SerialNumberType02
> +    );
> +  UpdateSmbiosInfo (mHiiHandle,
> +    STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER),
> +    BoardManufacturerType02
> +    );
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_MANUFACTURER);
> +  BaseBoardManufacturer = HiiGetPackageString (&gEfiCallerIdGuid,
> + TokenToGet, NULL);  ManuStrLen = StrLen (BaseBoardManufacturer);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_PRODUCT_NAME);
> +  BaseBoardProductName = HiiGetPackageString (&gEfiCallerIdGuid,
> + TokenToGet, NULL);  ProductNameStrLen = StrLen (BaseBoardProductName);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_VERSION);  Version
> =
> + HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);  VerStrLen
> + = StrLen (Version);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_SERIAL_NUMBER);
> +  SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet,
> + NULL);  SerialNumStrLen = StrLen (SerialNumber);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG);
> AssetTag
> + = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> + AssetTagStrLen = StrLen (AssetTag);
> +
> +  TokenToGet = STRING_TOKEN
> (STR_MISC_BASE_BOARD_CHASSIS_LOCATION);
> +  ChassisLocation = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet,
> + NULL);  ChassisLocaStrLen = StrLen (ChassisLocation);
> +
> +  //
> +  // Two zeros following the last string.
> +  //
> +  RecordLength = sizeof (SMBIOS_TABLE_TYPE2) +
> +                 ManuStrLen        + 1 +
> +                 ProductNameStrLen + 1 +
> +                 VerStrLen         + 1 +
> +                 SerialNumStrLen   + 1 +
> +                 AssetTagStrLen    + 1 +
> +                 ChassisLocaStrLen + 1 + 1;  SmbiosRecord =
> + AllocateZeroPool (RecordLength);  if (SmbiosRecord == NULL) {
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto Exit;
> +  }
> +
> +  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE2));
> +  SmbiosRecord->Hdr.Length        = sizeof (SMBIOS_TABLE_TYPE2);
> +
> +  //
> +  //  Update Contained objects Handle
> +  //
> +  SmbiosRecord->NumberOfContainedObjectHandles = 0;  GetLinkTypeHandle
> + (EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, &HandleArray, &HandleCount);  //
> + It's assumed there's at most a single chassis  ASSERT (HandleCount <
> + 2);  if (HandleCount > 0) {
> +    SmbiosRecord->ChassisHandle = HandleArray[0];  }
> +
> +  FreePool (HandleArray);
> +
> +  OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
> + UnicodeStrToAsciiStrS (BaseBoardManufacturer, OptionalStrStart,
> + ManuStrLen + 1);
> +
> +  StrStart = OptionalStrStart + ManuStrLen + 1;  UnicodeStrToAsciiStrS
> + (BaseBoardProductName, StrStart, ProductNameStrLen + 1);
> +
> +  StrStart += ProductNameStrLen + 1;
> +  UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);
> +
> +  StrStart += VerStrLen + 1;
> +  UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
> +
> +  StrStart += SerialNumStrLen + 1;
> +  UnicodeStrToAsciiStrS (AssetTag, StrStart, AssetTagStrLen + 1);
> +
> +  StrStart += AssetTagStrLen + 1;
> +  UnicodeStrToAsciiStrS (ChassisLocation, StrStart, ChassisLocaStrLen +
> + 1);
> +
> +  Status = LogSmbiosData ((UINT8 *)SmbiosRecord, &SmbiosHandle);  if
> + (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type02 Table Log Failed! %r
> \n",
> +            __FUNCTION__, __LINE__, Status));  }
> +
> +  FreePool (SmbiosRecord);
> +
> +Exit:
> +  if (BaseBoardManufacturer != NULL) {
> +    FreePool (BaseBoardManufacturer);
> +  }
> +
> +  if (BaseBoardProductName != NULL) {
> +    FreePool (BaseBoardProductName);
> +  }
> +
> +  if (Version != NULL) {
> +    FreePool (Version);
> +  }
> +
> +  if (SerialNumber != NULL) {
> +    FreePool (SerialNumber);
> +  }
> +
> +  if (AssetTag != NULL) {
> +    FreePool (AssetTag);
> +  }
> +
> +  if (ChassisLocation != NULL) {
> +    FreePool (ChassisLocation);
> +  }
> +
> +  return 0;
> +}
> diff --git
> a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rer.uni
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufactu
> rer.uni
> new file mode 100644
> index 000000000000..47b6c71230fe
> --- /dev/null
> +++
> b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufact
> +++ urer.uni
> @@ -0,0 +1,20 @@
> +/** @file
> +  Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
> +
> +  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_BASE_BOARD_MANUFACTURER     #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_PRODUCT_NAME     #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_PRODUCT_NAME     #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_VERSION          #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_VERSION          #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_SERIAL_NUMBER    #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_ASSET_TAG        #language en-US  "Not
> Specified"
> +#string STR_MISC_BASE_BOARD_CHASSIS_LOCATION #language en-US  "Not
> Specified"
> --

Shouldn't all of these strings be customizable via platform dynamic HII PCDs?



> 2.26.2
>
>
>
> 
>

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69752): https://edk2.groups.io/g/devel/message/69752
Mute This Topic: https://groups.io/mt/79438419/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list