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.web09.4181.1616471087819068220 for ; Mon, 22 Mar 2021 20:44:48 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Dg5qswbL; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: ray.ni@intel.com) IronPort-SDR: K9qzKDm6XlPvS1f6wortUpYRVnchn7khXfuwArarYLAT6ldIDIutu7aKcGXakFNltZCFpW0JRM +gE0mHkz/CKw== X-IronPort-AV: E=McAfee;i="6000,8403,9931"; a="187081722" X-IronPort-AV: E=Sophos;i="5.81,270,1610438400"; d="scan'208";a="187081722" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 20:44:46 -0700 IronPort-SDR: 2h2GD1UBOTyNDWxcoDdeey0f6B9qQX/UKeRdVNusNQeSCWJ01eH6H6heo0eGR1Qv7P2SztwTSK Y710ZBxtttdA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,270,1610438400"; d="scan'208";a="408106880" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 22 Mar 2021 20:44:46 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) 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.2106.2; Mon, 22 Mar 2021 20:44:45 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Mar 2021 20:44:44 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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.2106.2 via Frontend Transport; Mon, 22 Mar 2021 20:44:44 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.107) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Mon, 22 Mar 2021 20:44:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C9qAlOuzKr4SFKOXSGw8ONPh2pdl/ecbsix3kqBYqZANkwLC9eboqPlVYUicfbvhHtfppFep0kC8ibeKm7fW/hY5HXLPpzbM1Ee3emnuoBWcTwPtEfTl+agNv/rLCIXXlzUiqcOFV1LndyZwyf8i4m5GAbqGqVM1FCJ/Go7QliEpfrfcTal6SgwDuA4mHyCwA3jyFVLBJd+Kooa80W7JrtE6AV3KIAFYN1UnpSETqg9TwR/TZkyaoivt8JgE4U2neGnWpOB9Fr6h7rxngEL6r7mSbC+qk50vao2pyrBBJOFobNkLAM4ja0I4LuhXyR+vA/wCUP8njGmVyy/97iXyfg== 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-SenderADCheck; bh=fcdmschx8FfpW45ldQNKvyULm8z5le9Mp6bRt9HTmic=; b=IjGSig6XGm892m+2WmoiItNqptk0N2UUbtrCgPVxo8wXN+KQ7SKQRkxvZLsRZqqU066VHaJXRLXLDe1ysLO/Xze91DyguC+biOloYIObQxm3r13+FFr+LiZ+/k0TamriP6Jg9xuWeQ9Dh8cYadhA8DhDg3pNe9NJWi0bPB/UxbaLeX9rDmhM+3/O/JTNhzQl+FlBVQ+8OCN94BDWGG6pnWIj7gNESiy128B9x0M0mDXs82TnfpQI7qc5frhbVkrspQxMpwlJ0oqwZA6M7X6QRPqcAqir17zpHKGS2IVPO00s2+AsV6Xh7rxisaS/SgSVgD+bsTPBL88yGMbPSLDDUQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fcdmschx8FfpW45ldQNKvyULm8z5le9Mp6bRt9HTmic=; b=Dg5qswbL17EYuSqP9Mr0nZvnKXrU0ftyBUGkhybtu8Bl2M46aG8ftQ1teSTeALaPUXPdI8N3ezJ0dgvQ+zYur2N3DZrW2ZlD0CCXmV3EOfiMfNxoQXXG3MvtheVEWUP1I6ZqxKuvtpcdoFuXD3VcnuA2OFxjETrwg51pzTi10Rc= Received: from CO1PR11MB4930.namprd11.prod.outlook.com (2603:10b6:303:9b::11) by MWHPR11MB0029.namprd11.prod.outlook.com (2603:10b6:301:67::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3955.25; Tue, 23 Mar 2021 03:44:43 +0000 Received: from CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::8d64:91ed:c259:e95]) by CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::8d64:91ed:c259:e95%7]) with mapi id 15.20.3955.027; Tue, 23 Mar 2021 03:44:43 +0000 From: "Ni, Ray" To: "Liu, Zhiguang" , "devel@edk2.groups.io" CC: "Wang, Jian J" , "Wu, Hao A" , "Bi, Dandan" , Liming Gao Subject: Re: [Patch V2 1/2] MdeModulePkg/ACPI: Install ACPI table from HOB. Thread-Topic: [Patch V2 1/2] MdeModulePkg/ACPI: Install ACPI table from HOB. Thread-Index: AQHXH5QddUgTeYFm40G7YyuqYTvchKqQ7n0g Date: Tue, 23 Mar 2021 03:44:43 +0000 Message-ID: References: <20210323032438.950-1-zhiguang.liu@intel.com> In-Reply-To: <20210323032438.950-1-zhiguang.liu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-reaction: no-action dlp-product: dlpe-windows authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [124.77.195.36] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 94e959c2-6fe9-4bed-5530-08d8edadff23 x-ms-traffictypediagnostic: MWHPR11MB0029: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VgVOatZlK8qOmQZ2Pt3L7jq65HV4BpILey5TMw1IvPAkiLmxYE5l9GOJu40Q+qQHtrEVM6VYlG+6dnxTiuQwUk27vq7H/w/pR/ejsLftR2xpWmq4yO66GjsurS94dpORa4DSwNCr/PSzGb7vLLzPgv2RsOvoiisy222OhG9erJrnpSYOukZK7Q3YaAhC7cIjenEbZ7lUJGDqBJYuqNrppXN8PhPf2ltoelXZaXsbiOOoyPanVEXyFETrBuBmYqK39I2o3zfa+nYzvOqGVIwTKNIAqXzChakFBJDjYhczXr1hcAf8CFrcVUxqtEKrP7tRJ6bQ/9N+CM7mv7nXJgVWExhhYJ1rYYBA6FCONxkbmqN7E71iRTWQsdcvAKPEjL4pRws7SM3iygFbf4eRKfRkuOFgsmEU9pncydKbcmf5oN4DGVEDVGMyyj7wfTuZdWfFHZLcW7YT0PQ0BM2HFyfNuU1OGSNTpj+g9MvBkmRU2cWhRidOwQTR45/qyNXljI52FzIUPz4xftIkobwhrWlq660oNaHi0HhO/hYik6UqtiJTh+nZYEkpeA9N+II9ZHzd28TYaii1HAMg/hgiVKVsOBBW6NHJVBZ5sEjFZew/I7cUUQPyOWqd+4Hj7/KBQCa7T75MH7F+eJtE59qG+tTmvLiGkgVQCwSjwPazIh1VFOA= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4930.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39860400002)(376002)(366004)(396003)(346002)(8936002)(76116006)(5660300002)(6506007)(83380400001)(53546011)(7696005)(52536014)(66946007)(4326008)(71200400001)(8676002)(478600001)(2906002)(64756008)(33656002)(66446008)(54906003)(66556008)(86362001)(55016002)(66476007)(19627235002)(9686003)(26005)(186003)(316002)(110136005)(38100700001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?1+CZ1IuoRbN6D+HIVZ1tgW4A1u+r1JMZlmwiF6XYMzBxP4r58IXJ7GrQZjif?= =?us-ascii?Q?SXNTDXE/nh+e+tv6XPvX4K3/sCaQhkuEkIevLXOYH5yDx/Z5tbw4pg1IRBtf?= =?us-ascii?Q?PYE6PxhbJS2bJyzjW+YEinXnsTSK5nHVDqk1OzccNSXUSciqZRL8oquhZuMX?= =?us-ascii?Q?oJvE/rzUnhPxAZEmgWAwrC+K7lHpUOf79fGkGTFZWF138eMx0EbORizi7l45?= =?us-ascii?Q?n9NfN5dMLMBug41TKzdhmaLNxrnJQnXsrrcCijU+vzwN4zZjBcrVpfHPG2MA?= =?us-ascii?Q?CeE0Tfd9EsZZswbdJ+7g9rDkL2nHl4pnPqtlD9t3tv3eMkJPCykD8RmH+Dfw?= =?us-ascii?Q?SvyWUHBzBFO7YgvF4HtGRTmC8JMmFmNZnJtbfD/zAdK0mo7jYP2lnqtFc7Jd?= =?us-ascii?Q?4YidmUBVSHsZlFfJPbpVGYEuuRQk7A5SeTaWXiIHjru+vBfZAjw7WYy4TULj?= =?us-ascii?Q?gSDvko1frvtmwgqrR4O+DkpXfAmGF0ievPyAOPPWdjXnSuf1Zn+XrOA1FUnM?= =?us-ascii?Q?hGxExp9E1hvqvE5Be3XWwDI+ydUsJ7Bn6nIMFGpyikjkERqPC+DGercrgx3b?= =?us-ascii?Q?RDZ6H9zPxwp+37Yj6yKPO0JqvXMdWbJyY6Pg68Oum4RHMFbv8yfoS+1kXicP?= =?us-ascii?Q?DHaby/PKGGLIcx5zJY4qjmVXzs3XlaR2tTjIrFrObqzxv4PVPKBzuiK61v6R?= =?us-ascii?Q?TVaIbE2p28WeMq7d9nd7/B5zfN7QPE1T1RPOrDV+ztQMFXy06jPeFyZAD2Ch?= =?us-ascii?Q?q54r6DAfGevf5J0C8FN7TxKSVlirBqPI6rH/Csxjh6ymXffMQekWG5lP1Z7Y?= =?us-ascii?Q?X9XTRvqjpkKs+6vmDgcq9HPvajErizcy8ABEaNyO5h3qS28G0pjp+CopLE6k?= =?us-ascii?Q?u5VS4hLRRx8qELuKiUOlUpFw+y2XBUHumBnQfLkD7/W9/jrNv0tlmrjoCWxY?= =?us-ascii?Q?LG5Z6BFJYHx07+QKmSicQxnU7DeqQwuRq29sdnwZjdR/rjsOX6dP/5e2TPOw?= =?us-ascii?Q?yfV2EIp3iQHFkBEuObervXTrebLoR0UpF2LwXe68Z12Gcfm7KpoIa2L66O37?= =?us-ascii?Q?Q8Ff8Z1cv/pcETB7G/gwwkDAr8w58/KrnA28E3p8u7eQ8OQLwG56tEOYNac4?= =?us-ascii?Q?yfwaFe6r0igTNIXajR3wFqDLhcaVUJWQWtnwGdFDgcSoDFv/HQwT/HdkJseB?= =?us-ascii?Q?QfNT+SML69hHfvOVvijsOI28twLzvvgVGThEqFQ+I523q3BUmSG10qEYb0Pl?= =?us-ascii?Q?8b8JswSUOxRHUa304GWfY14Vdp1pv5rpFj+EVFF0D/2ACC/6iQMaJNMrLNBu?= =?us-ascii?Q?82dPf9kJ/u1jBYpJtvuNQSgS?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4930.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 94e959c2-6fe9-4bed-5530-08d8edadff23 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2021 03:44:43.3916 (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: WYuXmXGBh552lNzK+StufqapRmzDWsRDgE+upjgaJ5PjilVDE+dL5tvMFufP97Zq+M0nZ6wtaQwOHJJpWhxF6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB0029 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ray Ni > -----Original Message----- > From: Liu, Zhiguang > Sent: Tuesday, March 23, 2021 11:25 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J ; Wu, Hao A ;= Bi, Dandan ; Liming Gao > ; Ni, Ray > Subject: [Patch V2 1/2] MdeModulePkg/ACPI: Install ACPI table from HOB. >=20 > If HOB contains APCI table information, entry point of AcpiTableDxe.inf > should parse the APCI table from HOB, and install these tables. > We assume the whole ACPI table (starting with EFI_ACPI_2_0_ROOT_SYSTEM_DE= SCRIPTION_POINTER) > is contained by a single gEfiAcpiTableGuid HOB. >=20 > Cc: Jian J Wang > Cc: Hao A Wu > Cc: Dandan Bi > Cc: Liming Gao > Cc: Ray Ni > Signed-off-by: Zhiguang Liu > --- > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf | 3 ++- > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c | 134 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++ > ++++++++++++++++++++++-------- > 2 files changed, 128 insertions(+), 9 deletions(-) >=20 > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > index d341df439e..473127368d 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > @@ -4,7 +4,7 @@ > # This driver initializes ACPI tables (Rsdp, Rsdt and Xsdt) and produce= s UEFI/PI >=20 > # services to install/uninstall/manage ACPI tables. >=20 > # >=20 > -# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved. >=20 > +# Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved. >=20 > # Copyright (c) 2016, Linaro Ltd. All rights reserved.
>=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > @@ -51,6 +51,7 @@ > DebugLib >=20 > BaseLib >=20 > PcdLib >=20 > + HobLib >=20 >=20 >=20 > [Guids] >=20 > gEfiAcpi10TableGuid ## PRODUCES ## SystemTab= le >=20 > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > index 5a2afdff27..6b58759620 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > @@ -1,7 +1,7 @@ > /** @file >=20 > ACPI Table Protocol Implementation >=20 >=20 >=20 > - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
>=20 > + Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.
>=20 > Copyright (c) 2016, Linaro Ltd. All rights reserved.
>=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 >=20 >=20 > @@ -11,6 +11,8 @@ > // Includes >=20 > // >=20 > #include "AcpiTable.h" >=20 > +#include >=20 > + >=20 > // >=20 > // The maximum number of tables that pre-allocated. >=20 > // >=20 > @@ -30,6 +32,7 @@ STATIC EFI_ALLOCATE_TYPE mAcpiTableAllocType; > @param Table Table to add. >=20 > @param Checksum Does the table require checksumming. >=20 > @param Version The version of the list to add the t= able to. >=20 > + @param IsFromHob True, if add Apci Table from Hob Lis= t. >=20 > @param Handle Pointer for returning the handle. >=20 >=20 >=20 > @return EFI_SUCCESS The function completed successfully. >=20 > @@ -44,6 +47,7 @@ AddTableToList ( > IN VOID *Table, >=20 > IN BOOLEAN Checksum, >=20 > IN EFI_ACPI_TABLE_VERSION Version, >=20 > + IN BOOLEAN IsFromHob, >=20 > OUT UINTN *Handle >=20 > ); >=20 >=20 >=20 > @@ -238,6 +242,7 @@ InstallAcpiTable ( > AcpiTableBufferConst, >=20 > TRUE, >=20 > Version, >=20 > + FALSE, >=20 > TableKey >=20 > ); >=20 > if (!EFI_ERROR (Status)) { >=20 > @@ -472,6 +477,7 @@ FreeTableMemory ( > @param Table Table to add. >=20 > @param Checksum Does the table require checksumming. >=20 > @param Version The version of the list to add the t= able to. >=20 > + @param IsFromHob True, if add Apci Table from Hob Lis= t. >=20 > @param Handle Pointer for returning the handle. >=20 >=20 >=20 > @return EFI_SUCCESS The function completed successfully. >=20 > @@ -487,6 +493,7 @@ AddTableToList ( > IN VOID *Table, >=20 > IN BOOLEAN Checksum, >=20 > IN EFI_ACPI_TABLE_VERSION Version, >=20 > + IN BOOLEAN IsFromHob, >=20 > OUT UINTN *Handle >=20 > ) >=20 > { >=20 > @@ -552,13 +559,17 @@ AddTableToList ( > // could be updated by OS present agent. For example, BufferPtrAddre= ss in >=20 > // SMM communication ACPI table. >=20 > // >=20 > - ASSERT ((EFI_PAGE_SIZE % 64) =3D=3D 0); >=20 > - Status =3D gBS->AllocatePages ( >=20 > - AllocateMaxAddress, >=20 > - EfiACPIMemoryNVS, >=20 > - EFI_SIZE_TO_PAGES (CurrentTableList->TableSize), >=20 > - &AllocPhysAddress >=20 > - ); >=20 > + if (IsFromHob){ >=20 > + AllocPhysAddress =3D (UINTN)Table; >=20 > + } else { >=20 > + ASSERT ((EFI_PAGE_SIZE % 64) =3D=3D 0); >=20 > + Status =3D gBS->AllocatePages ( >=20 > + AllocateMaxAddress, >=20 > + EfiACPIMemoryNVS, >=20 > + EFI_SIZE_TO_PAGES (CurrentTableList->TableSize), >=20 > + &AllocPhysAddress >=20 > + ); >=20 > + } >=20 > } else if (mAcpiTableAllocType =3D=3D AllocateAnyPages) { >=20 > // >=20 > // If there is no allocation limit, there is also no need to use pag= e >=20 > @@ -1689,6 +1700,111 @@ ChecksumCommonTables ( > return EFI_SUCCESS; >=20 > } >=20 >=20 >=20 > +/** >=20 > + This function will find Guid Hob gEfiAcpiTableGuid, and install Acpi t= able from it. >=20 > + >=20 > + @param AcpiTableInstance Protocol instance private data. >=20 > + >=20 > + @return EFI_SUCCESS The function completed successfully. >=20 > + @return EFI_NOT_FOUND The function doesn't find the gEfiAcpiTable= Guid Guid Hob. >=20 > + @return EFI_ABORTED The function could not complete successfull= y. >=20 > + >=20 > +**/ >=20 > +EFI_STATUS >=20 > +InstallAcpiTableFromHob ( >=20 > + EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance >=20 > + ) >=20 > +{ >=20 > + EFI_HOB_GUID_TYPE *GuidHob; >=20 > + EFI_ACPI_TABLE_VERSION Version; >=20 > + EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *ChildTable; >=20 > + UINT64 ChildTableAddress; >=20 > + UINTN Count; >=20 > + UINTN Index; >=20 > + UINTN TableKey; >=20 > + EFI_STATUS Status; >=20 > + UINTN EntrySize; >=20 > + >=20 > + TableKey =3D 0; >=20 > + Version =3D PcdGet32 (PcdAcpiExposedTableVersions); >=20 > + >=20 > + // >=20 > + // HOB only contains the ACPI table in 2.0+ format. >=20 > + // >=20 > + GuidHob =3D GetFirstGuidHob (&gEfiAcpiTableGuid); >=20 > + if (GuidHob =3D=3D NULL) { >=20 > + return EFI_NOT_FOUND; >=20 > + } >=20 > + Rsdp =3D (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER*) (UINTN)(*((UI= NT64*)GET_GUID_HOB_DATA (GuidHob))); >=20 > + >=20 > + // >=20 > + // An ACPI-compatible OS must use the XSDT if present. >=20 > + // It shouldn't happen that XsdtAddress points beyond 4G range in 32-b= it environment. >=20 > + // >=20 > + ASSERT ((UINTN) Rsdp->XsdtAddress =3D=3D Rsdp->XsdtAddress); >=20 > + >=20 > + EntrySize =3D sizeof (UINT64); >=20 > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER*) (UINTN) Rsdp->XsdtAddress; >=20 > + if (Rsdt =3D=3D NULL) { >=20 > + // >=20 > + // XsdtAddress is zero, then we use Rsdt which has 32 bit entry >=20 > + // >=20 > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER*) (UINTN) Rsdp->RsdtAddress; >=20 > + EntrySize =3D sizeof (UINT32); >=20 > + } >=20 > + Count =3D (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER))/EntryS= ize; >=20 > + >=20 > + for (Index =3D 0; Index < Count; Index++){ >=20 > + ChildTableAddress =3D 0; >=20 > + CopyMem(&ChildTableAddress, (VOID*)((UINTN) Rsdt + EntrySize * Index= + sizeof (EFI_ACPI_DESCRIPTION_HEADER)), > EntrySize); >=20 > + // >=20 > + // If the address is of UINT64 while this module runs at 32 bits, >=20 > + // make sure the upper bits are all-zeros. >=20 > + // >=20 > + ASSERT (ChildTableAddress =3D=3D (UINTN) ChildTableAddress); >=20 > + >=20 > + ChildTable =3D (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) ChildTableAdd= ress; >=20 > + Status =3D AddTableToList ( >=20 > + AcpiTableInstance, >=20 > + ChildTable, >=20 > + TRUE, >=20 > + Version, >=20 > + TRUE, >=20 > + &TableKey >=20 > + ); >=20 > + if (ChildTable->Signature =3D=3D EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION= _TABLE_SIGNATURE){ >=20 > + // >=20 > + // Add the FACS and DSDT tables. >=20 > + // >=20 > + Status =3D AddTableToList ( >=20 > + AcpiTableInstance, >=20 > + (VOID *) (UINTN)((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TA= BLE*)ChildTable)->FirmwareCtrl, >=20 > + TRUE, >=20 > + Version, >=20 > + TRUE, >=20 > + &TableKey >=20 > + ); >=20 > + Status =3D AddTableToList ( >=20 > + AcpiTableInstance, >=20 > + (VOID *) (UINTN)((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TA= BLE*)ChildTable)->Dsdt, >=20 > + TRUE, >=20 > + Version, >=20 > + TRUE, >=20 > + &TableKey >=20 > + ); >=20 > + } >=20 > + } >=20 > + if (!EFI_ERROR (Status)) { >=20 > + Status =3D PublishTables ( >=20 > + AcpiTableInstance, >=20 > + Version >=20 > + ); >=20 > + } >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + return Status; >=20 > +} >=20 >=20 >=20 > /** >=20 > Constructor for the ACPI table protocol. Initializes instance >=20 > @@ -1918,6 +2034,8 @@ AcpiTableAcpiTableConstructor ( >=20 >=20 > ChecksumCommonTables (AcpiTableInstance); >=20 >=20 >=20 > + InstallAcpiTableFromHob (AcpiTableInstance); >=20 > + >=20 > // >=20 > // Completed successfully >=20 > // >=20 > -- > 2.30.0.windows.2