From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web10.3139.1685466751917042527 for ; Tue, 30 May 2023 10:12:32 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Yo8SW80l; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: chasel.chiu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685466751; x=1717002751; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=sRzeh01Z0VOvLrZepkenrb6t2WhjtwCmnhvOcRrbBww=; b=Yo8SW80lU9CoVuATUz5GGseQqpF8EsVyWEObHvdPs7/jHZxq71CwfMFn hHe4pZSXqug62ibpmkILUs6+KQc+hA9bZL2nmfQJ5gzvZyYLSWvx1QcOW g7aGh0EHGM+FkrI20PmxUmL8bxlKrPVOdXKCyBVMaU+ZMi5W7YU3zvxI+ g+Mz0asW1bzV37lAq0B6lUBT++psaXv+0SCFLhG9u5MNxzPLklUTM3bll cADBx0g3/k3ea1je9n2J/xqBccu6KaAc9SWYOPyVUmnjRYXxQ2lSs0X2R mwH7X1D2WEHf+k9IcZ12JBKhjGEeMY6CoU81mCujjyZe3qiMEfJFcegMS g==; X-IronPort-AV: E=McAfee;i="6600,9927,10726"; a="352485867" X-IronPort-AV: E=Sophos;i="6.00,204,1681196400"; d="scan'208";a="352485867" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 10:12:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10726"; a="953257200" X-IronPort-AV: E=Sophos;i="6.00,204,1681196400"; d="scan'208";a="953257200" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga006.fm.intel.com with ESMTP; 30 May 2023 10:12:31 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) 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.23; Tue, 30 May 2023 10:12:30 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) 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 10:12:31 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.108) 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.23; Tue, 30 May 2023 10:12:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZvBpXPMep/Y/d76xwGJ85/Y2uFoNb++lCa/moqijmC7Mf4FEmqyKC8raQfr8CpVN0JvTeTaEhLqgC5FQvRfJ3UnIfsoGv+EOAh5Gy8wF2DtqC+outdlIpZGjjW27Wcrp3UTrpuWA8u4zREJfyrIEosjeeaOJGAAF1czZ3n356PKm+/1y6eRKsxPTH+3AOg0QoiADlK/Vv1kYFElELiGML//mKZwwNeqxRymAa3VzYD3CDRfJFQugftDj2ljM1zZi+e+2uSIzCr2exlDgfdV81LZltRQm0ASkFzI40OAP/gsGz2Ww0Sm9XOMJKXsUh3yw7silHzTqDiHALrS0tVH4/w== 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=+FrtNvZWiprGhLuCJztEoImCTvgW/pcHbwSMbMvOcNU=; b=dJCHG7VTE2osbNdCDFFljMwUD68jnBqUvOvKIrrrvBWyhGc/4xYFX47As9JbzliiWRsU2cfvvZR2gKTDErvXqUrW3tNYmBD/gOMOfPRDyWYkqWpyZfv5UpGUsUxHajDKXPmADOpcNkbgY3PG9+x0+lLiiV/H/iGXYyD0uHdgN9lLR4+K9bkyX7ipNEKVqkia/FuNFR5fuJBfKdpZ+FUrVQt1HLyLpu5DixHhD6i3/cS3bZG0tshYimx6vl63IImVJWYYlHR7SjRVqdqqN3xBUFT65KJdiavHhYYpI3YU9W0PQVv0FRg8LAh1MMWQOdSRtccSmG0mhiKsq9DOWp7GOg== 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 BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by CO1PR11MB4913.namprd11.prod.outlook.com (2603:10b6:303:9f::20) 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 17:12:27 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::37e4:7a65:b8a7:c4ae]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::37e4:7a65:b8a7:c4ae%5]) with mapi id 15.20.6433.022; Tue, 30 May 2023 17:12:27 +0000 From: "Chiu, Chasel" To: "Sinha, Ankit" , "Ke, VincentX" , "devel@edk2.groups.io" CC: "Desimone, Nathaniel L" , "Oram, Isaac W" , "Gao, Liming" , "Dong, Eric" , "Ni, Ray" , "Chiu, Chasel" Subject: Re: [PATCH v9] MinPlatformPkg: Update HWSignature field in FACS Thread-Topic: [PATCH v9] MinPlatformPkg: Update HWSignature field in FACS Thread-Index: AQHZjhtFrqrChuop8keub05eQmFx269zAUQAgAAV7MA= Date: Tue, 30 May 2023 17:12:27 +0000 Message-ID: References: <20230524083923.1963-1-vincentx.ke@intel.com> In-Reply-To: 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: BN9PR11MB5483:EE_|CO1PR11MB4913:EE_ x-ms-office365-filtering-correlation-id: e4938123-fb6a-4895-f899-08db61310b44 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: Q2ELCr2gUUBVMvL0wpxmwnLqihokJ0NYWRqQpp+2XfaWYCJPoYU4vgWy2NKOrGl/4audZJrFgfN2bsig9k59fk8lnKqoH8QbUX3H4BTcnLBu/TPJgYYNPC8QS9AMwrY4Lo9+OfvW27OWB0HFZJ/rfrlhsFlq5DOZj9OmqdwiJ2lzJz0yTrn1GqTCYkXFruC7Hq9kuIhOX2TE2HOrS1an9SZ7dl2OwwFu/6vKVU7TOxVnVUSJY+OfJGqeV8++5QoY2dLMwkjjkv5pW+TWXqoxE4JFqzPjqrCEK/DbBtT9wyQktOGJgFsTQvzOdV65ZILdWWGjREY3D0+HZCKFjsZSXna8WNMhLMe6wHeZMpH9Ipu9mM6rLRQJVBJ88fpnLIkmj4WYvKeRmJJIBUa3oPhcTaAipWXSNqLW1hFUWfA4K+j0BRh2j2QvBuelqMbiMgTeqt8fWkiX79nmIsTrMWjXsAgnvvyuMwkdiOD4Lk0hsLvsXmmjjAZksRLbz8UKmuesFPpTMcmUJOfGzjtVTSBJHs8EpoAC8rwRdPyZqpurb9ng1LNeMFXP4vJ4DZKFvWBsvpUVmXFe3jDQVtoizftkHYVL3l8gCuq0GGhLOCDXX2U= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5483.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(39860400002)(396003)(376002)(366004)(346002)(136003)(451199021)(41300700001)(7696005)(86362001)(38070700005)(966005)(55016003)(4326008)(316002)(71200400001)(33656002)(66556008)(66476007)(66446008)(66946007)(76116006)(64756008)(5660300002)(186003)(52536014)(26005)(107886003)(9686003)(83380400001)(6506007)(53546011)(15650500001)(30864003)(2906002)(478600001)(38100700002)(82960400001)(54906003)(8676002)(8936002)(122000001)(110136005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?XWxadUa1L0i0SisKEXGjavgtPT7RVtx09x4vOquB6dBkfYVXGFHTxEJUxMON?= =?us-ascii?Q?zKX9c/G/XwVrb6UFHctcp0etIt3VgEy9rkC21fsOmzvgAo/OP6QckQMgLo87?= =?us-ascii?Q?705TlkLtTVdU/+vD4enVAoa44wLndosBEmpgP3Whze8IJH/DziQCS8q9BuGY?= =?us-ascii?Q?lb/XWnTVrdv4if8VQAkkF8raOzcQTEYd4/a0EuIm9kLWmZhB/K/BtR2oUR1k?= =?us-ascii?Q?/IVk0EV0af0qPGWyWK7OQP7Yp9DnUzHwLqle4zSTCeJykih2jMEcki/PNq3r?= =?us-ascii?Q?jXncQ/8imTY+8K+3YTUjjDFQbSb569iXXwZ5Mgahg6MQO2Jlkq4MkNLuGr9y?= =?us-ascii?Q?6MwVCnJ8CLJBAgr5SLNh9a+f0PZwWxjxX0ZnD4si4X4MmY360rDZcxLaFmH7?= =?us-ascii?Q?p/hUkQy1gObyYVn55JCoYuNb13lGsHKSPFWdOu0Z8S+HQdlQzTZhjWxpbh4d?= =?us-ascii?Q?5m6bPURRfxejVHzwoICOhbNnLfqIB8i9Yg2eKuFsNRqCrP3avGaHy1z59sv6?= =?us-ascii?Q?1boWhcOVZ6n9RJ9KnUp/qSBEBhcPTRKB0HEwlm5onEMcb3b9hXH2Z4TZrM1D?= =?us-ascii?Q?HjXYHVBDpubDZln3CdzlmSvD727mB1r/dwhl5oOXc+07rsP85QTLI4roPyCU?= =?us-ascii?Q?vBTMfASG4qFl48mBsvLyyFAUYSzFTumx3DJF660NxSVEmOOm9waLK/cqB4XU?= =?us-ascii?Q?lhOhufW3Ko/9DPZllR8xnKpcvj+I62oO8ymZmVTNX5hoKsDdCw08rnPuoFUR?= =?us-ascii?Q?P4ZpTUC/x8GqphgdojiCyK0gIlP+i/b9YXRfJkFnYJB0cKCJDipNcyzby1bn?= =?us-ascii?Q?+oS6PQTq/UHEy/CPNP2+2p6PiS+wpp328ZDeUsi831lTUJFqtJKhzDezJ1hW?= =?us-ascii?Q?wkFVy2+86EkL06BGBcYyVIqp7oldK67rgqDILB7NOvEGrWrPLD6QxdSv5Lh+?= =?us-ascii?Q?BlpR7SOn2tdhJBuha+Eqx6jrHWyRTf6+zG5A7Dk/pls1FDGQ5fT2zaMKQxCV?= =?us-ascii?Q?NioulcozjdS3MNk1nxzTn/yN24cerUc6iA23QSFi0K957JWhkpK9rk+qP7BH?= =?us-ascii?Q?0FcWVZXiWCFzttlcAeWRLR3FjPgC7h/KFu3Bp1N/EU+oNgXZtlzEtkZ/uzry?= =?us-ascii?Q?dIqfJJHs8lxJwmrCRr5DxY9qpzX96sV+T2qSdBjLf5tDgiQbdHAO3HWSH7Ij?= =?us-ascii?Q?MaGf2aRJyrL2PXvfStYHN5zcM/4oLoNrsFtB9UJwGhyZwPc9m3a6hqiHB2+y?= =?us-ascii?Q?CF+MdMbABQyxCJ6oD6LyHeZC3VQlbkBs1kPUYDSMW/d4jdphUL/MD95/NEcV?= =?us-ascii?Q?OzJIjym0AGMksdejhiiRAUpjriErnt+zl5xLc0XvvOW6OW1IAK3a0N8WNY9b?= =?us-ascii?Q?XInjwyT/1sLkPBwoGCrFptRRjjoKnv0wwvLjFvhgWbhEeshaSQep8S1WNAk+?= =?us-ascii?Q?bzD1OzyM9EhVbWchwFp6Tkh0YYu3jK06epWUBXkHJ0Yy7W/WedWwFA5LRa9O?= =?us-ascii?Q?lSgWA5bAc4aB78Mkp4OQuNK0Y2RjWbjTmTC5+8Ze73ilYYemo27uEGlCxx6F?= =?us-ascii?Q?Pyq4SyuMeTtsT4G1NGtLDFSW6md3Km2S9Qg3fhGm?= 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: e4938123-fb6a-4895-f899-08db61310b44 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 May 2023 17:12:27.3040 (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: IAdj6g4/Hu9ExzXPrSBXd9LtkESQddsue/PmDJppoZgt4k+28II0IX0W5dWUCL81nzmbltQtTbj+/nfav3C/ZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB4913 Return-Path: chasel.chiu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks for the reviewing Ankit! It looks to me current version is good enough for merging, if no other feed= backs I will help to merge it tomorrow. Thanks, Chasel > -----Original Message----- > From: Sinha, Ankit > Sent: Tuesday, May 30, 2023 8:53 AM > 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 >=20 > Reviewed-by: Ankit Sinha >=20 > Thank you, > Ankit >=20 > > -----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 > > > > From: VincentX Ke > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4428 > > > > Calculating CRC based on each ACPI table. > > Update HWSignature field in FACS based on CRC while ACPI table changed. > > > > 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(-) > > > > 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 ( } > > > > > > > > /** > > > > - This function calculates RCR based on PCI Device ID and Vendor ID > > from the devices > > > > - available on the platform. > > > > - It also includes other instances of BIOS change to calculate CRC > > and provides as > > > > - HWSignature filed in FADT table. > > > > + Function prototype for GetAcpiTableCount/CalculateAcpiTableCrc. > > > > + > > > > + @param[in] Table The pointer to ACPI table. > > > > + @param[in] TableIndex The ACPI table index. > > > > + @param[in] Context The pointer to UINTN for GetAcpiTableCount. > > > > + The pointer to UINT32 array for CalculateAcp= iTableCrc. > > > > **/ > > > > +typedef > > > > VOID > > > > -IsHardwareChange ( > > > > - VOID > > > > +(EFIAPI *ACPI_TABLE_CALLBACK)( > > > > + IN EFI_ACPI_COMMON_HEADER *Table, > > > > + IN UINTN TableIndex, > > > > + IN VOID *Context > > > > + ); > > > > + > > > > +/** > > > > + Enumerate all ACPI tables in RSDT/XSDT. > > > > + > > > > + @param[in] Sdt ACPI XSDT/RSDT. > > > > + @param[in] TablePointerSize Size of table pointer: > > > > + 4(RSDT) or 8(XSDT). > > > > + @param[in] CallbackFunction The pointer to > > GetAcpiTableCount/CalculateAcpiTableCrc. > > > > + @param[in] Context The pointer to UINTN for GetAcpiTableC= ount. > > > > + The pointer to UINT32 array for Calcul= ateAcpiTableCrc. > > > > +**/ > > > > +VOID > > > > +EnumerateAllAcpiTables ( > > > > + IN EFI_ACPI_DESCRIPTION_HEADER *Sdt, > > > > + IN UINTN TablePointerSize, > > > > + IN ACPI_TABLE_CALLBACK CallbackFunction, > > > > + IN VOID *Context > > > > ) > > > > { > > > > - EFI_STATUS Status; > > > > - UINTN Index; > > > > - UINTN HandleCount; > > > > - EFI_HANDLE *HandleBuffer; > > > > - EFI_PCI_IO_PROTOCOL *PciIo; > > > > - UINT32 CRC; > > > > - UINT32 *HWChange; > > > > - UINTN HWChangeSize; > > > > - UINT32 PciId; > > > > - UINTN Handle; > > > > - EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; > > > > - EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *pFADT; > > > > - > > > > - HandleCount =3D 0; > > > > - HandleBuffer =3D NULL; > > > > - > > > > - Status =3D gBS->LocateHandleBuffer ( > > > > - ByProtocol, > > > > - &gEfiPciIoProtocolGuid, > > > > - NULL, > > > > - &HandleCount, > > > > - &HandleBuffer > > > > - ); > > > > - if (EFI_ERROR (Status)) { > > > > - return; // PciIO protocol not installed yet! > > > > + UINTN Index; > > > > + UINTN TableIndex; > > > > + UINTN EntryCount; > > > > + UINT64 EntryPtr; > > > > + UINTN BasePtr; > > > > + EFI_ACPI_COMMON_HEADER *Table; > > > > + EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *FadtPtr; > > > > + > > > > + Index =3D 0; > > > > + TableIndex =3D 0; > > > > + EntryCount =3D (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) = / > > TablePointerSize; > > > > + EntryPtr =3D 0; > > > > + BasePtr =3D (UINTN)(Sdt + 1); > > > > + Table =3D NULL; > > > > + FadtPtr =3D NULL; > > > > + > > > > + if (Sdt =3D=3D NULL) { > > > > + ASSERT (Sdt !=3D NULL); > > > > + return; > > > > } > > > > > > > > - // > > > > - // Allocate memory for HWChange and add additional entrie for > > > > - // pFADT->XDsdt > > > > - // > > > > - HWChangeSize =3D HandleCount + 1; > > > > - HWChange =3D AllocateZeroPool (sizeof(UINT32) * HWChangeSize); > > > > - ASSERT(HWChange !=3D NULL); > > > > + for (Index =3D 0; Index < EntryCount; Index++) { > > > > + EntryPtr =3D 0; > > > > + Table =3D NULL; > > > > + CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * TablePointerSize), > > TablePointerSize); > > > > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); > > > > + if (Table !=3D NULL) { > > > > + CallbackFunction (Table, TableIndex++, Context); > > > > + } > > > > + > > > > + if (Table->Signature =3D=3D > > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { > > > > + FadtPtr =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table; > > > > + if (FadtPtr->Header.Revision < > > EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) { > > > > + // > > > > + // Locate FACS/DSDT in FADT > > > > + // > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >FirmwareCtrl, TableIndex++, Context); > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >Dsdt, TableIndex++, Context); > > > > + } else { > > > > + // > > > > + // Locate FACS in FADT > > > > + // > > > > + if (FadtPtr->XFirmwareCtrl) { > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >XFirmwareCtrl, TableIndex++, Context); > > > > + } else { > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >FirmwareCtrl, TableIndex++, Context); > > > > + } > > > > + > > > > + // > > > > + // Locate DSDT in FADT > > > > + // > > > > + if (FadtPtr->XDsdt) { > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >XDsdt, TableIndex++, Context); > > > > + } else { > > > > + CallbackFunction ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr- > > >Dsdt, TableIndex++, Context); > > > > + } > > > > + } > > > > + } > > > > + } > > > > +} > > > > + > > > > +/** > > > > + Count the number of ACPI tables. > > > > + > > > > + @param[in] Table The pointer to ACPI table. > > > > + @param[in] TableIndex The ACPI table index. > > > > + @param[in] Context The pointer to UINTN. > > > > +**/ > > > > +VOID > > > > +GetAcpiTableCount ( > > > > + IN EFI_ACPI_COMMON_HEADER *Table, > > > > + IN UINTN TableIndex, > > > > + IN VOID *Context > > > > + ) > > > > +{ > > > > + UINTN *TableCount; > > > > + > > > > + TableCount =3D (UINTN *)Context; > > > > + > > > > + if (Table =3D=3D NULL) { > > > > + ASSERT (Table !=3D NULL); > > > > + return; > > > > + } > > > > + > > > > + (*TableCount)++; > > > > +} > > > > > > > > - if (HWChange =3D=3D NULL) return; > > > > +/** > > > > + Calculate CRC based on each offset in the ACPI table. > > > > + > > > > + @param[in] Table The pointer to ACPI table. > > > > + @param[in] TableIndex The ACPI table index. > > > > + @param[in] Context The pointer to UINT32 array. > > > > +**/ > > > > +VOID > > > > +CalculateAcpiTableCrc ( > > > > + IN EFI_ACPI_COMMON_HEADER *Table, > > > > + IN UINTN TableIndex, > > > > + IN VOID *Context > > > > + ) > > > > +{ > > > > + UINT32 *TableCrcRecord; > > > > + > > > > + TableCrcRecord =3D (UINT32 *)Context; > > > > + > > > > + if (Table =3D=3D NULL) { > > > > + ASSERT (Table !=3D NULL); > > > > + return; > > > > + } > > > > > > > > // > > > > - // add HWChange inputs: PCI devices > > > > + // Calculate CRC value. > > > > // > > > > - for (Index =3D 0; HandleCount > 0; HandleCount--) { > > > > - PciId =3D 0; > > > > - Status =3D gBS->HandleProtocol (HandleBuffer[Index], > > &gEfiPciIoProtocolGuid, (VOID **) &PciIo); > > > > - if (!EFI_ERROR (Status)) { > > > > - Status =3D PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0, 1, &P= ciId); > > > > - if (EFI_ERROR (Status)) { > > > > - continue; > > > > - } > > > > - HWChange[Index++] =3D PciId; > > > > + if (Table->Signature =3D=3D > > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { > > > > + // > > > > + // Zero HardwareSignature field before Calculating FACS CRC > > > > + // > > > > + ((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *)Table)- > > >HardwareSignature =3D 0; > > > > + } > > > > + > > > > + gBS->CalculateCrc32 ((UINT8 *)Table, (UINTN)Table->Length, > > &TableCrcRecord[TableIndex]); > > > > +} > > > > + > > > > +/** > > > > + This function calculates CRC based on each ACPI table. > > > > + It also calculates CRC and provides as HardwareSignature field in FA= CS. > > > > +**/ > > > > +VOID > > > > +IsAcpiTableChange ( > > > > + VOID > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + BOOLEAN IsRsdt; > > > > + UINTN AcpiTableCount; > > > > + UINT32 *TableCrcRecord; > > > > + EFI_ACPI_6_5_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; > > > > + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; > > > > + EFI_ACPI_DESCRIPTION_HEADER *Xsdt; > > > > + EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; > > > > + > > > > + IsRsdt =3D FALSE; > > > > + AcpiTableCount =3D 0; > > > > + TableCrcRecord =3D NULL; > > > > + Rsdp =3D NULL; > > > > + Rsdt =3D NULL; > > > > + Xsdt =3D NULL; > > > > + FacsPtr =3D NULL; > > > > + > > > > + DEBUG ((DEBUG_INFO, "%a() - Start\n", __FUNCTION__)); > > > > + > > > > + Status =3D EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID > > **)&Rsdp); > > > > + if (EFI_ERROR (Status) || (Rsdp =3D=3D NULL)) { > > > > + return; > > > > + } > > > > + > > > > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress; > > > > + Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress; > > > > + if (Xsdt =3D=3D NULL) { > > > > + if (Rsdt !=3D NULL) { > > > > + IsRsdt =3D TRUE; > > > > + } else { > > > > + return; > > > > } > > > > } > > > > > > > > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > > *)EfiLocateFirstAcpiTable > > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE); > > > > + if (FacsPtr =3D=3D NULL) { > > > > + return; > > > > + } > > > > + > > > > // > > > > - // Locate FACP Table > > > > + // Count the ACPI tables found by RSDT/XSDT and FADT. > > > > // > > > > - Handle =3D 0; > > > > - Status =3D LocateAcpiTableBySignature ( > > > > - EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > > > > - (EFI_ACPI_DESCRIPTION_HEADER **) &pFADT, > > > > - &Handle > > > > - ); > > > > - if (EFI_ERROR (Status) || (pFADT =3D=3D NULL)) { > > > > - return; //Table not found or out of memory resource for pFADT tab= le > > > > + if (IsRsdt) { > > > > + EnumerateAllAcpiTables (Rsdt, sizeof (UINT32), GetAcpiTableCount, > > (VOID *)&AcpiTableCount); > > > > + } else { > > > > + EnumerateAllAcpiTables (Xsdt, sizeof (UINT64), GetAcpiTableCount, > > (VOID *)&AcpiTableCount); > > > > } > > > > > > > > // > > > > - // add HWChange inputs: others > > > > + // Allocate memory for founded ACPI tables. > > > > // > > > > - HWChange[Index++] =3D (UINT32)pFADT->XDsdt; > > > > + TableCrcRecord =3D AllocateZeroPool (sizeof (UINT32) * > > + AcpiTableCount); > > > > + if (TableCrcRecord =3D=3D NULL) { > > > > + return; > > > > + } > > > > > > > > // > > > > - // Calculate CRC value with HWChange data. > > > > + // Calculate CRC for each ACPI table and set record. > > > > // > > > > - Status =3D gBS->CalculateCrc32(HWChange, HWChangeSize, &CRC); > > > > - DEBUG ((DEBUG_INFO, "CRC =3D %x and Status =3D %r\n", CRC, Status)); > > > > + if (IsRsdt) { > > > > + EnumerateAllAcpiTables (Rsdt, sizeof (UINT32), > > + CalculateAcpiTableCrc, > > (VOID *)TableCrcRecord); > > > > + } else { > > > > + EnumerateAllAcpiTables (Xsdt, sizeof (UINT64), > > + CalculateAcpiTableCrc, > > (VOID *)TableCrcRecord); > > > > + } > > > > > > > > // > > > > - // Set HardwareSignature value based on CRC value. > > > > + // Calculate and set HardwareSignature data. > > > > // > > > > - FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > > *)(UINTN) pFADT->FirmwareCtrl; > > > > - FacsPtr->HardwareSignature =3D CRC; > > > > - FreePool (HWChange); > > > > + Status =3D gBS->CalculateCrc32 ((UINT8 *)TableCrcRecord, > > + AcpiTableCount, > > &(FacsPtr->HardwareSignature)); > > > > + DEBUG ((DEBUG_INFO, "HardwareSignature =3D %x and Status =3D %r\n", > > FacsPtr->HardwareSignature, Status)); > > > > + > > > > + FreePool (TableCrcRecord); > > > > + DEBUG ((DEBUG_INFO, "%a() - End\n", __FUNCTION__)); > > > > } > > > > > > > > VOID > > > > @@ -1329,7 +1475,7 @@ AcpiEndOfDxeEvent ( > > // > > > > // Calculate Hardware Signature value based on current platform > > configurations > > > > // > > > > - IsHardwareChange (); > > > > + IsAcpiTableChange (); > > > > } > > > > > > > > /** > > > > diff --git > > a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > > 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 > > > > gEfiHobListGuid ## CONSUMES > > > > gEfiEndOfDxeEventGroupGuid ## CONSUMES > > > > + gEfiAcpiTableGuid ## CONSUMES > > > > > > > > [Depex] > > > > gEfiAcpiTableProtocolGuid AND > > > > -- > > 2.39.2.windows.1