From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-io1-f45.google.com (mail-io1-f45.google.com [209.85.166.45]) by mx.groups.io with SMTP id smtpd.web11.4169.1610642228421533284 for ; Thu, 14 Jan 2021 08:37:08 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=dVBbQnXD; spf=pass (domain: nuviainc.com, ip: 209.85.166.45, mailfrom: rebecca@nuviainc.com) Received: by mail-io1-f45.google.com with SMTP id u26so12393328iof.3 for ; Thu, 14 Jan 2021 08:37:08 -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=D7bQmf8/fqy/z++MIkpZx+xthwI8iknF32XS7zIEIFw=; b=dVBbQnXDfLtCd6RiNfyEH2/Qjp7Pfjq5uuR76xfTgSAUqX+9HuJEnpXOWT8STd/xrx 30CtUP3EWY77sYI5blXXnToMnLX/yIvDRPHTpuYeSK5s/n3ROOgPdcijTJBbQFDlvO30 qIzb3M1sFj1VFJ5epa4mxClNZMGyhbvZ1FaEhGTxzw05Mtu1kfmHusNf87udfdeAc/U2 wi5itJd46AnA+lyv2TypEcD/Ou07uT+jDIEkY0sDXAmi04eTQ92S4Q8kfvb3r6hhAXMT TgGNxHJ8XM8EftAYOCwjQ/bOZfVJmke1PgnkW1Pj3U5SHinmaP3NPbBX+ZF5vI6OutGQ 5PDQ== 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=D7bQmf8/fqy/z++MIkpZx+xthwI8iknF32XS7zIEIFw=; b=q5Ej4/epFcNt1T3ZL2BH3h0ufxgZVYiiVENsxDqf2dWUtdgMogszhVeoW7ItZasxGd yIc8bmtan2CcY1nNzJjLWcJ9IY6yBOPkjD83Yb4o7wdJbc47Y9Ul9wF1x1v2AVy25l3l 4OWu6VbJo2XAYtH0ZRWKk8ePk/rYJ73EBKLmKNRI5Hp/lGjtNqVQqyLcj5EMwr5XEqNz z1nMPeAxLx/eyEDLYGZdUdDqNLmFOHaTaSCahxPhUD7+DhjJMmtDar3dNJW5rvooHpYA 776rgNu+XszLHOL9Wx+dGSh7JOFx9xeo2GkvyzEPlhtzIFHH6GPp1ePR0m8K9sa41jyJ sUWQ== X-Gm-Message-State: AOAM5320TjG+4wXLIrwPW++WzjS8UMZDNiL5PoLRlLz0LUuIwnqC1C4V 1fQldgiAwoEuKsUgjv/6ZMMiQ5lbXxr9jIYmD7WQEmKoguG7vrCQ/vpXRndKWtccGKQey1j1bZ2 Pacsrryl2+S/WbVT85Ex7RwTM5eX8bRlvFo0Ol9uMk6DBfPu/5WXJmucF5G70Y+2Opl8OzmVk X-Google-Smtp-Source: ABdhPJyS71/9Uv/0dMQlWLAJRolM62useYL43PaCgLUBprenHgcYPV4Ks7FqDZYzUGk55ZmOL7hOPg== X-Received: by 2002:a92:de05:: with SMTP id x5mr7440239ilm.184.1610642227359; Thu, 14 Jan 2021 08:37:07 -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 y5sm3711920ilj.35.2021.01.14.08.37.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Jan 2021 08:37:06 -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 v6 22/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe Date: Thu, 14 Jan 2021 09:36:28 -0700 Message-Id: <20210114163628.31952-23-rebecca@nuviainc.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210114163628.31952-1-rebecca@nuviainc.com> References: <20210114163628.31952-1-rebecca@nuviainc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit SmbiosMiscDxe provides SMBIOS tables 0, 1, 2, 3, 13, and 32. Signed-off-by: Rebecca Cran --- ArmPkg/ArmPkg.dsc | 1 + ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf | 89 ++++++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMisc.h | 134 ++++++++++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDataTable.c | 62 ++++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscEntryPoint.c | 227 ++++++++++++++++++++ ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxeStrings.uni | 22 ++ 6 files changed, 535 insertions(+) diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc index fce86cb6d710..7194eb2d3c44 100644 --- a/ArmPkg/ArmPkg.dsc +++ b/ArmPkg/ArmPkg.dsc @@ -149,6 +149,7 @@ [Components.common] ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf ArmPkg/Universal/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf + ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf [Components.AARCH64] ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.inf diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf new file mode 100644 index 000000000000..60d8fe31c219 --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxe.inf @@ -0,0 +1,89 @@ +#/** @file +# Component description file for SmbiosMisc instance. +# +# Parses the MiscSubclassDataTable and reports any generated data to the DataHub. +# All .uni file who tagged with "ToolCode="DUMMY"" in following file list is included by +# MiscSubclassDriver.uni file, the StrGather tool will expand MiscSubclassDriver.uni file +# and parse all .uni file. +# +# Copyright (c) 2021, NUVIA Inc. All rights reserved.
+# 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 +# +# +# Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ +#**/ + + +[Defines] + INF_VERSION = 1.29 + BASE_NAME = SmbiosMiscDxe + FILE_GUID = 7e5e26d4-0be9-401f-b5e1-1c2bda7ca777 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = SmbiosMiscEntryPoint + +[Sources] + SmbiosMisc.h + SmbiosMiscDataTable.c + SmbiosMiscEntryPoint.c + SmbiosMiscDxeStrings.uni + Type00/MiscBiosVendorData.c + Type00/MiscBiosVendorFunction.c + Type01/MiscSystemManufacturerData.c + Type01/MiscSystemManufacturerFunction.c + Type02/MiscBaseBoardManufacturerData.c + Type02/MiscBaseBoardManufacturerFunction.c + Type03/MiscChassisManufacturerData.c + Type03/MiscChassisManufacturerFunction.c + Type13/MiscNumberOfInstallableLanguagesData.c + Type13/MiscNumberOfInstallableLanguagesFunction.c + Type32/MiscBootInformationData.c + Type32/MiscBootInformationFunction.c + +[Packages] + ArmPkg/ArmPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + DevicePathLib + PcdLib + HiiLib + HobLib + MemoryAllocationLib + OemMiscLib + UefiBootServicesTableLib + UefiDriverEntryPoint + UefiLib + UefiRuntimeServicesTableLib + +[Protocols] + gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED + +[Pcd] + gArmTokenSpaceGuid.PcdFdSize + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString + gArmTokenSpaceGuid.PcdSystemBiosRelease + gArmTokenSpaceGuid.PcdEmbeddedControllerFirmwareRelease + gArmTokenSpaceGuid.PcdSystemProductName + gArmTokenSpaceGuid.PcdSystemVersion + gArmTokenSpaceGuid.PcdBaseBoardManufacturer + gArmTokenSpaceGuid.PcdBaseBoardProductName + gArmTokenSpaceGuid.PcdBaseBoardVersion + gArmTokenSpaceGuid.PcdFdBaseAddress + +[Guids] + gEfiGenericVariableGuid + +[Depex] + gEfiSmbiosProtocolGuid + + diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMisc.h b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMisc.h new file mode 100644 index 000000000000..4fd37c4cdc0b --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMisc.h @@ -0,0 +1,134 @@ +/** @file + Header file for the SmbiosMisc Driver. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 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 + +**/ + +#ifndef SMBIOS_MISC_H_ +#define SMBIOS_MISC_H_ + +#include +#include + +// +// Data table entry update function. +// +typedef EFI_STATUS (EFIAPI SMBIOS_MISC_DATA_FUNCTION) ( + IN VOID *RecordData, + IN EFI_SMBIOS_PROTOCOL *Smbios + ); + + +// +// Data table entry definition. +// +typedef struct { + // + // intermediate input data for SMBIOS record + // + VOID *RecordData; + SMBIOS_MISC_DATA_FUNCTION *Function; +} SMBIOS_MISC_DATA_TABLE; + + +// +// SMBIOS table extern definitions +// +#define SMBIOS_MISC_TABLE_EXTERNS(NAME1, NAME2, NAME3) \ +extern NAME1 NAME2 ## Data; \ +extern SMBIOS_MISC_DATA_FUNCTION NAME3 ## Function; + + +// +// SMBIOS data table entries +// +// This is used to define a pair of table structure pointer and functions +// in order to iterate through the list of tables, populate them and add +// them into the system. +#define SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION(NAME1, NAME2) \ +{ \ + & NAME1 ## Data, \ + NAME2 ## Function \ +} + +// +// Global definition macros. +// +#define SMBIOS_MISC_TABLE_DATA(NAME1, NAME2) \ + NAME1 NAME2 ## Data + +#define SMBIOS_MISC_TABLE_FUNCTION(NAME2) \ + EFI_STATUS EFIAPI NAME2 ## Function( \ + IN VOID *RecordData, \ + IN EFI_SMBIOS_PROTOCOL *Smbios \ + ) + +// +// Data Table Array Entries +// +extern EFI_HII_HANDLE mSmbiosMiscHiiHandle; + +typedef struct _SMBIOS_TYPE13_BIOS_LANGUAGE_INFORMATION_STRING{ + UINT8 *LanguageSignature; + EFI_STRING_ID InstallableLanguageLongString; + EFI_STRING_ID InstallableLanguageAbbreviateString; +} SMBIOS_TYPE13_BIOS_LANGUAGE_INFORMATION_STRING; + + +/** + Adds an SMBIOS record. + + @param Buffer The data for the SMBIOS record. + The format of the record is determined by + EFI_SMBIOS_TABLE_HEADER.Type. The size of the + formatted area is defined by EFI_SMBIOS_TABLE_HEADER.Length + and either followed by a double-null (0x0000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the SMBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of system resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in use. + +**/ +EFI_STATUS +SmbiosMiscAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ); + +/** + Get Link Type Handle. + + @param [in] SmbiosType Get this Type from SMBIOS table + @param [out] HandleArray Pointer to handle array which will be freed by caller + @param [out] HandleCount Pointer to handle count + +**/ +VOID +SmbiosMiscGetLinkTypeHandle( + IN UINT8 SmbiosType, + OUT UINT16 **HandleArray, + OUT UINTN *HandleCount + ); + +// +// Data Table Array +// +extern SMBIOS_MISC_DATA_TABLE mSmbiosMiscDataTable[]; + +// +// Data Table Array Entries +// +extern UINTN mSmbiosMiscDataTableEntries; +extern UINT8 mSmbiosMiscDxeStrings[]; + +#endif // SMBIOS_MISC_H_ diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDataTable.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDataTable.c new file mode 100644 index 000000000000..ac16c3a2688e --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDataTable.c @@ -0,0 +1,62 @@ +/** @file + This file provides SMBIOS Misc Type. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 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" + +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE0, + MiscBiosVendor, + MiscBiosVendor) +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE1, + MiscSystemManufacturer, + MiscSystemManufacturer) +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE3, + MiscChassisManufacturer, + MiscChassisManufacturer) +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE2, + MiscBaseBoardManufacturer, + MiscBaseBoardManufacturer) +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE13, + MiscNumberOfInstallableLanguages, + MiscNumberOfInstallableLanguages) +SMBIOS_MISC_TABLE_EXTERNS (SMBIOS_TABLE_TYPE32, + MiscBootInformation, + MiscBootInformation) + + +SMBIOS_MISC_DATA_TABLE mSmbiosMiscDataTable[] = { + // Type0 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscBiosVendor, + MiscBiosVendor), + // Type1 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscSystemManufacturer, + MiscSystemManufacturer), + // Type3 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscChassisManufacturer, + MiscChassisManufacturer), + // Type2 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscBaseBoardManufacturer, + MiscBaseBoardManufacturer), + // Type13 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscNumberOfInstallableLanguages, + MiscNumberOfInstallableLanguages), + // Type32 + SMBIOS_MISC_TABLE_ENTRY_DATA_AND_FUNCTION (MiscBootInformation, + MiscBootInformation), +}; + + +// +// Number of Data Table entries. +// +UINTN mSmbiosMiscDataTableEntries = + (sizeof (mSmbiosMiscDataTable)) / sizeof (SMBIOS_MISC_DATA_TABLE); diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscEntryPoint.c b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscEntryPoint.c new file mode 100644 index 000000000000..37e79d285e57 --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscEntryPoint.c @@ -0,0 +1,227 @@ +/** @file + This driver parses the mSmbiosMiscDataTable structure and reports + any generated data using SMBIOS protocol. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ Copyright (c) 2006 - 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 +#include +#include +#include +#include +#include + +#include "SmbiosMisc.h" + + +STATIC EFI_HANDLE mSmbiosMiscImageHandle; +STATIC EFI_SMBIOS_PROTOCOL *mSmbiosMiscSmbios = NULL; + +EFI_HII_HANDLE mSmbiosMiscHiiHandle; + +/** + Standard EFI driver point. This driver parses the mSmbiosMiscDataTable + structure and reports any generated data using SMBIOS protocol. + + @param ImageHandle Handle for the image of this driver + @param SystemTable Pointer to the EFI System Table + + @retval EFI_SUCCESS The data was successfully stored. + +**/ +EFI_STATUS +EFIAPI +SmbiosMiscEntryPoint( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + UINTN Index; + EFI_STATUS EfiStatus; + + mSmbiosMiscImageHandle = ImageHandle; + + EfiStatus = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, + (VOID**)&mSmbiosMiscSmbios); + if (EFI_ERROR (EfiStatus)) { + DEBUG ((DEBUG_ERROR, "Could not locate SMBIOS protocol. %r\n", EfiStatus)); + return EfiStatus; + } + + mSmbiosMiscHiiHandle = HiiAddPackages ( + &gEfiCallerIdGuid, + mSmbiosMiscImageHandle, + SmbiosMiscDxeStrings, + NULL + ); + if (mSmbiosMiscHiiHandle == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + for (Index = 0; Index < mSmbiosMiscDataTableEntries; ++Index) { + // + // If the entry have a function pointer, just log the data. + // + if (mSmbiosMiscDataTable[Index].Function != NULL) { + EfiStatus = (*mSmbiosMiscDataTable[Index].Function)( + mSmbiosMiscDataTable[Index].RecordData, + mSmbiosMiscSmbios + ); + + if (EFI_ERROR(EfiStatus)) { + DEBUG ((DEBUG_ERROR, "Misc smbios store error. Index=%d," + "ReturnStatus=%r\n", Index, EfiStatus)); + return EfiStatus; + } + } + } + + return EfiStatus; +} + + +/** + Adds an SMBIOS record. + + @param Buffer The data for the SMBIOS record. + The format of the record is determined by + EFI_SMBIOS_TABLE_HEADER.Type. The size of the + formatted area is defined by EFI_SMBIOS_TABLE_HEADER.Length + and either followed by a double-null (0x0000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the SMBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of system resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in use. + +**/ +EFI_STATUS +SmbiosMiscAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_HANDLE Handle; + + Handle = SMBIOS_HANDLE_PI_RESERVED; + + if (SmbiosHandle != NULL) { + Handle = *SmbiosHandle; + } + + Status = mSmbiosMiscSmbios->Add ( + mSmbiosMiscSmbios, + NULL, + &Handle, + (EFI_SMBIOS_TABLE_HEADER *)Buffer + ); + + if (SmbiosHandle != NULL) { + *SmbiosHandle = Handle; + } + + return Status; +} + + +/** Fetches the number of handles of the specified SMBIOS type + * + * @param SmbiosType The type of SMBIOS record to look for + * + * @return The number of handles + * +**/ +STATIC +UINTN +GetHandleCount ( + IN UINT8 SmbiosType + ) +{ + UINTN HandleCount; + EFI_STATUS Status; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_TABLE_HEADER *Record; + + HandleCount = 0; + + // Iterate through entries to get the number + do { + Status = mSmbiosMiscSmbios->GetNext ( + mSmbiosMiscSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (Status == EFI_SUCCESS) { + HandleCount++; + } + } while (!EFI_ERROR (Status)); + + return HandleCount; +} + +/** + Fetches a list of the specified SMBIOS table types. + + @param[in] SmbiosType The type of table to fetch + @param[out] **HandleArray The array of handles + @param[out] *HandleCount Number of handles in the array +**/ +VOID +SmbiosMiscGetLinkTypeHandle( + IN UINT8 SmbiosType, + OUT SMBIOS_HANDLE **HandleArray, + OUT UINTN *HandleCount + ) +{ + UINTN Index; + EFI_STATUS Status; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_TABLE_HEADER *Record; + + if (mSmbiosMiscSmbios == NULL) { + return; + } + + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; + *HandleCount = GetHandleCount (SmbiosType); + + *HandleArray = AllocateZeroPool (sizeof (SMBIOS_HANDLE) * (*HandleCount)); + if (*HandleArray == NULL) { + DEBUG ((DEBUG_ERROR, "HandleArray allocate memory resource failed.\n")); + *HandleCount = 0; + return; + } + + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; + + for (Index = 0; Index < (*HandleCount); Index++) { + Status = mSmbiosMiscSmbios->GetNext ( + mSmbiosMiscSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (!EFI_ERROR (Status)) { + (*HandleArray)[Index] = Record->Handle; + } else { + break; + } + } +} + diff --git a/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxeStrings.uni b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxeStrings.uni new file mode 100644 index 000000000000..6f877e706922 --- /dev/null +++ b/ArmPkg/Universal/Smbios/SmbiosMiscDxe/SmbiosMiscDxeStrings.uni @@ -0,0 +1,22 @@ +/** @file + * Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + * + * Copyright (c) 2021, NUVIA Inc. All rights reserved.
+ * 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 + * + * +**/ + + +/=# + +#langdef en-US "English" + +#include "Type00/MiscBiosVendor.uni" +#include "Type01/MiscSystemManufacturer.uni" +#include "Type02/MiscBaseBoardManufacturer.uni" +#include "Type03/MiscChassisManufacturer.uni" +#include "Type13/MiscNumberOfInstallableLanguages.uni" -- 2.26.2