[edk2-devel] [PATCH v6 18/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type03

Leif Lindholm leif at nuviainc.com
Mon Jan 25 19:11:06 UTC 2021


On Thu, Jan 14, 2021 at 09:36:24 -0700, Rebecca Cran wrote:
> This code provides information for the SMBIOS Type 3 table.
> 
> Signed-off-by: Rebecca Cran <rebecca at nuviainc.com>

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

> ---
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerData.c     |  52 +++++
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c | 224 ++++++++++++++++++++
>  ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturer.uni       |  18 ++
>  3 files changed, 294 insertions(+)
> 
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerData.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerData.c
> new file mode 100644
> index 000000000000..137bd941d0b1
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerData.c
> @@ -0,0 +1,52 @@
> +/** @file
> +  This file provides Smbios Type3 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) Chassis Manufacturer data.
> +//
> +SMBIOS_MISC_TABLE_DATA(SMBIOS_TABLE_TYPE3, MiscChassisManufacturer) = {
> +  {                                                       // Hdr
> +    EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE,                     // Type,
> +    0,                                                    // Length,
> +    0                                                     // Handle
> +  },
> +  1,                                                      // Manufactrurer
> +  MiscChassisTypeMainServerChassis,                       // Type
> +  2,                                                      // Version
> +  3,                                                      // SerialNumber
> +  4,                                                      // AssetTag
> +  ChassisStateSafe,                                       // BootupState
> +  ChassisStateSafe,                                       // PowerSupplyState
> +  ChassisStateSafe,                                       // ThermalState
> +  ChassisSecurityStatusNone,                              // SecurityState
> +  {
> +    0,                                                    // OemDefined[0]
> +    0,                                                    // OemDefined[1]
> +    0,                                                    // OemDefined[2]
> +    0                                                     // OemDefined[3]
> +  },
> +  2,                                                      // Height
> +  1,                                                      // NumberofPowerCords
> +  0,                                                      // ContainedElementCount
> +  0,                                                      // ContainedElementRecordLength
> +  {                                                       // ContainedElements[0]
> +    {
> +      0,                                                    // ContainedElementType
> +      0,                                                    // ContainedElementMinimum
> +      0                                                     // ContainedElementMaximum
> +    }
> +  }
> +};
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c
> new file mode 100644
> index 000000000000..e6adbceba2d5
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturerFunction.c
> @@ -0,0 +1,224 @@
> +/** @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) 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 <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"
> +
> +/**
> + * Returns the chassis type in SMBIOS format.
> + *
> + * @return Chassis type
> +**/
> +UINT8
> +GetChassisType (
> +  VOID
> +  )
> +{
> +  EFI_STATUS                      Status;
> +  UINT8                           ChassisType;
> +
> +  Status = OemGetChassisType (&ChassisType);
> +  if (EFI_ERROR (Status)) {
> +    return 0;
> +  }
> +
> +  return ChassisType;
> +}
> +
> +/**
> +  This function makes boot time changes to the contents of the
> +  MiscChassisManufacturer (Type 3) 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(MiscChassisManufacturer)
> +{
> +  CHAR8                           *OptionalStrStart;
> +  CHAR8                           *StrStart;
> +  UINTN                           RecordLength;
> +  UINTN                           ManuStrLen;
> +  UINTN                           VerStrLen;
> +  UINTN                           AssertTagStrLen;
> +  UINTN                           SerialNumStrLen;
> +  UINTN                           ChaNumStrLen;
> +  EFI_STRING                      Manufacturer;
> +  EFI_STRING                      Version;
> +  EFI_STRING                      SerialNumber;
> +  EFI_STRING                      AssertTag;
> +  EFI_STRING                      ChassisSkuNumber;
> +  EFI_STRING_ID                   TokenToGet;
> +  SMBIOS_TABLE_TYPE3              *SmbiosRecord;
> +  SMBIOS_TABLE_TYPE3              *InputData;
> +  EFI_STATUS                      Status;
> +
> +  UINT8                           ContainedElementCount;
> +  CONTAINED_ELEMENT               ContainedElements;
> +  UINT8                           ExtendLength;
> +
> +  UINT8                           ChassisType;
> +
> +  ExtendLength = 0;
> +
> +  //
> +  // First check for invalid parameters.
> +  //
> +  if (RecordData == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  InputData = (SMBIOS_TABLE_TYPE3 *)RecordData;
> +
> +  OemUpdateSmbiosInfo (
> +    mSmbiosMiscHiiHandle,
> +    STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG),
> +    AssetTagType03
> +    );
> +  OemUpdateSmbiosInfo (
> +    mSmbiosMiscHiiHandle,
> +    STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER),
> +    SerialNumberType03
> +    );
> +  OemUpdateSmbiosInfo (
> +    mSmbiosMiscHiiHandle,
> +    STRING_TOKEN (STR_MISC_CHASSIS_VERSION),
> +    VersionType03
> +    );
> +  OemUpdateSmbiosInfo (
> +    mSmbiosMiscHiiHandle,
> +    STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER),
> +    ManufacturerType03
> +    );
> +  OemUpdateSmbiosInfo (
> +    mSmbiosMiscHiiHandle,
> +    STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER),
> +    SkuNumberType03
> +    );
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_MANUFACTURER);
> +  Manufacturer = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  ManuStrLen = StrLen (Manufacturer);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_VERSION);
> +  Version = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  VerStrLen = StrLen (Version);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SERIAL_NUMBER);
> +  SerialNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  SerialNumStrLen = StrLen (SerialNumber);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_ASSET_TAG);
> +  AssertTag = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  AssertTagStrLen = StrLen (AssertTag);
> +
> +  TokenToGet = STRING_TOKEN (STR_MISC_CHASSIS_SKU_NUMBER);
> +  ChassisSkuNumber = HiiGetPackageString (&gEfiCallerIdGuid, TokenToGet, NULL);
> +  ChaNumStrLen = StrLen (ChassisSkuNumber);
> +
> +  ContainedElementCount = InputData->ContainedElementCount;
> +
> +  if (ContainedElementCount > 1) {
> +    ExtendLength = (ContainedElementCount - 1) * sizeof (CONTAINED_ELEMENT);
> +  }
> +
> +  //
> +  // Two zeros following the last string.
> +  //
> +  RecordLength = sizeof (SMBIOS_TABLE_TYPE3) +
> +                 ExtendLength    + 1 +
> +                 ManuStrLen      + 1 +
> +                 VerStrLen       + 1 +
> +                 SerialNumStrLen + 1 +
> +                 AssertTagStrLen + 1 +
> +                 ChaNumStrLen    + 1 + 1;
> +  SmbiosRecord = AllocateZeroPool (RecordLength);
> +  if (SmbiosRecord == NULL) {
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto Exit;
> +  }
> +
> +  (VOID)CopyMem (SmbiosRecord, InputData, sizeof (SMBIOS_TABLE_TYPE3));
> +
> +  SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength + 1;
> +
> +  ChassisType = GetChassisType ();
> +  if (ChassisType != 0) {
> +    SmbiosRecord->Type  = ChassisType;
> +  }
> +
> +  //ContainedElements
> +  ASSERT (ContainedElementCount < 2);
> +  (VOID)CopyMem (SmbiosRecord + 1, &ContainedElements, ExtendLength);
> +
> +  //ChassisSkuNumber
> +  *((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) + ExtendLength) = 5;
> +
> +  OptionalStrStart = (CHAR8 *)((UINT8 *)SmbiosRecord + sizeof (SMBIOS_TABLE_TYPE3) +
> +                                        ExtendLength + 1);
> +  UnicodeStrToAsciiStrS (Manufacturer, OptionalStrStart, ManuStrLen + 1);
> +  StrStart = OptionalStrStart + ManuStrLen + 1;
> +  UnicodeStrToAsciiStrS (Version, StrStart, VerStrLen + 1);
> +  StrStart += VerStrLen + 1;
> +  UnicodeStrToAsciiStrS (SerialNumber, StrStart, SerialNumStrLen + 1);
> +  StrStart += SerialNumStrLen + 1;
> +  UnicodeStrToAsciiStrS (AssertTag, StrStart, AssertTagStrLen + 1);
> +  StrStart += AssertTagStrLen + 1;
> +  UnicodeStrToAsciiStrS (ChassisSkuNumber, StrStart, ChaNumStrLen + 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 Type03 Table Log Failed! %r \n",
> +            __FUNCTION__, __LINE__, Status));
> +  }
> +
> +  FreePool (SmbiosRecord);
> +
> +Exit:
> +  if (Manufacturer != NULL) {
> +    FreePool (Manufacturer);
> +  }
> +
> +  if (Version != NULL) {
> +    FreePool (Version);
> +  }
> +
> +  if (SerialNumber != NULL) {
> +    FreePool (SerialNumber);
> +  }
> +
> +  if (AssertTag != NULL) {
> +    FreePool (AssertTag);
> +  }
> +
> +  if (ChassisSkuNumber != NULL) {
> +    FreePool (ChassisSkuNumber);
> +  }
> +
> +  return 0;
> +}
> diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturer.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturer.uni
> new file mode 100644
> index 000000000000..9512b354fe9a
> --- /dev/null
> +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type03/MiscChassisManufacturer.uni
> @@ -0,0 +1,18 @@
> +/** @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_CHASSIS_MANUFACTURER  #language en-US  "Not Specified"
> +#string STR_MISC_CHASSIS_VERSION       #language en-US  "Not Specified"
> +#string STR_MISC_CHASSIS_SERIAL_NUMBER #language en-US  "Not Specified"
> +#string STR_MISC_CHASSIS_ASSET_TAG     #language en-US  "Not Specified"
> +#string STR_MISC_CHASSIS_SKU_NUMBER    #language en-US  "Not Specified"
> -- 
> 2.26.2
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70733): https://edk2.groups.io/g/devel/message/70733
Mute This Topic: https://groups.io/mt/79679263/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