From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.112]) by mx.groups.io with SMTP id smtpd.web11.1187.1684888870300025463 for ; Tue, 23 May 2023 17:41:10 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@os.amperecomputing.com header.s=selector2 header.b=qRTJIGMG; spf=pass (domain: os.amperecomputing.com, ip: 40.107.244.112, mailfrom: minhnguyen1@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aQEpvD2gWEi1yGcp4UbNjDfkF+EqVu9I+J+48IKyK41m/+h8bcPe4lxm7+Mmt0xaiCBPRxTNRFaD37ObgWDwA36xrj5JQInuxhah/phbDCOzkUt5xtNDAj+xPE2pC+8FQi8c/OOd/1SSva4omCM9jmccTxt1AcqMoAQQ3gGwf9v9b9MfwGMyOfbErEOwEAfT3nZCTEsgLJPGdqLvvSQCYDLFyNyW9tRziWgNAEu5R9GxqP3vGOMcsmDEy6nIvq/Ezu8O9ZrmX6eDSAC5dLqUIDIXNlkKrW+ufg+6jhvzWedYGD8LFSK62Mh4dn4JdCgIm0nMD8mhoh6fzU4ngkY6pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BaPO3X45KQSQG4XSfJy/PBuZ0asMhIuBktw8FK0WZvU=; b=kG19menfY4xyMxZ8gvC+H4N3EGVWopaJMP6SCErS3FzVBLt9n0sd9jw+hNReQlLIAnU5DxqSO79OIYAVtlIe2bS7OWV/i4hQWcw/BNbMQ6XTkYJ9TXRMzuUmhzMzQiSeJ/brmrkRjAaR1YphiJrK2hydq2lXwe7lESTyl7Y+eOHbhrJoLzl6vZCLyCCOVSRDJS3OuJA1mmoSMNJ+w69PeOFEKxKnbBbQNXS0ecuNcKcivd9QHdIbMpn8AidpC67rK78V+b0QobfmBsyvoPrtZl5HUlAsE2VKretZCMoI1+m9kAEVvEimPFZyXP3lZEDx3aYiM4/ELEB7e7yvHux5Uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BaPO3X45KQSQG4XSfJy/PBuZ0asMhIuBktw8FK0WZvU=; b=qRTJIGMGnQd0DQvZbOXB/Kv76ixdWhUzSYVSz/0ttoV5pPrHKPLOhvJKmqbFbHm4+kspD4bwMcqWZRZxS86PZx3dh8GlN+XudMecN+bJrkwZXT2EGx9IqiruQctrfdFk0cBGOeW9Quc77t3AWlf2eAZ7cuQtAVV9H40i19sYj54= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) by MW6PR01MB8270.prod.exchangelabs.com (2603:10b6:303:241::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Wed, 24 May 2023 00:41:05 +0000 Received: from PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1]) by PH0PR01MB8048.prod.exchangelabs.com ([fe80::bbdb:b58c:140e:c4e1%6]) with mapi id 15.20.6411.019; Wed, 24 May 2023 00:41:05 +0000 From: Minh Nguyen To: devel@edk2.groups.io CC: patches@amperecomputing.com, quic_llindhol@quicinc.com, ardb+tianocore@kernel.org, nhi@os.amperecomputing.com, minhnguyen1@os.amperecomputing.com Subject: [edk2-platforms][PATCH 3/4] JadePkg: Refactor SmbiosPlatformDxe Date: Wed, 24 May 2023 07:40:36 +0700 Message-ID: <20230524004037.39269-4-minhnguyen1@os.amperecomputing.com> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> References: <20230524004037.39269-1-minhnguyen1@os.amperecomputing.com> X-ClientProxiedBy: SI2P153CA0021.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::20) To PH0PR01MB8048.prod.exchangelabs.com (2603:10b6:510:280::7) Return-Path: minhnguyen1@os.amperecomputing.com MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR01MB8048:EE_|MW6PR01MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c40862d-1358-425c-d444-08db5bef8e90 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tPSKzXFyilOYShQZulTNYesxbDxSq86FdIxZAgHJK16i8wo9f1iwynSPODaE4ARj1UIHQ89uoFgjIhKO5KnoapUoiXHcRJS06pk7WUlLh7fVh63xSrZOe9vMzz6NHq3FkRlfRKnmE8RG2glN2sWSpqJWy7vKikRSirKBtUrk29qNhZvhLAhf/lQent9qTqELJYCLgCaOmylTbV1AHsOIunI6+FkMs+JjB14lFivsOgHBjooCh9kEiGo05wQAAqXPIjBWddyhgc/EpfV8iyUhJVKF4iHOL4nFlI3H5VGs/HFDsh47UDhvFg9Urfct5eXosR+mLir4H+9UKeCptz7zaI7z/D/KPTl/Zf7FMBNE70/ePhGth/WeVCCG2k750IIbyU2R5Lb83qm1+IXtg8eKsrYsGhxW1uepIclMQpXApDqLBFfBCPEpU27cveDFN9v7bqnq2Gz/fSVdvB/Isqn4cmCz+ojwksVIgfDZxvSSvfEK+lAzFHj4eUM8MrFPpt7Jg7G9sUuV4MYi+09PGMZpbTXnLkTXqtxyZ3QbQhraG9RhNS459m7Fw1F4/XdxCQeqWIUA3caJXAIfh4TKHjcFYiUmqKTZ0tNUBHPAKo11LItIux9Qw8C+fZ8H0UskHKgItmUneo4sZDQ9omvg7DK80g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR01MB8048.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(39850400004)(346002)(396003)(366004)(136003)(451199021)(38350700002)(30864003)(83380400001)(41300700001)(2906002)(8676002)(6666004)(6486002)(52116002)(8936002)(5660300002)(38100700002)(2616005)(86362001)(26005)(186003)(1076003)(478600001)(6506007)(6512007)(19627235002)(107886003)(66556008)(66476007)(66946007)(6916009)(4326008)(316002)(579004)(559001)(14943795004);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VNRlKjiLGcfPZE90Bdm433fy4tZ9s61g/wOHA/n/f4o+avj/mwoRJuIqNZYB?= =?us-ascii?Q?NgvvphCWFlnGmRGv5I034y0M8+A6dHMaIfZ4TXJqLmgHekIrZrHLRrUHbs2G?= =?us-ascii?Q?jsXiflk3WaAwDHawydF3IRV1o1c9WhuD4RZkv0NWrpv9b4NZu7Fbj0S1XXg8?= =?us-ascii?Q?om3eYtrgcfwSSk2YTwckBENwAG2tJAtnM7HycwqLK5UjaiBbgAnY/jRkjdgj?= =?us-ascii?Q?8tpW5FUAC1ZyZQbOEvTw9ZbkbPN/G0n4C6SUZI2DKZ13DNO8ip8vtyKtsnob?= =?us-ascii?Q?4YnSyHfbXQsiPes3rOayIisRiJOS0hlfAnLq1RcMiPf0nOrYBNNV73urFzCJ?= =?us-ascii?Q?T2+eE7A1phZWhvhS41FE94L3Zqp7zGgQWfOV9xpmZYnLrhPBRSaNWSfcUWyn?= =?us-ascii?Q?i6kHcM0Acw3R0aax/pNC0/kHAO+ZsKAxKklXEw67dkVhRwC8jWjKPHx3QeHB?= =?us-ascii?Q?GPcmRXLCG2PFUNFnZ90gSA1yrUJiI244ddCVMhF0iC8XwG48xP1Xczai4cL3?= =?us-ascii?Q?0Ob7OIzykW24W8OM+/bDxlLYwm4PTwSY3gZBbNSGiJqRp83x1yMWh6FNXKI7?= =?us-ascii?Q?tLSqzAsMvxrnonYlWJq/HVxqX2bz83Dgt7pIW/W5hNIccE6hdNH8aRb/fB6y?= =?us-ascii?Q?sDsAagM/zQEHi5bR7gW1C43r06W80fhgV3MJK4hP2JLNF7BhQ+Ag9O+bV12o?= =?us-ascii?Q?pjp/unhprQG9Lq79mhiurP03ECh9/IBy/ojZ1iz/vKChz5wx7wtR+RWBiQDf?= =?us-ascii?Q?0srG31WGckNKyd7jX/sV0MvUyY+OEmih35BfIYU8pPALmynApSKpUGONVWcS?= =?us-ascii?Q?R0Pf8sXsuwWSNsPXHEzdHbnHowH28PCWyDrWQAspb3xtrhUFL0Q3pfvDk8FT?= =?us-ascii?Q?sqSDx2Hme44sQLIMyp2O6Ax6jfDjSmvd8IPU+NiMjGDcb0hyjQzfoSDeyvu/?= =?us-ascii?Q?p8YDKEP608gZboLFWHjZBfVYINfeHxkuuzYeiPBPqqjFYrDPf0LlimZCoai4?= =?us-ascii?Q?egp9KVTdr+01lfazTxdv3d5GVWZ9agptll0Z5iqBh3167ij+Q76NzWO8Jq7Q?= =?us-ascii?Q?gjlFOuMjYWlbs/Mxg5mSQUOcBkT7Oo9oFn4sv/yipGq62RDfhag1kgfMFI3K?= =?us-ascii?Q?UJAK/Y/R0Ao6R33idUGcPcrjH0RiAc8kewkBhc0D9OvtLZr788Qi4szgvHYN?= =?us-ascii?Q?2/XuCzuAE1+/qgXbI6psrykDXgoMNzCn0kaRo3xjjncR0wnpITBSbJ+r0lza?= =?us-ascii?Q?Yfn+UlCCjuFY5x0cjtT1Rnjer0OnxO2aAPSiAoKf02pMJezby7iYCm7L7Eaf?= =?us-ascii?Q?JfkPofyjWv/h6hhx2D8+q6GqRxvY0hPhknkO5J3HqwNy+N6hV/ISrbchET/d?= =?us-ascii?Q?jBEUvfZsZKwU2PCYNY1PSyeqga0aUO5jc3Kci2QVxosUmUmJe4PTCyTxFtKR?= =?us-ascii?Q?jhFuE9RTRUxSZr2/vuhxtBl3O6z26Xgz0FsNaII00WXVXLyGsvdY5SZUIYbQ?= =?us-ascii?Q?1ZSeusFEY9HCVZZb2dIeQzzPt8keBcGcbhFrAODccBOQ0B0UgImqtxC0KIpe?= =?us-ascii?Q?Ef9HadZ5Nxt/0NzOioPOnkZ2CithrfMAsEqjRIDLthCytTEtoB0bYTFDGUfY?= =?us-ascii?Q?ERpzrNTR9gtp1ii64hdvGfIPROip06Tww1Dxlx+JUsJE?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c40862d-1358-425c-d444-08db5bef8e90 X-MS-Exchange-CrossTenant-AuthSource: PH0PR01MB8048.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2023 00:41:05.4386 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jU9l4J62Tjpsfrb+YzciWUtMFpDZLQEB4HNgFc9/G05hCpVehSY/1UaNA+FTvBozMgqMqI53Sd/PVSA4LbR9q+GVJN7OceRTufySipi4yaThiYyepf1a6jLiooJkfUEw X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR01MB8270 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain This refactor is derrived from ArmPkg/SMBIOS and customize to adapt with platform. These changes help to separate each Type of SMBIOS table into individual modules. It makes the structure of SmbiosPlatformDxe module clear and easier to add new type of table. Signed-off-by: Minh Nguyen --- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf = | 27 +- Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.h = | 201 ++++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c = | 1083 ++++++++------------ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDataTab= le.c | 72 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctorData.c | 142 +++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctorFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= tData.c | 268 +++++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= tFunction.c | 58 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= Data.c | 42 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= Function.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHardwareS= ecurityData.c | 42 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHardwareS= ecurityFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmiDevic= eData.c | 46 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmiDevic= eFunction.c | 39 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtendedData.c | 47 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtendedFunction.c | 57 ++ Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeStrings= .uni | 21 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPortConne= ctor.uni | 22 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSystemSlo= t.uni | 20 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemString= .uni | 11 + Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnboardDe= vicesExtended.uni | 10 + 21 files changed, 1735 insertions(+), 644 deletions(-) diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.inf b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.inf old mode 100644 new mode 100755 index 549aa38b1774..83ff918fc42d --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.i= nf @@ -15,7 +15,22 @@ [Defines] ENTRY_POINT =3D SmbiosPlatformDxeEntry =20 [Sources] + SmbiosPlatformDxe.h SmbiosPlatformDxe.c + SmbiosPlatformDxeDataTable.c + SmbiosPlatformDxeStrings.uni + Type08/PlatformPortConnectorData.c + Type08/PlatformPortConnectorFunction.c + Type09/PlatformSystemSlotData.c + Type09/PlatformSystemSlotFunction.c + Type11/PlatformOemStringData.c + Type11/PlatformOemStringFunction.c + Type24/PlatformHardwareSecurityData.c + Type24/PlatformHardwareSecurityFunction.c + Type38/PlatformIpmiDeviceData.c + Type38/PlatformIpmiDeviceFunction.c + Type41/PlatformOnboardDevicesExtendedData.c + Type41/PlatformOnboardDevicesExtendedFunction.c =20 [Packages] ArmPkg/ArmPkg.dec @@ -25,19 +40,23 @@ [Packages] Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec =20 [LibraryClasses] + AmpereCpuLib BaseLib BaseMemoryLib DebugLib + HiiLib MemoryAllocationLib + NVParamLib + #IOExpanderLib UefiBootServicesTableLib UefiDriverEntryPoint UefiLib =20 [Protocols] - gEfiSmbiosProtocolGuid ## CONSUMED + gEfiSmbiosProtocolGuid ## CONSUMED =20 -[Pcd] - gArmTokenSpaceGuid.PcdFdSize +[Guids] + gCpuConfigFormSetGuid =20 [Depex] - gEfiSmbiosProtocolGuid + TRUE diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.h b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.h new file mode 100644 index 000000000000..df7d44ffecb6 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.h @@ -0,0 +1,201 @@ +/** @file + Header file for the SmbiosPlatformDxe Driver. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ 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_PLATFORM_DXE_H_ +#define SMBIOS_PLATFORM_DXE_H_ + +#include +#include + +#define NULL_TERMINATED_TYPE 0xFF +#define NULL_TERMINATED_TOKEN 0xFFFF + +#define END_OF_SMBIOS_TABLE_TYPE 127 +#define SMBIOS_UNICODE_STRING_MAX_LENGTH (SMBIOS_STRING_MAX_LENGTH * sizeo= f (CHAR16)) + +typedef enum { + ADDITIONAL_STR_INDEX_1 =3D 1, + ADDITIONAL_STR_INDEX_2, + ADDITIONAL_STR_INDEX_3, + ADDITIONAL_STR_INDEX_4, + ADDITIONAL_STR_INDEX_5, + ADDITIONAL_STR_INDEX_6, + ADDITIONAL_STR_INDEX_7, + ADDITIONAL_STR_INDEX_8, + ADDITIONAL_STR_INDEX_9, + ADDITIONAL_STR_INDEX_MAX +} ADDITIONAl_STR_INDEX; + +// +// Data table entry update function. +// +typedef EFI_STATUS (EFIAPI SMBIOS_PLATFORM_DXE_DATA_FUNCTION)( + IN VOID *RecordData, + IN VOID *StrToken +); + +#pragma pack(1) +// +// Data table entry definition. +// +typedef struct { + // + // Intermediate input data for SMBIOS record + // + VOID *RecordData; + VOID *StrToken; + SMBIOS_PLATFORM_DXE_DATA_FUNCTION *Function; +} SMBIOS_PLATFORM_DXE_DATA_TABLE; + +typedef struct { + UINT16 TokenArray[ADDITIONAL_STR_INDEX_MAX]; + UINT8 TokenLen; +} STR_TOKEN_INFO; +#pragma pack() + +// +// SMBIOS table extern definitions. +// +#define SMBIOS_PLATFORM_DXE_TABLE_EXTERNS(SMBIOS_TYPE, BASE_NAME) \ +extern SMBIOS_TYPE BASE_NAME ## Data[]; \ +extern STR_TOKEN_INFO BASE_NAME ## StrToken[]; \ +extern SMBIOS_PLATFORM_DXE_DATA_FUNCTION BASE_NAME ## Function; + +// +// SMBIOS data table entries. +// +// This is used to define tables for structure pointer, functions and +// string Tokens in order to iterate through the list of tables, populate +// them and add them into the system. +#define SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION(BASE_NAME) \ +{ \ + BASE_NAME ## Data, \ + BASE_NAME ## StrToken, \ + BASE_NAME ## Function \ +} + +// +// Global definition macros. +// +#define SMBIOS_PLATFORM_DXE_TABLE_DATA(SMBIOS_TYPE, BASE_NAME) \ + SMBIOS_TYPE BASE_NAME ## Data[] + +#define SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA(BASE_NAME) \ + STR_TOKEN_INFO BASE_NAME ## StrToken[] + +#define SMBIOS_PLATFORM_DXE_TABLE_FUNCTION(BASE_NAME) \ + EFI_STATUS EFIAPI BASE_NAME ## Function( \ + IN VOID *RecordData, \ + IN VOID *StrToken \ + ) + +/** + 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_T= ABLE_HEADER.Length + and either followed by a double-null (0x0= 000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the S= MBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of syste= m resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in= use. + @retval EFI_INVALID_PARAMETER Buffer is NULL. +**/ +EFI_STATUS +SmbiosPlatformDxeAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ); + +/** + 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 +SmbiosPlatformDxeGetLinkTypeHandle ( + IN UINT8 SmbiosType, + OUT SMBIOS_HANDLE **HandleArray, + OUT UINTN *HandleCount + ); + +/** + Create SMBIOS Table Record with additional strings. + + @param[out] TableRecord Table Record is created. + @param[in] InputData Input Table from Data Table. + @param[in] TableTypeSize Size of Table with specified type. + @param[in] StrToken Pointer to Token of additional strings in HI= I Database. +**/ +VOID +SmbiosPlatformDxeCreateTable ( + OUT VOID **TableRecord, + IN VOID **InputData, + IN UINT8 TableTypeSize, + IN STR_TOKEN_INFO *StrToken + ); + +/** + Save default strings of HII Database in case multiple tables with the sa= me type using + these data for setting additional strings. After using, default strings = will be set + back again in HII Database for other tables with the same type to use. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Saved default strings of HII Database successfu= lly. + Other Failed to save default strings of HII Database. +**/ +EFI_STATUS +SmbiosPlatformDxeSaveHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ); + +/** + Restore default strings of HII Database after using for setting addition= al strings. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Restore default strings off HII Database succes= sfully. + Other Failed to restore default strings of HII Databa= se. +**/ +EFI_STATUS +SmbiosPlatformDxeRestoreHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ); + +// +// Data Table Array +// +extern SMBIOS_PLATFORM_DXE_DATA_TABLE mSmbiosPlatformDxeDataTable[]; + +// +// Data Table Array Entries +// +extern UINTN mSmbiosPlatformDxeDataTableEntries; + +// +// HII Database Handle +// +extern EFI_HII_HANDLE mSmbiosPlatformDxeHiiHandle; + +extern UINT8 SmbiosPlatformDxeStrings[]; + +#endif // SMBIOS_PLATFORM_DXE_H_ diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxe.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformD= xe.c index 448912f146ec..faa49cf9ca6b 100644 --- a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -1,657 +1,46 @@ /** @file + This driver parses the mSmbiosPlatformDxeDataTable structure + and reports any generated data using SMBIOS protocol. =20 - Copyright (c) 2020 - 2023, Ampere Computing LLC. All rights reserved. + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ =20 + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ 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 =20 **/ =20 -#include - -#include #include #include #include +#include #include #include #include -#include =20 -#define CHASSIS_VERSION_TEMPLATE "None \0" -#define CHASSIS_SERIAL_TEMPLATE "Serial Not Set \0" -#define CHASSIS_ASSET_TAG_TEMPLATE "Asset Tag Not Set \0" +#include "SmbiosPlatformDxe.h" =20 -#define TYPE8_ADDITIONAL_STRINGS \ - "VGA1 - Rear VGA Connector\0" \ - "DB-15 Male (VGA) \0" +#define SIZE_OF_HII_DATABASE_DEFAULT_STRINGS \ +ADDITIONAL_STR_INDEX_MAX * SMBIOS_UNICODE_STRING_MAX_LENGTH =20 -#define TYPE9_ADDITIONAL_STRINGS \ - "Socket 0 Riser 1 x32 - Slot 1\0" +STATIC EFI_HANDLE mSmbiosPlatformDxeImageHandle; +STATIC EFI_STRING mDefaultHiiDatabaseStr; +STATIC EFI_SMBIOS_PROTOCOL *mPlatformDxeSmbios =3D NULL; =20 -#define TYPE11_ADDITIONAL_STRINGS \ - "www.amperecomputing.com\0" - -#define TYPE41_ADDITIONAL_STRINGS \ - "Onboard VGA\0" - -#define ADDITIONAL_STR_INDEX_1 0x01 -#define ADDITIONAL_STR_INDEX_2 0x02 -#define ADDITIONAL_STR_INDEX_3 0x03 -#define ADDITIONAL_STR_INDEX_4 0x04 -#define ADDITIONAL_STR_INDEX_5 0x05 -#define ADDITIONAL_STR_INDEX_6 0x06 - -// -// Type definition and contents of the default SMBIOS table. -// This table covers only the minimum structures required by -// the SMBIOS specification (section 6.2, version 3.0) -// -#pragma pack(1) -typedef struct { - SMBIOS_TABLE_TYPE8 Base; - CHAR8 Strings[sizeof (TYPE8_ADDITIONAL_STRINGS)]; -} ARM_TYPE8; - -typedef struct { - SMBIOS_TABLE_TYPE9 Base; - CHAR8 Strings[sizeof (TYPE9_ADDITIONAL_STRINGS)]; -} ARM_TYPE9; - -typedef struct { - SMBIOS_TABLE_TYPE11 Base; - CHAR8 Strings[sizeof (TYPE11_ADDITIONAL_STRINGS)]; -} ARM_TYPE11; - -typedef struct { - SMBIOS_TABLE_TYPE41 Base; - CHAR8 Strings[sizeof (TYPE41_ADDITIONAL_STRINGS)]; -} ARM_TYPE41; - -#pragma pack() - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8Vga =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeDB15Female, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeVideoPort, // PortType; - }, - "VGA1 - Rear VGA Connector\0" \ - "DB-15 Male (VGA)\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8USBFront =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeUsb, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeUsb, // PortType; - }, - "Front Panel USB 3.0\0" \ - "USB\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8USBRear =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeUsb, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeUsb, // PortType; - }, - "Rear Panel USB 3.0\0" \ - "USB\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8NetRJ45 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortConnectorTypeRJ45, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortConnectorTypeRJ45, // ExternalConnectorType; - PortTypeNetworkPort, // PortType; - }, - "RJ1 - BMC RJ45 Port\0" \ - "RJ45 Connector\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8NetOcp =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortTypeOther, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortTypeOther, // ExternalConnectorType; - PortTypeNetworkPort, // PortType; - }, - "OCP1 - OCP NIC 3.0 Connector\0" \ - "OCP NIC 3.0\0" -}; - -// Type 8 Port Connector Information -STATIC CONST ARM_TYPE8 mArmDefaultType8Uart =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE8), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, // InternalReferenceDesignator String - PortTypeOther, // InternalConnectorType; - ADDITIONAL_STR_INDEX_2, // ExternalReferenceDesignator String - PortConnectorTypeDB9Female, // ExternalConnectorType; - PortTypeSerial16550Compatible, // PortType; - }, - "UART1 - BMC UART5 Connector\0" \ - "DB-9 female\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth16X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 0, - 0, - 0, - }, - "S0 Riser 1 x32 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 4, - 0, - 0, - }, - "S0 Riser x32 - Slot 2\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0RiserX32Slot3 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S0 Riser x32 - Slot 3\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 7, - 0, - 0, - }, - "S1 Riser x24 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 8, - 0, - 0, - }, - "S1 Riser x24 - Slot 2\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX24Slot3 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 9, - 0, - 0, - }, - "S1 Riser x24 - Slot 3\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1RiserX8Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth8X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 8, - 0, - 0, - }, - "S1 Riser x8 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk0OcpNic =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth16X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 1, - 0, - 0, - }, - "S0 OCP NIC 3.0\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1NvmeM2Slot1 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth4X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S1 NVMe M.2 - Slot 1\0" -}; - -// Type 9 System Slots -STATIC ARM_TYPE9 mArmDefaultType9Sk1NvmeM2Slot2 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1, - SlotTypePciExpressGen3, - SlotDataBusWidth4X, - SlotUsageAvailable, - SlotLengthLong, - 0, - {0, 0, 1}, // Provides 3.3 Volts - {1}, // PME - 5, - 0, - 0, - }, - "S1 NVMe M.2 - Slot 2\0" -}; - -// Type 11 OEM Strings -STATIC ARM_TYPE11 mArmDefaultType11 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_OEM_STRINGS, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE11), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - ADDITIONAL_STR_INDEX_1 - }, - TYPE11_ADDITIONAL_STRINGS -}; - -// Type 24 Hardware Security -STATIC SMBIOS_TABLE_TYPE24 mArmDefaultType24 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_HARDWARE_SECURITY, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE24), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - 0 -}; - -// Type 38 IPMI Device Information -STATIC SMBIOS_TABLE_TYPE38 mArmDefaultType38 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_IPMI_DEVICE_INFORMATION, // UINT8 Type - sizeof (SMBIOS_TABLE_TYPE38), // UINT8 Length - SMBIOS_HANDLE_PI_RESERVED, - }, - IPMIDeviceInfoInterfaceTypeSSIF, - 0x20, - 0x20, - 0xFF, - 0x20 -}; - -// Type 41 Onboard Devices Extended Information -STATIC ARM_TYPE41 mArmDefaultType41 =3D { - { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION, - sizeof (SMBIOS_TABLE_TYPE41), - SMBIOS_HANDLE_PI_RESERVED, - }, - 1, - 0x83, // OnBoardDeviceExtendedTypeVideo, Enabled - 1, - 4, - 2, - 0, - }, - TYPE41_ADDITIONAL_STRINGS -}; - -// Type 42 System Boot Information -STATIC SMBIOS_TABLE_TYPE42 mArmDefaultType42 =3D { - { // SMBIOS_STRUCTURE Hdr - EFI_SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE, - sizeof (SMBIOS_TABLE_TYPE42), - SMBIOS_HANDLE_PI_RESERVED, - }, - MCHostInterfaceTypeOemDefined, - 4, - {0xFF, 0, 0, 0} -}; - -STATIC CONST VOID *DefaultCommonTables[] =3D -{ - &mArmDefaultType8Vga, - &mArmDefaultType8USBFront, - &mArmDefaultType8USBRear, - &mArmDefaultType8NetRJ45, - &mArmDefaultType8NetOcp, - &mArmDefaultType8Uart, - &mArmDefaultType9Sk0RiserX32Slot1, - &mArmDefaultType9Sk0RiserX32Slot2, - &mArmDefaultType9Sk0RiserX32Slot3, - &mArmDefaultType9Sk1RiserX24Slot1, - &mArmDefaultType9Sk1RiserX24Slot2, - &mArmDefaultType9Sk1RiserX24Slot3, - &mArmDefaultType9Sk1RiserX8Slot1, - &mArmDefaultType9Sk0OcpNic, - &mArmDefaultType9Sk1NvmeM2Slot1, - &mArmDefaultType9Sk1NvmeM2Slot2, - &mArmDefaultType11, - &mArmDefaultType24, - &mArmDefaultType38, - &mArmDefaultType41, - &mArmDefaultType42, - NULL -}; - -typedef struct { - CHAR8 MonthNameStr[4]; // example "Jan", Compiler build date, month - CHAR8 DigitStr[3]; // example "01", Smbios date format, month -} MonthStringDig; - -STATIC -UINTN -GetStringPackSize ( - CHAR8 *StringPack - ) -{ - UINTN StrCount; - CHAR8 *StrStart; - - if ((*StringPack =3D=3D 0) && (*(StringPack + 1) =3D=3D 0)) { - return 0; - } - - // String section ends in double-null (0000h) - for (StrCount =3D 0, StrStart =3D StringPack; - ((*StrStart !=3D 0) || (*(StrStart + 1) !=3D 0)); StrStart++, StrCo= unt++) - { - } - - return StrCount + 2; // Included the double NULL -} - -// Update String at String number to String Pack -EFI_STATUS -UpdateStringPack ( - CHAR8 *StringPack, - CHAR8 *String, - UINTN StringNumber - ) -{ - CHAR8 *StrStart; - UINTN StrIndex; - UINTN InputStrLen; - UINTN TargetStrLen; - UINTN BufferSize; - CHAR8 *Buffer; - - StrStart =3D StringPack; - for (StrIndex =3D 1; StrIndex < StringNumber; StrStart++) { - // A string ends in 00h - if (*StrStart =3D=3D 0) { - StrIndex++; - } - // String section ends in double-null (0000h) - if ((*StrStart =3D=3D 0) && (*(StrStart + 1) =3D=3D 0)) { - return EFI_NOT_FOUND; - } - } - - if (*StrStart =3D=3D 0) { - StrStart++; - } - - InputStrLen =3D AsciiStrLen (String); - TargetStrLen =3D AsciiStrLen (StrStart); - BufferSize =3D GetStringPackSize (StrStart + TargetStrLen + 1); - - // Replace the String if length matched - // OR this is the last string - if (InputStrLen =3D=3D TargetStrLen || (BufferSize =3D=3D 0)) { - CopyMem (StrStart, String, InputStrLen); - } - // Otherwise, buffer is needed to apply new string - else { - Buffer =3D AllocateZeroPool (BufferSize); - if (Buffer =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - CopyMem (Buffer, StrStart + TargetStrLen + 1, BufferSize); - CopyMem (StrStart, String, InputStrLen + 1); - CopyMem (StrStart + InputStrLen + 1, Buffer, BufferSize); - - FreePool (Buffer); - } - - return EFI_SUCCESS; -} - -/** - Install a whole table worth of structures - - @param Smbios SMBIOS protocol. - @param DefaultTables A pointer to the default SMBIOS table stru= cture. -**/ -EFI_STATUS -InstallStructures ( - IN EFI_SMBIOS_PROTOCOL *Smbios, - IN CONST VOID *DefaultTables[] - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - EFI_SMBIOS_HANDLE SmbiosHandle; - UINTN TableIndex; - - ASSERT (Smbios !=3D NULL); - - for (TableIndex =3D 0; DefaultTables[TableIndex] !=3D NULL; TableIndex++= ) { - SmbiosHandle =3D ((EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableIndex]= )->Handle; - Status =3D Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableIndex= ] - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: adding %d failed\n", __FUNCTION__, TableIn= dex)); - - // stop adding rather than continuing - return Status; - } - } - - return EFI_SUCCESS; -} - -/** - Install all structures from the DefaultTables structure - - @param Smbios SMBIOS protocol - -**/ -EFI_STATUS -InstallAllStructures ( - IN EFI_SMBIOS_PROTOCOL *Smbios - ) -{ - EFI_STATUS Status =3D EFI_SUCCESS; - - ASSERT (Smbios !=3D NULL); - - // Install Tables - Status =3D InstallStructures (Smbios, DefaultCommonTables); - ASSERT_EFI_ERROR (Status); - - return Status; -} +EFI_HII_HANDLE mSmbiosPlatformDxeHiiHandle; =20 /** - Installs SMBIOS information for ARM platforms - - @param ImageHandle Module's image handle - @param SystemTable Pointer of EFI_SYSTEM_TABLE + Standard EFI driver point. This driver parses the mSmbiosPlatformDataTab= le + structure and reports any generated data using SMBIOS protocol. =20 - @retval EFI_SUCCESS Smbios data successfully installed - @retval Other Smbios data was not installed + @param ImageHandle Handle for the image of this driver. + @param SystemTable Pointer to the EFI System Table. =20 + @retval EFI_SUCCESS The data was successfully stored. + EFI_OUT_OF_RESOURCES There is no remaining memory to satisfy the= request. **/ EFI_STATUS EFIAPI @@ -660,24 +49,438 @@ SmbiosPlatformDxeEntry ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_SMBIOS_PROTOCOL *Smbios; + UINTN Index; + EFI_STATUS Status; + + mSmbiosPlatformDxeImageHandle =3D ImageHandle; + + // + // Allocate buffer to save default strings of HII Database + // + mDefaultHiiDatabaseStr =3D AllocateZeroPool (SIZE_OF_HII_DATABASE_DEFAUL= T_STRINGS); + if (mDefaultHiiDatabaseStr =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] HII Database String allocates memory resource failed.\n"= , + __func__, + __LINE__ + )); + return EFI_OUT_OF_RESOURCES; + } =20 // - // Find the SMBIOS protocol + // Locate SMBIOS protocol and get HII Database Handle // Status =3D gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, - (VOID **)&Smbios + (VOID **)&mPlatformDxeSmbios ); - if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Could not locate SMBIOS protocol. %r\n", + __func__, + __LINE__, + Status + )); return Status; } =20 - Status =3D InstallAllStructures (Smbios); - DEBUG ((DEBUG_ERROR, "SmbiosPlatform install - %r\n", Status)); + mSmbiosPlatformDxeHiiHandle =3D HiiAddPackages ( + &gEfiCallerIdGuid, + mSmbiosPlatformDxeImageHandle, + SmbiosPlatformDxeStrings, + NULL + ); + if (mSmbiosPlatformDxeHiiHandle =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + // + // Iterate through all Data Tables of each Type and call + // function pointer to create and add Table accordingly + // + for (Index =3D 0; Index < mSmbiosPlatformDxeDataTableEntries; Index++) { + Status =3D (*mSmbiosPlatformDxeDataTable[Index].Function)( + mSmbiosPlatformDxeDataTable[Index].RecordData, + mSmbiosPlatformDxeDataTable[Index].StrToken + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Could not install SMBIOS Table Type%d. %r\n", + __func__, + __LINE__, + ((EFI_SMBIOS_TABLE_HEADER *)(mSmbiosPlatformDxeDataTable[Index].Re= cordData))->Type, + Status + )); + } + } + + // + // Free buffer after all Tables were installed + // + FreePool (mDefaultHiiDatabaseStr); + + return Status; +} + +/** + 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_T= ABLE_HEADER.Length + and either followed by a double-null (0x0= 000) or a set + of null terminated strings and a null. + @param SmbiosHandle A unique handle will be assigned to the S= MBIOS record + if not NULL. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of syste= m resources. + @retval EFI_ALREADY_STARTED The SmbiosHandle passed in was already in= use. + @retval EFI_INVALID_PARAMETER Buffer is NULL. +**/ +EFI_STATUS +SmbiosPlatformDxeAddRecord ( + IN UINT8 *Buffer, + IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle OPTIONAL + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_HANDLE Handle; + + if (Buffer =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Buffer is NULL - Invalid parameter. %r\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + Handle =3D SMBIOS_HANDLE_PI_RESERVED; + if (SmbiosHandle !=3D NULL) { + Handle =3D *SmbiosHandle; + } + + Status =3D mPlatformDxeSmbios->Add ( + mPlatformDxeSmbios, + NULL, + &Handle, + (EFI_SMBIOS_TABLE_HEADER *)Buffer + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] SMBIOS Type%d Table Log Failed! %r\n", + __func__, + __LINE__, + ((EFI_SMBIOS_TABLE_HEADER *)Buffer)->Type, + Status + )); + } + if (SmbiosHandle !=3D NULL) { + *SmbiosHandle =3D Handle; + } + + return Status; +} + +/** + Fetches the number of handles of the specified SMBIOS type. + + @param SmbiosType The type of SMBIOS record to look for. + + @retval UINTN 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 =3D 0; + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + // Iterate through entries to get the number + do { + Status =3D mPlatformDxeSmbios->GetNext ( + mPlatformDxeSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (Status =3D=3D EFI_SUCCESS) { + HandleCount++; + } + } while (Status !=3D EFI_NOT_FOUND); + + 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 +SmbiosPlatformDxeGetLinkTypeHandle ( + 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 (SmbiosType > END_OF_SMBIOS_TABLE_TYPE) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid SMBIOS Type.\n", + __func__, + __LINE__ + )); + } + + *HandleCount =3D GetHandleCount (SmbiosType); + *HandleArray =3D AllocateZeroPool (sizeof (SMBIOS_HANDLE) * (*HandleCoun= t)); + if (*HandleArray =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] HandleArray allocates memory resource failed.\n", + __func__, + __LINE__ + )); + *HandleCount =3D 0; + return; + } + + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + + for (Index =3D 0; Index < (*HandleCount); Index++) { + Status =3D mPlatformDxeSmbios->GetNext ( + mPlatformDxeSmbios, + &SmbiosHandle, + &SmbiosType, + &Record, + NULL + ); + + if (Status =3D=3D EFI_SUCCESS) { + (*HandleArray)[Index] =3D Record->Handle; + } else { + // It should never reach here + ASSERT (FALSE); + break; + } + } +} + +/** + Create SMBIOS Table Record with additional strings. + + @param[out] TableRecord Table Record is created. + @param[in] InputData Input Table from Data Table. + @param[in] TableTypeSize Size of Table with specified type. + @param[in] StrToken Pointer to Token of additional strings in HI= I Database. +**/ +VOID +SmbiosPlatformDxeCreateTable ( + OUT VOID **TableRecord, + IN VOID **InputData, + IN UINT8 TableTypeSize, + IN STR_TOKEN_INFO *StrToken + ) +{ + CHAR8 *StrStart; + UINT8 TableSize; + UINT8 SmbiosAdditionalStrLen; + UINT8 Index; + EFI_STRING SmbiosAdditionalStr; + + if (*InputData =3D=3D NULL || + StrToken =3D=3D NULL || + TableTypeSize < sizeof (EFI_SMBIOS_TABLE_HEADER) + ) + { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid parameter to create SMBIOS Table\n", + __func__, + __LINE__ + )); + return; + } + + // + // Calculate size of Table. + // + if (StrToken->TokenLen !=3D 0) { + TableSize =3D TableTypeSize + 1; // Last byte is Null-terminated for T= able with Null-terminated additional strings + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + SmbiosAdditionalStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + TableSize +=3D StrLen (SmbiosAdditionalStr) + 1; + FreePool (SmbiosAdditionalStr); + } + } else { + TableSize =3D TableTypeSize + 1 + 1; // Double-null for Table with no = additional strings + } + + // + // Allocate Table and copy strings from + // HII Database for additional strings. + // + *TableRecord =3D AllocateZeroPool (TableSize); + if (*TableRecord =3D=3D NULL) { + return; + } + CopyMem (*TableRecord, *InputData, TableTypeSize); + StrStart =3D (CHAR8 *)(*TableRecord + TableTypeSize); + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + SmbiosAdditionalStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + SmbiosAdditionalStrLen =3D StrLen (SmbiosAdditionalStr) + 1; + UnicodeStrToAsciiStrS ( + SmbiosAdditionalStr, + StrStart, + SmbiosAdditionalStrLen + ); + FreePool (SmbiosAdditionalStr); + StrStart +=3D SmbiosAdditionalStrLen; + } +} + +/** + Save default strings of HII Database in case multiple tables with the sa= me type using + these data for setting additional strings. After using, default strings = will be set + back again in HII Database by using SmbiosPlatformDxeRestoreHiiDefaultSt= ring function + for other tables with the same type to use. Before saving HII Database d= efault strings, + buffer for saving need to be available. Otherwise, that means a certain = SMBIOS Table used + this function but forget using SmbiosPlatformDxeRestoreHiiDefaultString = function to free + buffer for other Tables to use so this check is for that purpose. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Saved default strings of HII Database successfu= lly. + Other Failed to save default strings of HII Database. +**/ +EFI_STATUS +SmbiosPlatformDxeSaveHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ) +{ + UINT8 Index; + UINT8 HiiDatabaseStrLen; + EFI_STRING HiiDatabaseStr; + + if (StrToken =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid String Tokens\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + // + // Start saving HII Default Strings + // + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + ASSERT (IsZeroBuffer ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_S= TRING_MAX_LENGTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1)); + HiiDatabaseStr =3D HiiGetPackageString ( + &gEfiCallerIdGuid, + StrToken->TokenArray[Index], + NULL + ); + HiiDatabaseStrLen =3D (StrLen (HiiDatabaseStr) + 1) * sizeof (CHAR16); + ASSERT (HiiDatabaseStrLen <=3D SMBIOS_UNICODE_STRING_MAX_LENGTH); + UnicodeSPrint ( + (CHAR16 *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_MAX_LENGTH], + HiiDatabaseStrLen, + HiiDatabaseStr + ); + FreePool (HiiDatabaseStr); + } + + return EFI_SUCCESS; +} + +/** + Restore default strings of HII Database after using for setting addition= al strings. + + @param[in] StrToken Pointer to Token of additional strings in HII D= atabase. + + @retval EFI_SUCCESS Restore default strings off HII Database succes= sfully. + Other Failed to restore default strings of HII Databa= se. +**/ +EFI_STATUS +SmbiosPlatformDxeRestoreHiiDefaultString ( + IN STR_TOKEN_INFO *StrToken + ) +{ + UINT8 Index; + EFI_STATUS Status; + + if (StrToken =3D=3D NULL) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Invalid String Tokens\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + for (Index =3D 0; Index < StrToken->TokenLen; Index++) { + if (IsZeroBuffer ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRIN= G_MAX_LENGTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Default strings were not saved previously so failed to= restore default strings.\n", + __func__, + __LINE__ + )); + return EFI_INVALID_PARAMETER; + } + + Status =3D HiiSetString ( + mSmbiosPlatformDxeHiiHandle, + StrToken->TokenArray[Index], + (EFI_STRING)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_M= AX_LENGTH], + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]:[%dL] Failed to restore default strings\n", + __func__, + __LINE__ + )); + return Status; + } + ZeroMem ((VOID *)&mDefaultHiiDatabaseStr[Index * SMBIOS_STRING_MAX_LEN= GTH], SMBIOS_UNICODE_STRING_MAX_LENGTH - 1); + } =20 return Status; } diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeDataTable.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeDataTable.c new file mode 100644 index 000000000000..84a4962d33fc --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeDa= taTable.c @@ -0,0 +1,72 @@ +/** @file + This file provides SMBIOS Type. + + Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ 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 "SmbiosPlatformDxe.h" + +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE8, + PlatformPortConnector + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE9, + PlatformSystemSlot + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE9, + PlatformOemString + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE24, + PlatformHardwareSecurity + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE38, + PlatformIpmiDevice + ) +SMBIOS_PLATFORM_DXE_TABLE_EXTERNS ( + SMBIOS_TABLE_TYPE41, + PlatformOnboardDevicesExtended + ) + +SMBIOS_PLATFORM_DXE_DATA_TABLE mSmbiosPlatformDxeDataTable[] =3D { + // Type8 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformPortConnector + ), + // Type9 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformSystemSlot + ), + // Type11 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformOemString + ), + // Type24 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformHardwareSecurity + ), + // Type38 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformIpmiDevice + ), + // Type41 + SMBIOS_PLATFORM_DXE_TABLE_ENTRY_DATA_AND_FUNCTION ( + PlatformOnboardDevicesExtended + ) +}; + +// +// Number of Data Table entries. +// +UINTN mSmbiosPlatformDxeDataTableEntries =3D ARRAY_SIZE (mSmbiosPlatformDx= eDataTable); diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnectorData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/= Type08/PlatformPortConnectorData.c new file mode 100644 index 000000000000..d2db29159a09 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= ConnectorData.c @@ -0,0 +1,142 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 8 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE8, PlatformPortConnector)= =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeDB15Female, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeVideoPort // Port Type + }, + { // Table 2 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeUsb, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeUsb // Port Type + }, + { // Table 3 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeUsb, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeUsb // Port Type + }, + { // Table 4 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortConnectorTypeRJ45, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortConnectorTypeRJ45, // External Connector Ty= pe + PortTypeNetworkPort // Port Type + }, + { // Table 5 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortTypeOther, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortTypeOther, // External Connector Ty= pe + PortTypeNetworkPort // Port Type + }, + { // Table 6 + { // Header + EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE8), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Internal Reference De= signator + PortTypeOther, // Internal Connector Ty= pe + ADDITIONAL_STR_INDEX_2, // External Reference De= signator + PortConnectorTypeDB9Female, // External Connector Ty= pe + PortTypeSerial16550Compatible // Port Type + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformPortConnector) =3D { + { = // Table 1 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_1), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_1) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 2 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_2), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_2) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 3 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_3), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_3) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 4 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_4), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_4) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 5 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_5), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_5) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + }, + { = // Table 6 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DES= IGNATOR_6), + STRING_TOKEN (STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DES= IGNATOR_6) + }, + ADDITIONAL_STR_INDEX_2 = // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnectorFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatform= Dxe/Type08/PlatformPortConnectorFunction.c new file mode 100644 index 000000000000..dbf272ce4d34 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= ConnectorFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 8) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformPortConnector) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE8 *InputData; + SMBIOS_TABLE_TYPE8 *Type8Record; + + InputData =3D (SMBIOS_TABLE_TYPE8 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type8Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE8), + InputStrToken + ); + if (Type8Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type8Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type8Record); + return Status; + } + + FreePool (Type8Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlotData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Typ= e09/PlatformSystemSlotData.c new file mode 100644 index 000000000000..5e9bbc1b00a6 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlotData.c @@ -0,0 +1,268 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 9 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE9, PlatformSystemSlot) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 1, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 2 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth16X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 2, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 0, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 3 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageUnavailable, // Current Usage + SlotLengthLong, // Slot Length + 3, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 4, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 4 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 4, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 9, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 5 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 5, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 7, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 6 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 6, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 7, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 7 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth8X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 7, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 8, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 8 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth16X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthLong, // Slot Length + 8, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 1, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 9 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth4X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthShort, // Slot Length + 9, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Table 10 + { // Header + EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // Type + sizeof (SMBIOS_TABLE_TYPE9), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Slot Designation + SlotTypePciExpressGen4, // Slot Type + SlotDataBusWidth4X, // Slot Data Bus Width + SlotUsageAvailable, // Current Usage + SlotLengthShort, // Slot Length + 10, // Slot ID + {0, 0, 1}, // Slot Characteristics 1 + {1}, // Slot Characteristics 2 + 5, // Segment Group Number + 0, // Bus Number + 0, // Device Function Number + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformSystemSlot) =3D { + { // Table = 1 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_1) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 2 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_2) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 3 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_3) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 4 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_4) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 5 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_5) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 6 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_6) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 7 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_7) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 8 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_8) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 9 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_9) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, + { // Table = 10 + { // Tokens= array + STRING_TOKEN (STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_10) + }, + ADDITIONAL_STR_INDEX_1 // Size o= f Tokens array + }, +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlotFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe= /Type09/PlatformSystemSlotFunction.c new file mode 100644 index 000000000000..e91b0eb1cc71 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlotFunction.c @@ -0,0 +1,58 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 9) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformSystemSlot) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE9 *InputData; + SMBIOS_TABLE_TYPE9 *Type9Record; + + InputData =3D (SMBIOS_TABLE_TYPE9 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type9Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE9), + InputStrToken + ); + if (Type9Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type9Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type9Record); + return Status; + } + + FreePool (Type9Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemStringData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type= 11/PlatformOemStringData.c new file mode 100644 index 000000000000..183432440e13 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tringData.c @@ -0,0 +1,42 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 11 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE11, PlatformOemString) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_OEM_STRINGS, // Type + sizeof (SMBIOS_TABLE_TYPE11), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1 // String Count + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformOemString) =3D { + { // Table 1 + { // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_STRING_1) + }, + ADDITIONAL_STR_INDEX_1 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemStringFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/= Type11/PlatformOemStringFunction.c new file mode 100644 index 000000000000..a1611a7d5b04 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tringFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 11) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformOemString) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE11 *InputData; + SMBIOS_TABLE_TYPE11 *Type11Record; + + InputData =3D (SMBIOS_TABLE_TYPE11 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type11Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE11), + InputStrToken + ); + if (Type11Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type11Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type11Record); + return Status; + } + + FreePool (Type11Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/Platf= ormHardwareSecurityData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformD= xe/Type24/PlatformHardwareSecurityData.c new file mode 100644 index 000000000000..a6c7b3686e2e --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHard= wareSecurityData.c @@ -0,0 +1,42 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 19 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE24, PlatformHardwareSecur= ity) =3D { + { // Table 1 + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_HARDWARE_SECURITY, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE24), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 0 + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformHardwareSecurity) =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/Platf= ormHardwareSecurityFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatf= ormDxe/Type24/PlatformHardwareSecurityFunction.c new file mode 100644 index 000000000000..0b6593da1488 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type24/PlatformHard= wareSecurityFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 24) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformHardwareSecurity) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE24 *InputData; + SMBIOS_TABLE_TYPE24 *Type24Record; + + InputData =3D (SMBIOS_TABLE_TYPE24 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type24Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE24), + InputStrToken + ); + if (Type24Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type24Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type24Record); + return Status; + } + + FreePool (Type24Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/Platf= ormIpmiDeviceData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Typ= e38/PlatformIpmiDeviceData.c new file mode 100644 index 000000000000..d4b4212e5cd3 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmi= DeviceData.c @@ -0,0 +1,46 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 38 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE38, PlatformIpmiDevice) = =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_IPMI_DEVICE_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE38), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + IPMIDeviceInfoInterfaceTypeSSIF, // Interface Type + 0x20, // IPMI Specification Revis= ion + 0x20, // I2C Slave Address + 0xFF, // NV Storage Device Addres= s + 0x20, // Base Address + }, + { // Null-terminated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformIpmiDevice) =3D { + { // Table 1 + { // Tokens array + NULL_TERMINATED_TOKEN + }, + 0 // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/Platf= ormIpmiDeviceFunction.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe= /Type38/PlatformIpmiDeviceFunction.c new file mode 100644 index 000000000000..cda255a034ad --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type38/PlatformIpmi= DeviceFunction.c @@ -0,0 +1,39 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 38) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformIpmiDevice) { + EFI_STATUS Status; + SMBIOS_TABLE_TYPE38 *InputData; + + InputData =3D (SMBIOS_TABLE_TYPE38 *)RecordData; + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)InputData, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + InputData++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtendedData.c b/Platform/Ampere/JadePkg/Drivers/SmbiosPla= tformDxe/Type41/PlatformOnboardDevicesExtendedData.c new file mode 100644 index 000000000000..3855cfc4dc57 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtendedData.c @@ -0,0 +1,47 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SmbiosPlatformDxe.h" + +// +// Define data for SMBIOS Type 41 Table. +// +SMBIOS_PLATFORM_DXE_TABLE_DATA (SMBIOS_TABLE_TYPE41, PlatformOnboardDevice= sExtended) =3D { + { // Table 1 + { // Header + EFI_SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION, // Type + sizeof (SMBIOS_TABLE_TYPE41), // Length + SMBIOS_HANDLE_PI_RESERVED // Handle + }, + ADDITIONAL_STR_INDEX_1, // Reference D= esignation + 0x83, // Device Type + 1, // Device Type= Instance + 4, // Segment Gro= up Number + 2, // Bus Number + 0 // Device Func= tion Number + }, + { // Null-termin= ated table + { + NULL_TERMINATED_TYPE, + 0, + 0 + }, + } +}; + +// +// Define string Tokens for additional strings. +// +SMBIOS_PLATFORM_DXE_STRING_TOKEN_DATA (PlatformOnboardDevicesExtended) =3D= { + { = // Table 1 + { = // Tokens array + STRING_TOKEN (STR_PLATFORM_DXE_ONBOARD_DEVICES_EXTENDED_DEVICE_TYPE_= INSTANCE) + }, + ADDITIONAL_STR_INDEX_1 = // Size of Tokens array + } +}; diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtendedFunction.c b/Platform/Ampere/JadePkg/Drivers/Smbio= sPlatformDxe/Type41/PlatformOnboardDevicesExtendedFunction.c new file mode 100644 index 000000000000..4bc7e4547785 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtendedFunction.c @@ -0,0 +1,57 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +#include "SmbiosPlatformDxe.h" + +/** + This function adds SMBIOS Table (Type 41) records. + + @param RecordData Pointer to SMBIOS Table with default = values. + @param Smbios SMBIOS protocol. + + @retval EFI_SUCCESS The SMBIOS Table was successfully add= ed. + @retval Other Failed to update the SMBIOS Table. + +**/ +SMBIOS_PLATFORM_DXE_TABLE_FUNCTION (PlatformOnboardDevicesExtended) { + EFI_STATUS Status; + STR_TOKEN_INFO *InputStrToken; + SMBIOS_TABLE_TYPE41 *InputData; + SMBIOS_TABLE_TYPE41 *Type41Record; + + InputData =3D (SMBIOS_TABLE_TYPE41 *)RecordData; + InputStrToken =3D (STR_TOKEN_INFO *)StrToken; + + while (InputData->Hdr.Type !=3D NULL_TERMINATED_TYPE) { + SmbiosPlatformDxeCreateTable ( + (VOID *)&Type41Record, + (VOID *)&InputData, + sizeof (SMBIOS_TABLE_TYPE41), + InputStrToken + ); + if (Type41Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D SmbiosPlatformDxeAddRecord ((UINT8 *)Type41Record, NULL); + if (EFI_ERROR (Status)) { + FreePool (Type41Record); + return Status; + } + + FreePool (Type41Record); + InputData++; + InputStrToken++; + } + + return Status; +} diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfo= rmDxeStrings.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Smbios= PlatformDxeStrings.uni new file mode 100644 index 000000000000..c8176e31ab45 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxeSt= rings.uni @@ -0,0 +1,21 @@ +/** @file + * Based on files under Nt32Pkg/MiscSubClassPlatformDxe/ + * + * Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ * 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 + * +**/ + + +/=3D# + +#langdef en-US "English" + +#include "Type08/PlatformPortConnector.uni" +#include "Type09/PlatformSystemSlot.uni" +#include "Type11/PlatformOemString.uni" +#include "Type41/PlatformOnboardDevicesExtended.uni" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/Platf= ormPortConnector.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Ty= pe08/PlatformPortConnector.uni new file mode 100644 index 000000000000..7a373f048594 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type08/PlatformPort= Connector.uni @@ -0,0 +1,22 @@ +/** @file + + Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_1 #= language en-US "VGA1 - Rear VGA Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_1 #= language en-US "DB-15 Male (VGA)" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_2 #= language en-US "Front Panel USB 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_2 #= language en-US "USB" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_3 #= language en-US "Rear Panel USB 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_3 #= language en-US "USB" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_4 #= language en-US "RJ1 - BMC RJ45 Port" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_4 #= language en-US "RJ45 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_5 #= language en-US "OCP1 - OCP NIC 3.0 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_5 #= language en-US "OCP NIC 3.0" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_INTERNAL_REFERENCE_DESIGNATOR_6 #= language en-US "UART1 - BMC UART5 Connector" +#string STR_PLATFORM_DXE_PORT_CONNECTOR_EXTERNAL_REFERENCE_DESIGNATOR_6 #= language en-US "DB-9 female" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/Platf= ormSystemSlot.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type0= 9/PlatformSystemSlot.uni new file mode 100644 index 000000000000..b1722e14e511 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type09/PlatformSyst= emSlot.uni @@ -0,0 +1,20 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_1 #language en-US "S0 = Riser x32 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_2 #language en-US "S0 = Riser x32 - Slot 2" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_3 #language en-US "S0 = Riser x32 - Slot 3" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_4 #language en-US "S1 = Riser x24 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_5 #language en-US "S1 = Riser x24 - Slot 2" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_6 #language en-US "S1 = Riser x24 - Slot 3" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_7 #language en-US "S1 = Riser x8 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_8 #language en-US "S0 = OCP NIC 3.0" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_9 #language en-US "S0 = NVMe M.2 - Slot 1" +#string STR_PLATFORM_DXE_SYSTEM_SLOT_DESIGNATION_10 #language en-US "S0 = NVMe M.2 - Slot 2" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/Platf= ormOemString.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11= /PlatformOemString.uni new file mode 100644 index 000000000000..ede9f24aabe7 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type11/PlatformOemS= tring.uni @@ -0,0 +1,11 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_STRING_1 #language en-US "www.amperecomputing.c= om" diff --git a/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/Platf= ormOnboardDevicesExtended.uni b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatf= ormDxe/Type41/PlatformOnboardDevicesExtended.uni new file mode 100644 index 000000000000..868e06236636 --- /dev/null +++ b/Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/Type41/PlatformOnbo= ardDevicesExtended.uni @@ -0,0 +1,10 @@ +/** @file + + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# + +#string STR_PLATFORM_DXE_ONBOARD_DEVICES_EXTENDED_DEVICE_TYPE_INSTANCE #l= anguage en-US "Onboard VGA" --=20 2.39.0