From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 7C19FAC14BC for ; Fri, 9 Feb 2024 17:08:47 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=ECV0ZAt76xgRtpPKHjjnZpT49f7Pao3HNTVYVqlvJek=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1707498526; v=1; b=KONjYt9m00KrUUZO9eblY2cjAOlK3kFhWk7kaX38s0bPYbyqtlEoydeyzQUehF3kxA4WPhoy wdLsrG0qPOrQgKRYsZ9FNMlZvEC3QOZgy68uvY9fRzNA38JL/WD2p7/SgzNMho2hdryhQVakJv2 8Cg05TP6myA4Bg6kTK5cgBIE= X-Received: by 127.0.0.2 with SMTP id pfjcYY7687511xzCEcpYfvLQ; Fri, 09 Feb 2024 09:08:46 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.12]) by mx.groups.io with SMTP id smtpd.web11.17360.1707498525670298219 for ; Fri, 09 Feb 2024 09:08:45 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10979"; a="5258201" X-IronPort-AV: E=Sophos;i="6.05,257,1701158400"; d="scan'208";a="5258201" X-Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2024 09:08:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.05,257,1701158400"; d="scan'208";a="2372465" X-Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orviesa008.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 09 Feb 2024 09:08:45 -0800 X-Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 9 Feb 2024 09:08:44 -0800 X-Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 9 Feb 2024 09:08:44 -0800 X-Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Fri, 9 Feb 2024 09:08:44 -0800 X-Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.40) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 9 Feb 2024 09:08:44 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m4GqfYPrQIse1zPb/pQIzPuB4R1CJvrNvm4dOnpP53oGa/sTUV2xT5ppDNJlDQgUaNW/ZrBFkJwHeGhWk4MpUWzlZXFXz6UaxsvWQmZWieTf35FMmA4rlml7hHv+Kb5B546GshKct9+m3s8DU7xom41gY2C9jQcbWUchLha441fh69YjxhD/y7RRO6/fB6BJdnjJhsemfdCzMUKC9ZI63mRVtii3DXxx8KqpQ1wUsNiBJNM3dDROOVYIr5drwvG3UXePl2vZeKcihaF8Zq4ndJLWkUnrYuIEq2VTdy34g9jJPvCmZQMTQDNdHkRWrN2Buk5k5aZjvlJP02K7orBuZw== 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=9IuDkCuhdLSnOct8S2hvrq2ScgIIpgnVXpATpJfP2E8=; b=go1cufkhmHrRgdNLQRTdfKcxmZTc3+Oz7m42fUCmR5ljn1ZjwM2p7Ar4AdCt2iAHg5NJBAYTbFd214YXBDxS8pMq9khXc421fUSLfsbpOsEh8L8ILyaI5iXjgXwsNLjBg0SUFT7pOKgUF03IZWwmhwYdulIWoXTM1a6LrQGs1X5HXHpcaN+MjmtsO+dR5E/NZJuVqDIv8XHS6LU22QhcLs1Q7Ts0a8hbw2LkK1XNVPsH0309DL7fr8fH+S6LAJX3L3yuDfZZeQI3nZgS1rcq9CI+dzb5qD2X12pOtXBfiRew86uREEP97xbztbPEua6G2sMGrQGG5zSviYeu1NADzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none X-Received: from BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by MN6PR11MB8196.namprd11.prod.outlook.com (2603:10b6:208:47b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7270.27; Fri, 9 Feb 2024 17:08:40 +0000 X-Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::aced:fdb2:cf39:5641]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::aced:fdb2:cf39:5641%6]) with mapi id 15.20.7270.025; Fri, 9 Feb 2024 17:08:40 +0000 From: "Chiu, Chasel" To: "Clark-williams, Zachary" , "devel@edk2.groups.io" CC: "Desimone, Nathaniel L" , Liming Gao , "Dong, Eric" Subject: Re: [edk2-devel] [PATCH] MinPlatformPkg/PhatAcpiLib: adding Phat library Thread-Topic: [PATCH] MinPlatformPkg/PhatAcpiLib: adding Phat library Thread-Index: AQHaWVSyS/ZYDg3BVkS38YPuGjDk1rECQkPw Date: Fri, 9 Feb 2024 17:08:40 +0000 Message-ID: References: <20240206233142.5752-1-zachary.clark-williams@intel.com> In-Reply-To: <20240206233142.5752-1-zachary.clark-williams@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5483:EE_|MN6PR11MB8196:EE_ x-ms-office365-filtering-correlation-id: 5062f8de-56d0-421c-a506-08dc2991c34a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: +agq2VgxSPOoedwApur2ApF+ve6x0UuhBj425jmKxTLSjDYScvQLzDk7BVokZwXf4geLrQQsoQdaTANveDXNPunOfdfTR3MIP+D2XKfYNX9asnTzfAtK95Yr+B9bT+fW13sijFV+ckN2ePdJq3E1UM/GtYNrduU2R1Yfx1WPDUEhjyjYw1abkhQh7yMiU7gd7QD7gYeqbUM00Wf+iKLybY2MHbKkllD9+TBjnPS87QorA0bUc1fGHCXEtXuvJw5riw+hl2PYSDNUwQb28u5cn5UPtJVPEblJCzB3uqGIwcu86gagq18SLHpuhBE4YBX4YjyJ1D3cKbcN4EnKcB2v76IhR3uVJzp0kZeBjUPt48kNjg49SzZLdCDuHA+FQ4toolGotjeBMGvL+Ngl2USnUVBtcC98GZo7TUBVqbdIsA1UvBH5DSq5KtWFkMvaMEXnJo0tJI9DJGZe9ILJ66aVU8gW6prjlVVpcs0TlmZ2ei2pjZ5kSobvbv6Jyg3fgIvxlalDqfggQtsBlfgSatv9VrIJaZx21XWKmfGEJIzYgtSHvmN0NN9/mkqlpB9972/FKTfBgaoX8KcgixdWG/daJsA7E4e3KBfjEBPz5a+4Mkc= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?P+lKViiGWQtzMIVt9u3OOasY+B956z0Q4TgfMfUVfeqIt7jvTPk9y/J0/GjT?= =?us-ascii?Q?xn5/HkoMKbqTs2Bxm2a1AxSDznGDnITKhW168/s6mCUIYQZtL5GClC4GK5Dl?= =?us-ascii?Q?rJ/7bUiJ4ERWt7xMlCEU9zGyO0HwofMAYV0tbjHXoJgg8ucDWiG1KdEahoaT?= =?us-ascii?Q?Rcrx0EYqZXU6vqh7IaaR5tP4eSLfo/ZLpGcVUR28t5yxi3WNe0wCFsSIRujs?= =?us-ascii?Q?DZ38P+euy4NGNinKpVHhcmDqZRLZf1wt6U0Ph9+ZbWAe2ayiNLndJ4jTdfcn?= =?us-ascii?Q?9VS/NUTvv8kHzsoWE3CPNe7lZw2dYvCX0kgrz1dm5vKtidWY5Gws9I5I77p1?= =?us-ascii?Q?P1PPFHLyXn3z4ba3/36wxilO+K7Dxr2K5nGn2rdojLEBt2oYzQnu2qdDspLR?= =?us-ascii?Q?yQLdeo7RPqf2gd0jRGibvD/x+Pb4ICpo4blXTorerRTeLlD2ZVNa3lUW+zen?= =?us-ascii?Q?TNnMYptYUX9ujrT4VBlq+g+H4Ndigd0wKtCgwGnsFsdboXdm6rRz9ng7qYip?= =?us-ascii?Q?RJLYqvhV5zhxlZAP8lwAyXZBUsgi3xMV1B/oBVoD6aBjrKE7AJf9AKT7P/a7?= =?us-ascii?Q?M3H2p3HT73JhsDX6JSKdBrp7meS+ll6w1omOHM5OY1lYLToe5wAsv7Qoe0o1?= =?us-ascii?Q?6lsk3fw+CCX8C6jxKyvDHHu7vXN/E4gq7c7pBLwcKkRUtp8z4z6Afw7JOS5s?= =?us-ascii?Q?VgO0e0JCAwbXm4HHfpVgqHA3yT53o6i54jMl6RltGB/0oUPvFu5nY6Cccki+?= =?us-ascii?Q?UMr//wqvyb79DKqN2sRgRGWHfh2EGUt26w4/dLseHnoEXF1PGzhhScMfg7+B?= =?us-ascii?Q?e2AJ4u/utt7DKLW5vm/WRBmvG96PuazPc/atNYZ1lD5wONYZ61w53ibZaF5A?= =?us-ascii?Q?rudH8QSuL56hu3+wY3F16rdbgkoDu+2U7lovaImj8oYNvNVX6e55ensO5eOG?= =?us-ascii?Q?unJrJRsxwFuAWlUujWlLtBJ5Ea5j+LRWU69T9LftJQwFWYjUMfzsECySAahu?= =?us-ascii?Q?jp7t4DIJ/fbFSk8bnq/VPjVurxrEbYnRtmSoNS/E0ZYFuY4Y9ZkRJRM3fdP+?= =?us-ascii?Q?D7M14DEJIC6Mms0uTrhQw/mm8lYsuOKSqXffaVIaIxLbCjV8ciF61ajJWJL2?= =?us-ascii?Q?SqrbFV9qh1sbDffmfaeY02DpLIUGUwu7Ue22e9vffyBX10jfr3EDGohfhxsf?= =?us-ascii?Q?H1NtLgIfF4BZEiMK8uUhWa7n5ZCARPaZ6h2Sc1NlM7RWiz0gqqxAIBLlKPuO?= =?us-ascii?Q?YUTGoZNZ1IAr9NXnaU0wjK6Gjd4byyMvU1gxEFwfHMo2dKXCFhsk8eEK5sag?= =?us-ascii?Q?MPjkshPVUyT5Hf5+QwpKWZGuLLTYrYFh4+/wQ84W3CVzKzqFk5fUaoc71KYT?= =?us-ascii?Q?UTS2Fqkv9CrlspOnK5xl/idYG1KUXppWuOSN5y49opbzmbl8GcbBA93jwsil?= =?us-ascii?Q?nmUuIO8zxyb+3LJm9M7YTNTptAEwISkSeab2BOAvvIBGTvqRhwILfg4GL8/Z?= =?us-ascii?Q?c3FzVo6wDQt9X6vnp0OD+YgwZfAAH7oyjkfhJ4T7Mf32/W0veQdQkC3DliUc?= =?us-ascii?Q?wVPaM+fai++a/0Ocw1wJ5TX2GMRDe9066JaM+vT2?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5062f8de-56d0-421c-a506-08dc2991c34a X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Feb 2024 17:08:40.3131 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CW1P7gqCw3BEIJcOXJFSecSt++pagM+GoLIlyZPNS6ABzTg75bPN1QRYo6XFs8l8j+zGHYGEdvsD43lpwWAVrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR11MB8196 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,chasel.chiu@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: zMozLBNIrpWtlAC911UbshvCx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=KONjYt9m; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Patch has been merged with some minor cleanup and coding style correction: = https://github.com/tianocore/edk2-platforms/commit/b5fa396700e728c0e18b5122= 29226f65337bf74a Thanks, Chasel > -----Original Message----- > From: Clark-williams, Zachary > Sent: Tuesday, February 6, 2024 3:32 PM > To: devel@edk2.groups.io > Cc: Clark-williams, Zachary ; Chiu, Cha= sel > ; Desimone, Nathaniel L > ; Liming Gao ; > Dong, Eric > Subject: [PATCH] MinPlatformPkg/PhatAcpiLib: adding Phat library >=20 > From: Zachary clark-Williams >=20 > Adding a Platform Health Assessment Table (PHAT) ACPI library for general= feature > interface with table. MemoryHealthInsights, FSPv and Chasmfalls all use t= his > table and will migrate to utilize the library for accessing and appending= the PHAT. >=20 > Change-Id: I715fa543e81403ee8e159c2c2afd8b8709234a11 > Hsd-es-id: 14019467886 > Cc: Chasel Chiu > Cc: Nate DeSimone > Cc: Liming Gao > Cc: Eric Dong > Signed-off-by: Zachary Clark-Williams > --- > .../Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.c | 292 ++++++++++++++++++ > .../Library/PhatAcpiLib/DxePhatAcpiLib.inf | 45 +++ > .../Include/Library/PhatAcpiLib.h | 40 +++ > .../Intel/MinPlatformPkg/MinPlatformPkg.dec | 2 + > .../Intel/MinPlatformPkg/MinPlatformPkg.dsc | 3 + > 5 files changed, 382 insertions(+) > create mode 100644 > Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.c > create mode 100644 > Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.inf > create mode 100644 > Platform/Intel/MinPlatformPkg/Include/Library/PhatAcpiLib.h >=20 > diff --git > a/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.c > b/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.c > new file mode 100644 > index 000000000..925f8484b > --- /dev/null > +++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpi > +++ Lib.c > @@ -0,0 +1,292 @@ > +/** @file > + Dxe Platform Health Assessment Table Library > + > + Copyright (c) 2024, Intel Corporation. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent **/ > + > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include #include > + > + > +#include > +#include > + > +GLOBAL_REMOVE_IF_UNREFERENCED EFI_ACPI_TABLE_PROTOCOL > +*mAcpiTableProtocol =3D NULL; > + > +/** > + Initialize the header of the Platform Health Assessment Table. > + > + @param[out] Header The header of the ACPI Table. > + @param[in] OemId The OEM ID. > + @param[in] OemTableId The OEM table ID for the Phat. > +**/ > +VOID > +InitPhatTableHeader ( > + OUT EFI_ACPI_DESCRIPTION_HEADER *Header, > + IN UINT8 *OemId, > + IN UINT64 *OemTableId > + ) > +{ > + ZeroMem (Header, sizeof (EFI_ACPI_DESCRIPTION_HEADER)); > + > + Header->Signature =3D > +EFI_ACPI_6_5_PLATFORM_HEALTH_ASSESSMENT_TABLE_SIGNATURE; > + // > + // total length (FVI, Driver Health). > + // > + Header->Length =3D 0; > + Header->Revision =3D > EFI_ACPI_6_5_PLATFORM_HEALTH_ASSESSMENT_TABLE_REVISION; > + Header->Checksum =3D 0; > + CopyMem (Header->OemId, OemId, sizeof (Header->OemId)); > + CopyMem (&Header->OemTableId, OemTableId, sizeof (UINT64)); > + Header->OemRevision =3D PcdGet32 (PcdAcpiDefaultOemRevision); > + Header->CreatorId =3D PcdGet32 (PcdAcpiDefaultCreatorId); > + Header->CreatorRevision =3D PcdGet32 (PcdAcpiDefaultCreatorRevision); = } > + > +/** > + This function scan ACPI table entry point. > + > + @retval ACPI table entry pointer > +**/ > +VOID * > +SearchAcpiTablePointer ( > + VOID > + ) > +{ > + EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; > + EFI_ACPI_DESCRIPTION_HEADER *Entry; > + EFI_STATUS Status; > + > + Entry =3D NULL; > + > + Status =3D gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOI= D > + **) &mAcpiTableProtocol); if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_INFO, "[%a] Locate gEfiAcpiTableProtocolGuid failed wi= th > status: [%r].\n", __FUNCTION__, Status)); > + return NULL; > + } > + > + // > + // Find ACPI table RSD_PTR from the system table. > + // > + Status =3D EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID > + **) &Rsdp); if (EFI_ERROR (Status)) { > + Status =3D EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, > + (VOID **) &Rsdp); } > + > + if (EFI_ERROR (Status) || (Rsdp =3D=3D NULL)) { > + DEBUG ((DEBUG_INFO, "[%a] Can't find RSD_PTR from system table! \n", > __FUNCTION__)); > + return NULL; > + } else if (Rsdp->Revision >=3D > EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION && Rsdp- > >XsdtAddress !=3D 0) { > + Entry =3D (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->XsdtAddress; > + } else if (Rsdp->RsdtAddress !=3D 0) { > + Entry =3D (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress; > + } > + > + if (Entry =3D=3D NULL) { > + DEBUG ((DEBUG_INFO, "[%a] XsdtAddress and RsdtAddress are NULL! \n", > __FUNCTION__)); > + return NULL; > + } > + > + return Entry; > +} > + > +/** > + This function calculates and updates an UINT8 checksum. > + > + @param[in] Buffer Pointer to buffer to checksum > + @param[in] Size Number of bytes to checksum > +**/ > +VOID > +AcpiPlatformChecksum ( > + IN UINT8 *Buffer, > + IN UINTN Size > + ) > +{ > + UINTN ChecksumOffset; > + > + if (Buffer =3D=3D NULL) { > + return; > + } > + > + ChecksumOffset =3D OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum); > + > + // Set checksum to 0 first > + Buffer[ChecksumOffset] =3D 0; > + > + // Update checksum value > + Buffer[ChecksumOffset] =3D CalculateCheckSum8 (Buffer, Size); } > + > +/** > + Convert AIP data block to PHAT ACPI style, and publish it onto > + an existing ACPI PHAT structure or initialize and install a new > + instance. > + > + @param[in] InfoBlock Point to AIP data block. > + @param[in] InfoBlockSize The size of AIP data. > + > + @retval EFI_SUCCESS Success > + @retval EFI_OUT_OF_RESOURCES Out of memory space. > + @retval EFI_INVALID_PARAMETER Either InfoBlock is NULL, > + TableKey is NULL, or > + AcpiTableBufferSize and the size > + field embedded in the ACPI table > + pointed to by AcpiTableBuffer > + are not in sync. > + @retval EFI_ACCESS_DENIED The table signature matches a table al= ready > + present in the system and platform pol= icy > + does not allow duplicate tables of thi= s type. > + @retval EFI_NOT_FOUND AcpiEntry is NULL. > +**/ > +EFI_STATUS > +EFIAPI > +InstallPhatTable ( > + IN VOID *InfoBlock, > + IN UINTN InfoBlockSize > + ) > +{ > + EFI_STATUS Status; > + EFI_ACPI_DESCRIPTION_HEADER *AcpiEntry; > + EFI_ACPI_SDT_PROTOCOL *AcpiSdtProtocol; > + EFI_ACPI_DESCRIPTION_HEADER *PhatHeader; > + UINT8 *PhatTable; > + UINT32 PhatLen; > + UINTN TableIndex; > + UINT8 *TableHeader; > + EFI_ACPI_TABLE_VERSION TableVersion; > + UINTN TableKey; > + > + if ((InfoBlock =3D=3D NULL) || (InfoBlockSize =3D=3D 0)) { > + DEBUG ((DEBUG_ERROR, "[%a] Table Data Invalid!\n", __FUNCTION__)); > + return EFI_INVALID_PARAMETER; > + } > + > + Status =3D EFI_SUCCESS; > + TableIndex =3D 0; > + TableKey =3D 0; > + TableHeader =3D NULL; > + > + AcpiEntry =3D SearchAcpiTablePointer (); if (AcpiEntry =3D=3D NULL) { > + DEBUG((DEBUG_ERROR, "[%a] ACPI table pointer not found\n", > __FUNCTION__)); > + return EFI_NOT_FOUND; > + } > + > + // > + // Locate the EFI_ACPI_SDT_PROTOCOL. > + // > + Status =3D gBS->LocateProtocol ( > + &gEfiAcpiSdtProtocolGuid, > + NULL, > + (VOID **)&AcpiSdtProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "[%a] Failed to locate AcpiSdt with status: %r\= n", > __FUNCTION__, Status)); > + return Status; > + } > + > + // Search ACPI table for PHAT > + while (!EFI_ERROR (Status)) { > + Status =3D AcpiSdtProtocol->GetAcpiTable ( > + TableIndex, > + (EFI_ACPI_SDT_HEADER **)&TableHeader, > + &TableVersion, > + &TableKey > + ); > + if (!EFI_ERROR (Status)) { > + TableIndex++; > + > + if (((EFI_ACPI_SDT_HEADER *) TableHeader)->Signature =3D=3D > + EFI_ACPI_6_5_PLATFORM_HEALTH_ASSESSMENT_TABLE_SIGNATURE) > + { > + DEBUG ((DEBUG_INFO, "[%a] Existing Phat AcpiTable is found.\n", > __FUNCTION__)); > + break; > + } > + } > + } > + > + if (!EFI_ERROR (Status)) { > + // > + // A PHAT is already in the ACPI table, update existing table and re= -install > + // > + PhatHeader =3D (EFI_ACPI_DESCRIPTION_HEADER *) TableHeader; > + PhatLen =3D PhatHeader->Length + (UINT32) InfoBlockSize; > + PhatTable =3D (UINT8 *) AllocateZeroPool (PhatLen); > + if (PhatTable =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "[%a] Failed to allocated new PHAT pool with.= \n", > __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + // Copy original table content to the new PHAT table pool > + CopyMem (PhatTable, TableHeader, PhatHeader->Length); > + > + // Append InfoBlock in the end of the origin PHAT > + CopyMem (PhatTable + PhatHeader->Length, InfoBlock, InfoBlockSize); > + > + // Update the PHAT head pointer. > + PhatHeader =3D (EFI_ACPI_DESCRIPTION_HEADER *) PhatTable; > + > + // Update the length field to found table plus appended new data > + PhatHeader->Length =3D PhatLen; > + > + // Uninstall the origin PHAT from the ACPI table. > + Status =3D mAcpiTableProtocol->UninstallAcpiTable ( > + mAcpiTableProtocol, > + TableKey > + ); > + ASSERT_EFI_ERROR (Status); > + > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "[%a] Failed to uninstall existing PHAT ACPI = table > with status: %r\n", __FUNCTION__, Status)); > + FreePool (PhatTable); > + return Status; > + } > + } else { > + // > + // PHAT ACPI table does not exist, install new one > + // > + PhatTable =3D AllocateZeroPool (InfoBlockSize + sizeof > (EFI_ACPI_DESCRIPTION_HEADER)); > + if (PhatTable =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "[%a] Failed to allocate new PHAT pool.\n", > __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + PhatHeader =3D (EFI_ACPI_DESCRIPTION_HEADER *) PhatTable; > + > + // Initialize the header of the Platform Health Assessment Table. > + InitPhatTableHeader (PhatHeader, AcpiEntry->OemId, > + &AcpiEntry->OemTableId); > + > + PhatHeader->Length =3D sizeof (EFI_ACPI_DESCRIPTION_HEADER) + > + (UINT32)InfoBlockSize; > + > + // Connect a telemetry data to ACPI table header. > + CopyMem (PhatTable + sizeof (EFI_ACPI_DESCRIPTION_HEADER), > + InfoBlock, InfoBlockSize); } > + > + // Update table checksum > + AcpiPlatformChecksum ((UINT8 *) PhatTable, > + ((EFI_ACPI_DESCRIPTION_HEADER *) PhatHeader)->Length); > + > + // Install or update the Phat table. > + Status =3D mAcpiTableProtocol->InstallAcpiTable ( > + mAcpiTableProtocol, > + PhatTable, > + PhatHeader->Length, > + &TableKey > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_INFO, "[%a] Install Phat AcpiTable failed, Status =3D > + [%r]. \n", __FUNCTION__, Status)); } > + > + if (PhatTable !=3D NULL) { > + FreePool (PhatTable); > + } > + > + DEBUG ((DEBUG_INFO, "[%a] Install PHAT table, status: %r \n", > +__FUNCTION__, Status)); > + return Status; > +} > diff --git > a/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.i= nf > b/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpiLib.i= nf > new file mode 100644 > index 000000000..18374b265 > --- /dev/null > +++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/PhatAcpiLib/DxePhatAcpi > +++ Lib.inf > @@ -0,0 +1,45 @@ > +## @file > +# Dxe Platform Health Assessment Table Library # # Copyright (c) > +2024, Intel Corporation. All rights reserved.
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent ### > + > +[Defines] > + INF_VERSION =3D 0x00010017 > + BASE_NAME =3D DxePhatAcpiLib > + FILE_GUID =3D 3932-bb84-adfb-4c7a-bc59-e33fc7ad6e20 > + VERSION_STRING =3D 1.0 > + MODULE_TYPE =3D DXE_DRIVER > + LIBRARY_CLASS =3D DxePhatAcpiLib|DXE_DRIVER > + > +[Sources] > + DxePhatAcpiLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MinPlatformPkg/MinPlatformPkg.dec > + > +[LibraryClasses] > + DebugLib > + BaseMemoryLib > + MemoryAllocationLib > + UefiBootServicesTableLib > + > +[Guids] > + gEfiAcpiTableGuid ## CONSUMES > + gEfiAcpi10TableGuid ## CONSUMES > + > +[Protocols] > + gEfiAcpiTableProtocolGuid ## CONSUMES > + gEfiAcpiSdtProtocolGuid ## CONSUMES > + > +[Pcd] > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision ## > CONSUMES > + > +[Depex] > + TRUE > diff --git a/Platform/Intel/MinPlatformPkg/Include/Library/PhatAcpiLib.h > b/Platform/Intel/MinPlatformPkg/Include/Library/PhatAcpiLib.h > new file mode 100644 > index 000000000..fe4fe5f5b > --- /dev/null > +++ b/Platform/Intel/MinPlatformPkg/Include/Library/PhatAcpiLib.h > @@ -0,0 +1,40 @@ > +/** @file > + Platform Health Assessment Table Library Definitions > + > + Copyright (c) 2024, Intel Corporation. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent **/ > + > +#ifndef _PHAT_ACPI_LIB_H_ > +#define _PHAT_ACPI_LIB_H_ > + > +/** > + Convert AIP data block to PHAT ACPI style, and publish it onto > + an existing ACPI PHAT structure or initialize and install a new > + instance. > + > + @param[in] InfoBlock Point to AIP data block. > + @param[in] InfoBlockSize The size of AIP data. > + > + @retval EFI_SUCCESS Success > + @retval EFI_OUT_OF_RESOURCES Out of memory space. > + @retval EFI_INVALID_PARAMETER Either InfoBlock is NULL, > + TableKey is NULL, or > + AcpiTableBufferSize and the size > + field embedded in the ACPI table > + pointed to by AcpiTableBuffer > + are not in sync. > + @retval EFI_ACCESS_DENIED The table signature matches a table al= ready > + present in the system and platform pol= icy > + does not allow duplicate tables of thi= s type. > + @retval EFI_NOT_FOUND AcpiEntry is NULL. > +**/ > +EFI_STATUS > +EFIAPI > +InstallPhatTable ( > + IN VOID *InfoBlock, > + IN UINTN InfoBlockSize > + ); > + > +#endif // _PHAT_ACPI_LIB_H_ > \ No newline at end of file > diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > index 74e1bce87..09312d329 100644 > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > @@ -88,6 +88,8 @@ > LargeVariableReadLib|Include/Library/LargeVariableReadLib.h > LargeVariableWriteLib|Include/Library/LargeVariableWriteLib.h >=20 > + PhatAcpiLib|Include/Library/PhatAcpiLib.h > + > [PcdsFixedAtBuild, PcdsPatchableInModule] >=20 >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFspMaxUpdSize|0x00000000|UINT32|0x80 > 000000 > diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > index ee5d21112..4b295babf 100644 > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > @@ -64,6 +64,7 @@ >=20 > PciSegmentInfoLib|MinPlatformPkg/Pci/Library/PciSegmentInfoLibSimple/PciS= eg > mentInfoLibSimple.inf >=20 > PlatformBootManagerLib|MinPlatformPkg/Bds/Library/DxePlatformBootManager > Lib/DxePlatformBootManagerLib.inf >=20 > AslUpdateLib|MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.= in > f > + > + PhatAcpiLib|MinPlatformPkg/Acpi/Library/DxePhatAcpiLib/DxePhatAcpiLib. > + inf >=20 > # > # Misc > @@ -217,5 +218,7 @@ > MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeVariableReadLib.i= nf > MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeVariableWriteLib.= inf >=20 > + MinPlatformPkg/Acpi/Library/DxePhatAcpiLib/DxePhatAcpiLib.inf > + > [BuildOptions] > *_*_*_CC_FLAGS =3D -D DISABLE_NEW_DEPRECATED_INTERFACES > -- > 2.39.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115313): https://edk2.groups.io/g/devel/message/115313 Mute This Topic: https://groups.io/mt/104209287/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-