From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by mx.groups.io with SMTP id smtpd.web09.78.1609801143532241276 for ; Mon, 04 Jan 2021 14:59:03 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=IorCm2E2; spf=pass (domain: nuviainc.com, ip: 209.85.210.178, mailfrom: rebecca@nuviainc.com) Received: by mail-pf1-f178.google.com with SMTP id q22so17269481pfk.12 for ; Mon, 04 Jan 2021 14:59:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7rXrvjaR2mnTTsq3HwUTlJnsHxI+M3cjHb8tJDKJyJw=; b=IorCm2E22gdzNRGRCMVTG+vQvZRe0NlANj6ocsGsiICdfMoptJalnTZLXkBYhZane6 M02JB4R/py7n2Ba0rhmhUE2a1D/cnwmBc2aByEmMIRItVlhoQwj9xOvXMkm8t5cIKSDk jooujax58o3+4MdBvl/CHo2kUGkdVPUhkptEIq0lZ98zbFr/ihfU61Q09SgRQJSbEaaH IYYYwMXjGYICd5ZwzQwUVEjxmE3J0LmpnT0qaW49NHkHcDh8gWAFy40rtUNN6/f4iYyO Ks2o7qjZtXkxeIzObOs7het7KuN6nT598+gyL6h8/XV2QTcnp7Xwrv2lGatxIIcT48vG UJfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7rXrvjaR2mnTTsq3HwUTlJnsHxI+M3cjHb8tJDKJyJw=; b=rTfvozd3rrjgGMmiGKnRJTbPiOty8j/bQjLh6eMwvFrS50rutivBldj42tTlhnj46n uUlyxT5hzT1GBLvx9oQxRf5pElagiK/iPfha75eZn1nU7zY2XvzUnWDqG/QG2HZpKGkd BN0nrU8BzSzmQ0b4UUnPbG65hug5quVzGL4gPq7gLuGFSIB+AcKivlzeDYXw+vqOEiU8 wWE9+7WjYxyHw7t0SIrXT5MZLoC7zL7WuBE8uB6W9RvmwuCayX1DXeEax3fKxe06TsI0 aYpBTGgrXdXOK2V2XEm3xnMgInPBFFXkezJMpYBbMAxit5v/txT83mse9BgvdoYdVFib g4eQ== X-Gm-Message-State: AOAM533nfMN/F3Ae1yQG1uaqVHcUfQi1U98IDAAi7S7RmmuHT6DBFfGv pmGV3IFwcixiPIiowQptjCGCGuI+jZMVHJG7QIpMedelCFrgFk5pZHFWoZ4IRgZiShH3iFCyVLY cxqqSSx3c5ZYPoUnY1M12ft60t0T4aGL5o6kpamtc+OH5T3kSc/3h1PB6FozU1YfAhPhXxod0 X-Google-Smtp-Source: ABdhPJy0BfvA05p9fY+tfPkM79PtvJeoxIDxQ4T3LcCqfbPGK7EBgZMZ4SxAIvgPqJV4n+tKo8XicQ== X-Received: by 2002:a62:7ad5:0:b029:1a3:d0a2:e49 with SMTP id v204-20020a627ad50000b02901a3d0a20e49mr47812433pfc.31.1609801142258; Mon, 04 Jan 2021 14:59:02 -0800 (PST) Return-Path: Received: from cube.nuviainc.com (c-174-52-16-57.hsd1.ut.comcast.net. [174.52.16.57]) by smtp.gmail.com with ESMTPSA id x143sm64185289pgx.66.2021.01.04.14.59.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Jan 2021 14:59:01 -0800 (PST) From: "Rebecca Cran" To: devel@edk2.groups.io Cc: Rebecca Cran , Leif Lindholm , Ard Biesheuvel , "nd @ arm . com . Sami Mujawar" , Liming Gao , Michael D Kinney , Zhiguang Liu Subject: [PATCH v5 14/23] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type02 Date: Mon, 4 Jan 2021 15:58:21 -0700 Message-Id: <20210104225830.12606-15-rebecca@nuviainc.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210104225830.12606-1-rebecca@nuviainc.com> References: <20210104225830.12606-1-rebecca@nuviainc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This code provides information for the SMBIOS Type 2 table. Signed-off-by: Rebecca Cran --- ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c | 45 +++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c | 207 ++++++++++++++++++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturer.uni | 20 ++ 3 files changed, 272 insertions(+) diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.c new file mode 100644 index 000000000000..f9122d5d8963 --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerData.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.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ 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 + 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/MiscBaseBoardManufacturerFunction.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.c new file mode 100644 index 000000000000..6c9bfa803ee5 --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturerFunction.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.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ 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/MiscBaseBoardManufacturer.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturer.uni new file mode 100644 index 000000000000..47b6c71230fe --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/Type02/MiscBaseBoardManufacturer.uni @@ -0,0 +1,20 @@ +/** @file + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ 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" -- 2.26.2