From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web11.915.1685461958066800646 for ; Tue, 30 May 2023 08:52:38 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=OSNP2dXU; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: ankit.sinha@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685461958; x=1716997958; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=EVruqEjWzdeczrja3qGrSHx8lObQ8YI+xyTCUpFGT00=; b=OSNP2dXUiuRWXGy+pGwrfs7X1j5zTbsqysoec7ET60a9kii7tkD4dYUt pIcnxpUx+bgdVGWUQv4oxOqC5XLtoToBh/M2oXF3jRyP3azUbYfzTY2LU LxGlVRirmJJFEw0LHee2pNnx+vUdwZL5XsPdFg0qzuITbblImJSVeHu// uZ8+Q4GL5G/s1jRo9A1Z5htILH6E8GyFt4SAoq+EYVu4oappdJAtUR1xZ smmKaS4bu0Pi9Umrz0rOQCa1hEsFOp19v3riuEWeVoY7oJWDabH7/zQS6 XqEXTeJR+JZrlN3Gdxv2eQ9LB+o4XYoK+nsirjy5/rgtqyXI+D4rYedp3 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10726"; a="358212424" X-IronPort-AV: E=Sophos;i="6.00,204,1681196400"; d="scan'208";a="358212424" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 08:52:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10726"; a="880819126" X-IronPort-AV: E=Sophos;i="6.00,204,1681196400"; d="scan'208";a="880819126" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga005.jf.intel.com with ESMTP; 30 May 2023 08:52:37 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 30 May 2023 08:52:36 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) 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.23 via Frontend Transport; Tue, 30 May 2023 08:52:36 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.177) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Tue, 30 May 2023 08:52:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nInpHjApJsHHLvBoOmBLweY22pHa2tDFN2wTmhahDshFYIupDqtlH/7z2Xf0Y80ffyouJlUc/xE8R0DEQic3x4HB5uIJlbxQn1AE0aKCaJe09++IH97xiTGwKM+T3iW1KDWTY97ChifGFdXsAoq+bTK1gatXuEo4d5JTgJUo4zZ4Hcx0/1TaS5iJ3V1VfvXKAbyIPLWQuTKam1et2ZeiK/4VMWnbd7DXopkM+gzMZxq2lfxoCuVOCc13bZjHpbqiluI+E1Oyjpn04VveRE5vTks7EceKXoKHs46fCp0NydHLkmwlhv00YgNK0gjDV3oS05sF9Jc+S1HLI8eIKv+BTg== 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=GXiG8Ythfz+MD1TjfeLD3xrP1nj6c6KDuIp7NvKiqHc=; b=jaS6MIX3fV34YTp3fxJXcAbfQPfaaugjUuI87n3lm6pdCsvFQF9UdiAAVm9uXOsG+8s5l6bhcvLy7t08iuoQWdQKjKCL2dETcANigKgcvtYk+ONsvFDjNTrBCXd1jMTxyAqdHmsqdZQ30cr5KDLr2hsidWYiH5qq7YT2Y0U3PCXYZjfy6yW8dJ0AyNcYgmhUhaW5UWqP0+DPn5WN0l6bIw8xgsub6UhomtkK8UKg95C1jQuGA5tDxOhg+lffkgA3sSPqqv/XmGuRF6P1hi0ly4iIgU8Z4x4pSMp30mMOakvKnd51M2i1s+JfNhdAuHy9H5/fZbT9PgOEEZtHILjDcw== 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 Received: from MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by MW4PR11MB7152.namprd11.prod.outlook.com (2603:10b6:303:222::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6433.23; Tue, 30 May 2023 15:52:31 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::720:4293:3c39:acd9]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::720:4293:3c39:acd9%7]) with mapi id 15.20.6433.022; Tue, 30 May 2023 15:52:30 +0000 From: "Ankit Sinha" To: "Ke, VincentX" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Oram, Isaac W" , "Gao, Liming" , "Dong, Eric" Subject: Re: [PATCH v9] MinPlatformPkg: Update HWSignature field in FACS Thread-Topic: [PATCH v9] MinPlatformPkg: Update HWSignature field in FACS Thread-Index: AQHZjhtF1v9gzmIhD0O2OyHc+RB27a9zARGQ Date: Tue, 30 May 2023 15:52:30 +0000 Message-ID: References: <20230524083923.1963-1-vincentx.ke@intel.com> In-Reply-To: <20230524083923.1963-1-vincentx.ke@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW5PR11MB5908:EE_|MW4PR11MB7152:EE_ x-ms-office365-filtering-correlation-id: 03fce65f-fe89-4d1a-3b80-08db6125e05b x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xxXwmlWnMwG1U8UkMwaxVAhmB73hKDYML2VDuxevNCYrpUXrM3S6UOMGWEqP6neKFPCqgkI6bhePVzMklXKPJMtLDRt95iWXcsEbTF9P8/i2/TLzvrQJoLkmzCSOGBcS8H6t6zhn2Ip4PrrGrfIZLZ+UIUUTes4JImwY72kB4RqxovNFCDAS00urU/2AQ+FJWsLArChE6GWxqYcAhh4R6v9VHySOF3MsDp7wUxJKzd4NtwKy0v+oxA/R35Olznt4RsAEuMa/AnpET6wrnI/dmjGGWeIKROsHNxCrfQ8PqP8h2fxPevHMTh7fNmuTTPcMQMp/vJ07ugg6bBx7Bu9+Fmp/qp/9maKFXUlhVsT0qJ7hNgROG+9rvq7iPy1/c9qJZHwNN4UGHgDoPPjLQmbunp/7hjGPjqRiqBMpu2uu54d5hE8KuAxL/xEIbyDRBiEcEh0gnH0GVqCMQQrTQLpV5h8Kbvf7FKIghJxVogvDpM4+KkzbbhC+kE/+i3RjMU1r3PzkYMOvsfJBrX5/JoedF8VjNjGLKJz2aJDzulncv21era18TP09xxurkhP0Z2UerHpxxQs5XNFMEXbs6gqu3tCZ2RbQp6uB8NvRHKpVSfA= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(346002)(39860400002)(396003)(366004)(376002)(136003)(451199021)(33656002)(86362001)(110136005)(38070700005)(54906003)(4326008)(316002)(478600001)(64756008)(66946007)(66556008)(66476007)(76116006)(66446008)(966005)(7696005)(71200400001)(5660300002)(55016003)(8936002)(8676002)(41300700001)(30864003)(2906002)(15650500001)(52536014)(38100700002)(122000001)(82960400001)(6506007)(53546011)(9686003)(26005)(186003)(107886003)(83380400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?xqGp5QTgyWnKz5Tt4kdE6syKoU8mf4LAo4FCVRCeKCc+siJ2Hlh8vC2kmcWp?= =?us-ascii?Q?gK21WFnfDY6kqbEBzHHfz1Gu2mbxpWplLa8yMV/POHGR5nOS1jIQyEdxWQMM?= =?us-ascii?Q?hytQeYyLSVNNCpHoFUP6p+3EACBHCSwGqJhsc0f9zTLTmKsOeBeizRHR1sjs?= =?us-ascii?Q?cMzeEOuzZ/UsHJ5Ya9Is3VbpTri7Lpatlbo0wP3uDA6WpBb3d9po2w0iaxSS?= =?us-ascii?Q?rosEWiGEy4mO4hrTb8b9JUZpjaOgbz5QLy5gT6Q0uriq3ZkY2FfieVq7rA7B?= =?us-ascii?Q?ze8hERwYLj9uHNvznejy5HMXd3+chM7rRZhy94DUQXYCfte0oXRAdwJc6FY7?= =?us-ascii?Q?RTKV/5iZr7uVh94J4glQcPol4ex/qw4pUeqWF0DuwTNQ6Td87F/C0FCdwQEK?= =?us-ascii?Q?XYOPJNfO7WksZ4BP/sQnlH9S7n2UU5AfJUSSEqI0V8hti3NqllGnza2rN+vb?= =?us-ascii?Q?OsQqLLo9DRPdRg1Uq0g9YnCdH3vbJ3dAZ8rp1wYmJv+yRX5n7a/pcPjKmoMx?= =?us-ascii?Q?tEO9fsx0PQU+xLn1fcJ/kwRgnlk1DLUFd0UwFn8z7h6BiXmZ4sA8fsDeAN1N?= =?us-ascii?Q?4xTr1b7Q8miOfNh0qO448p8N1LcWk/UxjJG39/QoZjSbQAFjReNdLnDj6wdw?= =?us-ascii?Q?yAkO7ZmIna4uW+NpMGqSUmUzw69v6BfKs6aEb8Lha0iwcpj1EMSVeu08uDhc?= =?us-ascii?Q?4rMtw7+Qn6HAW9vTH1Ru/lePJun6wRFcHW7b8mNva65OWR4SUnnBMPWUUzSc?= =?us-ascii?Q?3vrmbbRY/6qrQPuBLPClQ9Q2C4fw6RG9jYiiCAsrFNus3eZ409yQCdfOWCUa?= =?us-ascii?Q?TBuG5NOxpz/N32dtr5vsSsHMmCc4MGe5pRzNpzyD4fUcHyq8m7jgF1+Kuhgm?= =?us-ascii?Q?BZ4GS9HBPde0yXAzcvrCx10fdXJzJ47ZLKnSgXOtXQhE0Gc84SCJogLg5Ajh?= =?us-ascii?Q?Y4rv/3kv252gI7BmngRFZUrNfMAb1poxIRHYyAcSf3W8z/7HAJRN/nfOBLP6?= =?us-ascii?Q?kkBY7BoIy9v+yR3cMYTYuHxp9wCwZ6IIxt+7L8MLPtCkEdEfhFHerqq5C9h1?= =?us-ascii?Q?8kqQbSd2KxFX5ukf0hSPfLeANIO4vMgw7H4mIJqBTNq2AFLJKNm4Pf/dkPsY?= =?us-ascii?Q?8eEfmSho4SLW3f8SOvaW+gZsVs+4TRax1lZpABqV8NDI9a1s311D03Sz7EMn?= =?us-ascii?Q?36PljziF7wHffL74M1uQVx7cPMsPUXhGSO0UraXMboiFulXrTI8HNcYj//Mp?= =?us-ascii?Q?fXgptluaqvD6bbx3I91EsZrYSho0PwIcOdrlstB+0Pv9rZEMuSXQgepLm1MR?= =?us-ascii?Q?UFViXzU6MztMiIPfGvD1lf+zmBK/QulabJmVSjRjZlQK4yMakZ0otlO0B2Jx?= =?us-ascii?Q?GYBl9M/uGks/G/ygLDx9mnuswvFLdAfEZ8/BSRa96Fjfj/cvGCvSOXf4oEFL?= =?us-ascii?Q?MfmQvdmOpmWmwglIguBTtsb4Emhs1KPwXgkuVoUz9nz3KCOwbVZmV+k/wLTq?= =?us-ascii?Q?nXKQO3dRiOsgyXnILP+8zX3ZW1qk+TiLPaC4hDninJenRYdp2/Cz9HYXnwh7?= =?us-ascii?Q?84aaMbfh9hc1fAwjMX0cM9BZX+gAKjmRbwx/pC8m?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03fce65f-fe89-4d1a-3b80-08db6125e05b X-MS-Exchange-CrossTenant-originalarrivaltime: 30 May 2023 15:52:30.8599 (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: Pb5lWMc7n6nhEv4r1GXRtCrRaizMj6pm8bxovNVIxFEhFQ/rQhUN4npvpqPyJVvw3NyNSbetLQZJEE9/hxEJhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7152 Return-Path: ankit.sinha@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ankit Sinha Thank you, Ankit > -----Original Message----- > From: Ke, VincentX > Sent: Wednesday, May 24, 2023 1:39 AM > To: devel@edk2.groups.io > Cc: Ke, VincentX ; Chiu, Chasel > ; Desimone, Nathaniel L > ; Oram, Isaac W > ; Gao, Liming ; > Dong, Eric ; Sinha, Ankit > Subject: [PATCH v9] MinPlatformPkg: Update HWSignature field in FACS >=20 > From: VincentX Ke >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4428 >=20 > Calculating CRC based on each ACPI table. > Update HWSignature field in FACS based on CRC while ACPI table changed. >=20 > Change-Id: Ic0ca66ff10cda0fbcd0683020fab1bc9aea9b78c > Signed-off-by: VincentX Ke > Cc: Chasel Chiu > Cc: Nate DeSimone > Cc: Isaac Oram > Cc: Liming Gao > Cc: Eric Dong > Cc: Ankit Sinha > Signed-off-by: VincentX Ke > --- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 282 > +++++++++++++++----- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 1 + > 2 files changed, 215 insertions(+), 68 deletions(-) >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index 2f2c96f907..ca1c73f6fe 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -1191,98 +1191,244 @@ PlatformUpdateTables ( > } >=20 >=20 >=20 > /** >=20 > - This function calculates RCR based on PCI Device ID and Vendor ID from= the > devices >=20 > - available on the platform. >=20 > - It also includes other instances of BIOS change to calculate CRC and > provides as >=20 > - HWSignature filed in FADT table. >=20 > + Function prototype for GetAcpiTableCount/CalculateAcpiTableCrc. >=20 > + >=20 > + @param[in] Table The pointer to ACPI table. >=20 > + @param[in] TableIndex The ACPI table index. >=20 > + @param[in] Context The pointer to UINTN for GetAcpiTableCount. >=20 > + The pointer to UINT32 array for CalculateAcpiT= ableCrc. >=20 > **/ >=20 > +typedef >=20 > VOID >=20 > -IsHardwareChange ( >=20 > - VOID >=20 > +(EFIAPI *ACPI_TABLE_CALLBACK)( >=20 > + IN EFI_ACPI_COMMON_HEADER *Table, >=20 > + IN UINTN TableIndex, >=20 > + IN VOID *Context >=20 > + ); >=20 > + >=20 > +/** >=20 > + Enumerate all ACPI tables in RSDT/XSDT. >=20 > + >=20 > + @param[in] Sdt ACPI XSDT/RSDT. >=20 > + @param[in] TablePointerSize Size of table pointer: >=20 > + 4(RSDT) or 8(XSDT). >=20 > + @param[in] CallbackFunction The pointer to > GetAcpiTableCount/CalculateAcpiTableCrc. >=20 > + @param[in] Context The pointer to UINTN for GetAcpiTableCou= nt. >=20 > + The pointer to UINT32 array for Calculat= eAcpiTableCrc. >=20 > +**/ >=20 > +VOID >=20 > +EnumerateAllAcpiTables ( >=20 > + IN EFI_ACPI_DESCRIPTION_HEADER *Sdt, >=20 > + IN UINTN TablePointerSize, >=20 > + IN ACPI_TABLE_CALLBACK CallbackFunction, >=20 > + IN VOID *Context >=20 > ) >=20 > { >=20 > - EFI_STATUS Status; >=20 > - UINTN Index; >=20 > - UINTN HandleCount; >=20 > - EFI_HANDLE *HandleBuffer; >=20 > - EFI_PCI_IO_PROTOCOL *PciIo; >=20 > - UINT32 CRC; >=20 > - UINT32 *HWChange; >=20 > - UINTN HWChangeSize; >=20 > - UINT32 PciId; >=20 > - UINTN Handle; >=20 > - EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=20 > - EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *pFADT; >=20 > - >=20 > - HandleCount =3D 0; >=20 > - HandleBuffer =3D NULL; >=20 > - >=20 > - Status =3D gBS->LocateHandleBuffer ( >=20 > - ByProtocol, >=20 > - &gEfiPciIoProtocolGuid, >=20 > - NULL, >=20 > - &HandleCount, >=20 > - &HandleBuffer >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return; // PciIO protocol not installed yet! >=20 > + UINTN Index; >=20 > + UINTN TableIndex; >=20 > + UINTN EntryCount; >=20 > + UINT64 EntryPtr; >=20 > + UINTN BasePtr; >=20 > + EFI_ACPI_COMMON_HEADER *Table; >=20 > + EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *FadtPtr; >=20 > + >=20 > + Index =3D 0; >=20 > + TableIndex =3D 0; >=20 > + EntryCount =3D (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > TablePointerSize; >=20 > + EntryPtr =3D 0; >=20 > + BasePtr =3D (UINTN)(Sdt + 1); >=20 > + Table =3D NULL; >=20 > + FadtPtr =3D NULL; >=20 > + >=20 > + if (Sdt =3D=3D NULL) { >=20 > + ASSERT (Sdt !=3D NULL); >=20 > + return; >=20 > } >=20 >=20 >=20 > - // >=20 > - // Allocate memory for HWChange and add additional entrie for >=20 > - // pFADT->XDsdt >=20 > - // >=20 > - HWChangeSize =3D HandleCount + 1; >=20 > - HWChange =3D AllocateZeroPool (sizeof(UINT32) * HWChangeSize); >=20 > - ASSERT(HWChange !=3D NULL); >=20 > + for (Index =3D 0; Index < EntryCount; Index++) { >=20 > + EntryPtr =3D 0; >=20 > + Table =3D NULL; >=20 > + CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * TablePointerSize), > TablePointerSize); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table !=3D NULL) { >=20 > + CallbackFunction (Table, TableIndex++, Context); >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + FadtPtr =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table; >=20 > + if (FadtPtr->Header.Revision < > EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) { >=20 > + // >=20 > + // Locate FACS/DSDT in FADT >=20 > + // >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >FirmwareCtrl, TableIndex++, Context); >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >Dsdt, TableIndex++, Context); >=20 > + } else { >=20 > + // >=20 > + // Locate FACS in FADT >=20 > + // >=20 > + if (FadtPtr->XFirmwareCtrl) { >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >XFirmwareCtrl, TableIndex++, Context); >=20 > + } else { >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >FirmwareCtrl, TableIndex++, Context); >=20 > + } >=20 > + >=20 > + // >=20 > + // Locate DSDT in FADT >=20 > + // >=20 > + if (FadtPtr->XDsdt) { >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >XDsdt, TableIndex++, Context); >=20 > + } else { >=20 > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > >Dsdt, TableIndex++, Context); >=20 > + } >=20 > + } >=20 > + } >=20 > + } >=20 > +} >=20 > + >=20 > +/** >=20 > + Count the number of ACPI tables. >=20 > + >=20 > + @param[in] Table The pointer to ACPI table. >=20 > + @param[in] TableIndex The ACPI table index. >=20 > + @param[in] Context The pointer to UINTN. >=20 > +**/ >=20 > +VOID >=20 > +GetAcpiTableCount ( >=20 > + IN EFI_ACPI_COMMON_HEADER *Table, >=20 > + IN UINTN TableIndex, >=20 > + IN VOID *Context >=20 > + ) >=20 > +{ >=20 > + UINTN *TableCount; >=20 > + >=20 > + TableCount =3D (UINTN *)Context; >=20 > + >=20 > + if (Table =3D=3D NULL) { >=20 > + ASSERT (Table !=3D NULL); >=20 > + return; >=20 > + } >=20 > + >=20 > + (*TableCount)++; >=20 > +} >=20 >=20 >=20 > - if (HWChange =3D=3D NULL) return; >=20 > +/** >=20 > + Calculate CRC based on each offset in the ACPI table. >=20 > + >=20 > + @param[in] Table The pointer to ACPI table. >=20 > + @param[in] TableIndex The ACPI table index. >=20 > + @param[in] Context The pointer to UINT32 array. >=20 > +**/ >=20 > +VOID >=20 > +CalculateAcpiTableCrc ( >=20 > + IN EFI_ACPI_COMMON_HEADER *Table, >=20 > + IN UINTN TableIndex, >=20 > + IN VOID *Context >=20 > + ) >=20 > +{ >=20 > + UINT32 *TableCrcRecord; >=20 > + >=20 > + TableCrcRecord =3D (UINT32 *)Context; >=20 > + >=20 > + if (Table =3D=3D NULL) { >=20 > + ASSERT (Table !=3D NULL); >=20 > + return; >=20 > + } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: PCI devices >=20 > + // Calculate CRC value. >=20 > // >=20 > - for (Index =3D 0; HandleCount > 0; HandleCount--) { >=20 > - PciId =3D 0; >=20 > - Status =3D gBS->HandleProtocol (HandleBuffer[Index], > &gEfiPciIoProtocolGuid, (VOID **) &PciIo); >=20 > - if (!EFI_ERROR (Status)) { >=20 > - Status =3D PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0, 1, &Pci= Id); >=20 > - if (EFI_ERROR (Status)) { >=20 > - continue; >=20 > - } >=20 > - HWChange[Index++] =3D PciId; >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { >=20 > + // >=20 > + // Zero HardwareSignature field before Calculating FACS CRC >=20 > + // >=20 > + ((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *)Table)- > >HardwareSignature =3D 0; >=20 > + } >=20 > + >=20 > + gBS->CalculateCrc32 ((UINT8 *)Table, (UINTN)Table->Length, > &TableCrcRecord[TableIndex]); >=20 > +} >=20 > + >=20 > +/** >=20 > + This function calculates CRC based on each ACPI table. >=20 > + It also calculates CRC and provides as HardwareSignature field in FACS= . >=20 > +**/ >=20 > +VOID >=20 > +IsAcpiTableChange ( >=20 > + VOID >=20 > + ) >=20 > +{ >=20 > + EFI_STATUS Status; >=20 > + BOOLEAN IsRsdt; >=20 > + UINTN AcpiTableCount; >=20 > + UINT32 *TableCrcRecord; >=20 > + EFI_ACPI_6_5_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *Xsdt; >=20 > + EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=20 > + >=20 > + IsRsdt =3D FALSE; >=20 > + AcpiTableCount =3D 0; >=20 > + TableCrcRecord =3D NULL; >=20 > + Rsdp =3D NULL; >=20 > + Rsdt =3D NULL; >=20 > + Xsdt =3D NULL; >=20 > + FacsPtr =3D NULL; >=20 > + >=20 > + DEBUG ((DEBUG_INFO, "%a() - Start\n", __FUNCTION__)); >=20 > + >=20 > + Status =3D EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID > **)&Rsdp); >=20 > + if (EFI_ERROR (Status) || (Rsdp =3D=3D NULL)) { >=20 > + return; >=20 > + } >=20 > + >=20 > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress; >=20 > + Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress; >=20 > + if (Xsdt =3D=3D NULL) { >=20 > + if (Rsdt !=3D NULL) { >=20 > + IsRsdt =3D TRUE; >=20 > + } else { >=20 > + return; >=20 > } >=20 > } >=20 >=20 >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)EfiLocateFirstAcpiTable > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE); >=20 > + if (FacsPtr =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 > + >=20 > // >=20 > - // Locate FACP Table >=20 > + // Count the ACPI tables found by RSDT/XSDT and FADT. >=20 > // >=20 > - Handle =3D 0; >=20 > - Status =3D LocateAcpiTableBySignature ( >=20 > - EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, >=20 > - (EFI_ACPI_DESCRIPTION_HEADER **) &pFADT, >=20 > - &Handle >=20 > - ); >=20 > - if (EFI_ERROR (Status) || (pFADT =3D=3D NULL)) { >=20 > - return; //Table not found or out of memory resource for pFADT table >=20 > + if (IsRsdt) { >=20 > + EnumerateAllAcpiTables (Rsdt, sizeof (UINT32), GetAcpiTableCount, > (VOID *)&AcpiTableCount); >=20 > + } else { >=20 > + EnumerateAllAcpiTables (Xsdt, sizeof (UINT64), GetAcpiTableCount, > (VOID *)&AcpiTableCount); >=20 > } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: others >=20 > + // Allocate memory for founded ACPI tables. >=20 > // >=20 > - HWChange[Index++] =3D (UINT32)pFADT->XDsdt; >=20 > + TableCrcRecord =3D AllocateZeroPool (sizeof (UINT32) * AcpiTableCount)= ; >=20 > + if (TableCrcRecord =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 >=20 >=20 > // >=20 > - // Calculate CRC value with HWChange data. >=20 > + // Calculate CRC for each ACPI table and set record. >=20 > // >=20 > - Status =3D gBS->CalculateCrc32(HWChange, HWChangeSize, &CRC); >=20 > - DEBUG ((DEBUG_INFO, "CRC =3D %x and Status =3D %r\n", CRC, Status)); >=20 > + if (IsRsdt) { >=20 > + EnumerateAllAcpiTables (Rsdt, sizeof (UINT32), CalculateAcpiTableCrc= , > (VOID *)TableCrcRecord); >=20 > + } else { >=20 > + EnumerateAllAcpiTables (Xsdt, sizeof (UINT64), CalculateAcpiTableCrc= , > (VOID *)TableCrcRecord); >=20 > + } >=20 >=20 >=20 > // >=20 > - // Set HardwareSignature value based on CRC value. >=20 > + // Calculate and set HardwareSignature data. >=20 > // >=20 > - FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN) pFADT->FirmwareCtrl; >=20 > - FacsPtr->HardwareSignature =3D CRC; >=20 > - FreePool (HWChange); >=20 > + Status =3D gBS->CalculateCrc32 ((UINT8 *)TableCrcRecord, AcpiTableCoun= t, > &(FacsPtr->HardwareSignature)); >=20 > + DEBUG ((DEBUG_INFO, "HardwareSignature =3D %x and Status =3D %r\n", > FacsPtr->HardwareSignature, Status)); >=20 > + >=20 > + FreePool (TableCrcRecord); >=20 > + DEBUG ((DEBUG_INFO, "%a() - End\n", __FUNCTION__)); >=20 > } >=20 >=20 >=20 > VOID >=20 > @@ -1329,7 +1475,7 @@ AcpiEndOfDxeEvent ( > // >=20 > // Calculate Hardware Signature value based on current platform > configurations >=20 > // >=20 > - IsHardwareChange (); >=20 > + IsAcpiTableChange (); >=20 > } >=20 >=20 >=20 > /** >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.i= nf > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > index 694492112b..f47cc3908d 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > @@ -128,6 +128,7 @@ > gEfiGlobalVariableGuid ## CONSUMES >=20 > gEfiHobListGuid ## CONSUMES >=20 > gEfiEndOfDxeEventGroupGuid ## CONSUMES >=20 > + gEfiAcpiTableGuid ## CONSUMES >=20 >=20 >=20 > [Depex] >=20 > gEfiAcpiTableProtocolGuid AND >=20 > -- > 2.39.2.windows.1