From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web09.855.1622076186335486276 for ; Wed, 26 May 2021 17:43:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=gOFWl5NZ; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: hao.a.wu@intel.com) IronPort-SDR: 8dAFJYl+Aj+hFWpaV6zk16/OOgeyKvQ7RNYDX04RV0wUgperK4q5hksUTcU68MG62nnAYLNuxR HxzO9rgRW3Fw== X-IronPort-AV: E=McAfee;i="6200,9189,9996"; a="266508320" X-IronPort-AV: E=Sophos;i="5.82,333,1613462400"; d="scan'208";a="266508320" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 17:42:59 -0700 IronPort-SDR: DYedb+7qSKGVNLMdAw4oMO0GrA/uClhKX51xPXrRLZ+Ebc0hx84Onzo3yOE69rrGrvvmgwmFeR KWzFZcIlThJg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,333,1613462400"; d="scan'208";a="436339746" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga007.jf.intel.com with ESMTP; 26 May 2021 17:42:59 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) 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.2242.4; Wed, 26 May 2021 17:42:58 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) 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.2242.4; Wed, 26 May 2021 17:42:58 -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.2242.4 via Frontend Transport; Wed, 26 May 2021 17:42:58 -0700 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.42) 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.2242.4; Wed, 26 May 2021 17:42:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J2dKejDBP6EDMC2RFvQ7XkQtQg5SFod5SQYKpuofb2LPIyOS07mu4F8B551qcOIlT0bTe10kPKzVvnV4SaQRGrKEslMlz0/Yxz9XXeOmm7t9UvXqFKWENXV8Gkri8hlJE3hYf/oNd29PJvjQ+Xyb5NH7GefTqgm93dLpvxqwmqJSvzVQ6I/GDbsa9UajEptGXyMzomBe1IOhXdqr/zKpP00aU+lr1Di5I7dkfZEz1//zFytOYxZWKm9o6+OXFBegCyt70yXgEu6uGGMeTZ80DfKrWx4nb5FMXFA3c24s4fIxB9D3yMnVS9UXQvNyQZ6xHTgJboKoXaZLfUjvfQnGGA== 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=bIQhxS/JcFgXIHSKW8XwTmWaELozpRCWjlmNydjCGd4=; b=oIc2P9tOL+/qJJeba1bSPJcbS3e98qHXADzRK4HPt855BQajjDPFwkuKsIeEnPSlJToXeNE50ktitgjPEiK4Q21SGMSM2e6R3qU9Y5szDd/ForA57J4dI3wjdQTBz7hlxrfCjYcFpkOOseyJJlu5VgpGPJHUCstKWPRlLzFdydX89JxWuz5dGOe83+rBVYFS6q8c9swWnSTy8ZVarvd5RyOe2jTv7G1ZRvM0JbfV1bxAbv3svBu3zqHjzMkpJqzKbdmmkgPO7/sgQqMoJsj2FOL621rxjXY3+be2CJjLtN661SR4gyYiV5gyaACmIoDyQ+kVTbvUa8EKJCMioKlZBA== 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=bIQhxS/JcFgXIHSKW8XwTmWaELozpRCWjlmNydjCGd4=; b=gOFWl5NZ4RnYAJTUlFq9aA/DdGgTZc6E4yoRisxvGig5OTOXbOnz9x3jhKxjRx0mMZYmo3PButdUN8FpgWx10kr9vllX/tIPmLPakTA0Yb51tVYwPhRntiJWcufUefTg0UAXg7deMsjXu9eUViDiIMUyrg2jGi5N9Xq6qnjSRhY= Received: from BN8PR11MB3666.namprd11.prod.outlook.com (2603:10b6:408:8c::19) by BN6PR11MB0065.namprd11.prod.outlook.com (2603:10b6:405:65::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20; Thu, 27 May 2021 00:42:55 +0000 Received: from BN8PR11MB3666.namprd11.prod.outlook.com ([fe80::b9d0:5694:1b70:c031]) by BN8PR11MB3666.namprd11.prod.outlook.com ([fe80::b9d0:5694:1b70:c031%4]) with mapi id 15.20.4150.027; Thu, 27 May 2021 00:42:55 +0000 From: "Wu, Hao A" To: "Liu, Zhiguang" , "devel@edk2.groups.io" CC: "Wang, Jian J" , "Bi, Dandan" , Liming Gao , "Ni, Ray" Subject: Re: [PATCH 8/9] MdeModulePkg/ACPI: Install ACPI table from HOB. Thread-Topic: [PATCH 8/9] MdeModulePkg/ACPI: Install ACPI table from HOB. Thread-Index: AQHXUGxM246edIxpKEqSAgPLk4McCqr1adcg Date: Thu, 27 May 2021 00:42:55 +0000 Message-ID: References: <20210524071234.1056-1-zhiguang.liu@intel.com> <20210524071234.1056-9-zhiguang.liu@intel.com> In-Reply-To: <20210524071234.1056-9-zhiguang.liu@intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 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: [192.198.147.208] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4290b3a2-2247-43cd-fabd-08d920a85e1f x-ms-traffictypediagnostic: BN6PR11MB0065: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:422; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uUJYfDqkh+SOR5c9N4VKkLwULvPp96la9po1F6nWXJ5hrmhWC0C/vn+KGLQmj0QujdaRaLV8zap9JiGmwjxLjk10kCPawHjwFhslqHl7UmRxHnpSMF+M0VISuEHeTYrt9vePp1D/yB3uEqd26bfjKwsEuksqzi6g0Zpua/PUb0nd6E7Cw3AhnJmvRDwKPdNs9uChwTVLQblFkyTgadMy2T//3U9Be7nPxGdn4Mw12Jwcc7L05IhyADmf8M6fTnJtzsK/VpXu0fXvBq1qYzui0EveRxX02tHFrF9v3El1QoBxsQNq8are6PO+7+kbZssXG3ya+EwwoCL3ESsvesBSlHCGb0AxslN+/D+wkCvlqnKbeWj3nAwK/xmnL5CSJoVXq3cWoVUBa98j1ALIooPidKeIkTdTMqGyYoKQWq5m5O6ixo0/0p5V1FOXfVZCniCtdPItBnfvO1+S+lvMTRz/XR1Uu86M9EcHRnY4wGnF7DOjLqCuYpsOyrvTCcoBluoTG8SeDiSV3R0Z2YTgqwAoWJ7GCMuFXE6KB3T0TcKDzwaLltIgm+Zmhv0QdUAeEPi1qVUCX8mBU4buqzv2YderuyUc1FBAQbgFzc3Rdwfb6y4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN8PR11MB3666.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(376002)(366004)(396003)(346002)(66446008)(66476007)(66556008)(64756008)(4326008)(38100700002)(2906002)(52536014)(5660300002)(86362001)(30864003)(122000001)(83380400001)(478600001)(186003)(26005)(71200400001)(9686003)(7696005)(53546011)(6506007)(110136005)(55016002)(54906003)(316002)(107886003)(19627235002)(33656002)(76116006)(66946007)(8936002)(8676002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?IdxyJ0daJtWdWVMX6P3qQe0BOcnqzRRg3NF6wUyWdw0wBP5Au71kdkZzBWEh?= =?us-ascii?Q?F5YnmH4tQuew1mNdXmJotTzbBuQHJYRUTDfIoT110lwgJPd2baWM7Nvb03H6?= =?us-ascii?Q?l5nsYW/51U37oya16EzmuoWNQUwKATsIJpYL8BdRpOOztdwjt99RHrYYWYwB?= =?us-ascii?Q?SLsbR80ESjs/QbEvjrHE0hd0ilJwGcGcaL55JTK1r9UrQ92/ngAEEG0Wm7j+?= =?us-ascii?Q?0aPy/CeWpQhTDpz8jmnxrFchQiHGUb5w5dUI5aVxOZalpZ5u+znfLbYYnH8F?= =?us-ascii?Q?c84doC2e5CtOejUns34Y/Ocmwdpx2fxZow1XB2UdVBkv6Vv5sTCaRAnzGDFl?= =?us-ascii?Q?WAUpNrjzMJwIK6w1XIaMeu5feCq4goJi1e4ab3xfDgy9Cwjo48P4FlTtqa/N?= =?us-ascii?Q?TczECAAjMIMZcESygRTwBpzHHupOGIqQRHhOfp7FRFz1WuL5XnURx/4kkF0e?= =?us-ascii?Q?ad52Mx6i9ykWcZvZIdztnJfUnbq8Mm85WLAMH3R9Fni8LeO5Fm14HqkFfHoj?= =?us-ascii?Q?Q0fBp764zyr9eYsfp/oFzw66Zf/XgeaBIjLdDQpo82a14wG0lynqsyvrWqTt?= =?us-ascii?Q?q6XzoHNqBT23jghUXPC9oWSh+p7KsgouS2NnwyuXME2NJdSz0cV4jItA+HQZ?= =?us-ascii?Q?vb6eFVbGB1c+BhKHekMkEUIKQt/obg92mqk7NuamM593oPo8pU6NcoSfQW3p?= =?us-ascii?Q?kZQ2ycuVZdjbG4IzdZmZdxc1V2Hgur4+DuZiiV+r6S/PqrmSCzadlTt6yVEw?= =?us-ascii?Q?A5XqwyNJv9xI5EoDrh/cAIP4ysKAzWdnqCbys+X8MLR+6BHytD0uRrMQx+Jx?= =?us-ascii?Q?kY00rw/chlJLlZ3fj/lY8sNJFHqzy6YCg6hN1gGryD0sqootUj8hPZpfJIGp?= =?us-ascii?Q?qrjB37qMK2QUq1d8x47ICZjwBajXSMR4p/V+fXQ7fLg8MCqCzidxz6uCwJnD?= =?us-ascii?Q?7EUpxHWb2owHo8WixMe43GkD9e8IhJv3xLzZxzwu2MEi+o9+atZ3Ucm/Behd?= =?us-ascii?Q?9K8k4racXcTDpfNZ2hPMIb6nABu/nLKz5FofKL8Qv8Lg+fjq3U+ZiJraDCvs?= =?us-ascii?Q?lxCu/WgePwlS5RJDYIIyr3lnzpVLeMRF2JHiWoqVhqKt/KVpaSSZxXANlRr6?= =?us-ascii?Q?7nQMi+jRYU7WGaADkLUXKze3jTah1jUeS2zjXNWVX/R+AZ/9vRG2YCRqHEDX?= =?us-ascii?Q?8poiN/88g3gwi5GYgG3gYvd9I49DedxhHs703+gM12BpsiPcVSKtjIDqx1rY?= =?us-ascii?Q?LO42rSm97QuFrmD578Uy87LfyouCPWCW//PmTdQvgeVWl9KWhZ3e9wdrRovd?= =?us-ascii?Q?Li7RSNjloa8UxhpRrusKWq6s?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN8PR11MB3666.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4290b3a2-2247-43cd-fabd-08d920a85e1f X-MS-Exchange-CrossTenant-originalarrivaltime: 27 May 2021 00:42:55.3395 (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: 4snm0gnjIjjIweXv43GjYL1Rel0mHTq90RNnovzIIFFClmB1zNyMoS6DoleONPgGfzpe/NzSARON7kg4vIq+4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB0065 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Some inline comments below: > -----Original Message----- > From: Liu, Zhiguang > Sent: Monday, May 24, 2021 3:13 PM > To: devel@edk2.groups.io > Cc: Wang, Jian J ; Wu, Hao A ; > Bi, Dandan ; Liming Gao > ; Ni, Ray > Subject: [PATCH 8/9] 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_DESCRIPTION_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/AcpiTable.h | 4 +++- > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf | 4 +++- > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c | 144 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++-------- > 3 files changed, 142 insertions(+), 10 deletions(-) >=20 > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTable.h > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTable.h > index 9d7cf7ccfc..7fd393aab3 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTable.h > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTable.h > @@ -1,7 +1,7 @@ > /** @file >=20 > ACPI Table Protocol Driver >=20 >=20 >=20 > - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
>=20 > + Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.
>=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 >=20 >=20 > **/ >=20 > @@ -24,6 +24,8 @@ > #include >=20 > #include >=20 > #include >=20 > +#include >=20 > +#include >=20 >=20 >=20 > // >=20 > // Statements that include other files >=20 > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > index d341df439e..df80c4db35 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,10 +51,12 @@ > DebugLib >=20 > BaseLib >=20 > PcdLib >=20 > + HobLib >=20 >=20 >=20 > [Guids] >=20 > gEfiAcpi10TableGuid ## PRODUCES ## SystemTab= le >=20 > gEfiAcpiTableGuid ## PRODUCES ## SystemTab= le >=20 > + gPldAcpiTableGuid Please help to add "## SOMETIMES_CONSUMES ## HOB" as simple description of = the GUID usage. >=20 >=20 >=20 > [FeaturePcd] >=20 > gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol ## > CONSUMES >=20 > diff --git > a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > index 5a2afdff27..24962843a1 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 > @@ -30,6 +30,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 +45,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 +240,7 @@ InstallAcpiTable ( > AcpiTableBufferConst, >=20 > TRUE, >=20 > Version, >=20 > + FALSE, >=20 > TableKey >=20 > ); >=20 > if (!EFI_ERROR (Status)) { >=20 > @@ -472,6 +475,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 +491,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 +557,16 @@ 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); Is there any special consideration for removing the above check when the ta= ble is not from HOB? Also, will the tables from HOB violate the rule mentioned in the below comm= ent? // Allocate memory for the FACS. This structure must be aligned // on a 64 byte boundary and must be ACPI NVS memory. >=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 > + 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 +1697,124 @@ ChecksumCommonTables ( > return EFI_SUCCESS; >=20 > } >=20 >=20 >=20 > +/** >=20 > + This function will find gPldAcpiTableGuid Guid Hob, 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 > gEfiAcpiTableGuid 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 > + PLD_ACPI_TABLE *AcpiTableAdress; >=20 > + VOID *TableToInstall; >=20 > + PLD_GENERIC_HEADER *GenericHeader; >=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 (&gPldAcpiTableGuid); >=20 > + if (GuidHob =3D=3D NULL) { >=20 > + return EFI_NOT_FOUND; >=20 > + } >=20 > + >=20 > + GenericHeader =3D (PLD_GENERIC_HEADER *) GET_GUID_HOB_DATA > (GuidHob); >=20 > + if ((sizeof (PLD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE > (GuidHob)) || (GenericHeader->Length > GET_GUID_HOB_DATA_SIZE > (GuidHob))) { >=20 > + return EFI_NOT_FOUND; >=20 > + } >=20 > + if (GenericHeader->Revision =3D=3D PLD_ACPI_TABLE_REVISION) { >=20 > + // >=20 > + // PLD_ACPI_TABLE structure is used when Revision equals to > PLD_ACPI_TABLE_REVISION >=20 > + // >=20 > + AcpiTableAdress =3D (PLD_ACPI_TABLE *) GET_GUID_HOB_DATA > (GuidHob); >=20 > + if (GenericHeader->Length < PLD_SIZEOF_THROUGH_FIELD > (PLD_ACPI_TABLE, Rsdp)) { >=20 > + // >=20 > + // Retrun if can't find the ACPI Info Hob with enough length >=20 > + // >=20 > + return EFI_NOT_FOUND; >=20 > + } >=20 > + Rsdp =3D (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) (UINTN) > (AcpiTableAdress->Rsdp); >=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= -bit > 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)) / > EntrySize; Do we need a check on the validity of 'Rsdt->Length'? If 'Dsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)' underflows, I think it is possible to consume invalid content. >=20 > + >=20 > + for (Index =3D 0; Index < Count; Index++){ >=20 > + ChildTableAddress =3D 0; >=20 > + CopyMem (&ChildTableAddress, (UINT8 *) (Rsdt + 1) + EntrySize * In= dex, > 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); Sorry for a question, is the condition in the above ASSERT a case that will= never happen or the above ASSERT is used for table content check? If it is a check, please help to add error handling logic. >=20 > + >=20 > + ChildTable =3D (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) > ChildTableAddress; >=20 > + Status =3D AddTableToList (AcpiTableInstance, ChildTable, TRUE, Ve= rsion, > TRUE, &TableKey); >=20 > + if (EFI_ERROR (Status)) { >=20 > + DEBUG ((DEBUG_ERROR, "InstallAcpiTableFromHob: Fail to add ACPI > table at 0x%p\n", ChildTable)); >=20 > + ASSERT_EFI_ERROR (Status); For a single ChildTable, if the installation fails here, is it still needed= to install the FACS and DSDT within the ChildTable? >=20 > + } >=20 > + if (ChildTable->Signature =3D=3D > EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE){ >=20 > + // >=20 > + // Add the FACS and DSDT tables if it is not NULL. >=20 > + // >=20 > + if (((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) ChildTable)- > >FirmwareCtrl !=3D 0) { >=20 > + TableToInstall =3D (VOID *) (UINTN) > ((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) ChildTable)- > >FirmwareCtrl; >=20 > + Status =3D AddTableToList (AcpiTableInstance, TableToInstall, = TRUE, > Version, TRUE, &TableKey); >=20 > + if (EFI_ERROR (Status)) { >=20 > + DEBUG ((DEBUG_ERROR, "InstallAcpiTableFromHob: Fail to add A= CPI > table FACS\n")); >=20 > + ASSERT_EFI_ERROR (Status); If the installation of FACS fails, is it still needed to install the DSDT b= elow? >=20 > + } >=20 > + } >=20 > + >=20 > + if (((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) ChildTable)- > >Dsdt !=3D 0) { >=20 > + TableToInstall =3D (VOID *) (UINTN) > ((EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) ChildTable)->Dsdt; >=20 > + Status =3D AddTableToList (AcpiTableInstance, TableToInstall, = TRUE, > Version, TRUE, &TableKey); >=20 > + if (EFI_ERROR (Status)) { >=20 > + DEBUG ((DEBUG_ERROR, "InstallAcpiTableFromHob: Fail to add A= CPI > table DSDT\n")); >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + } >=20 > + } >=20 > + } >=20 > + } >=20 > + } >=20 > + Status =3D PublishTables (AcpiTableInstance, Version); If there are errors occurred during the parse of the tables, do we still ne= ed to publish them anyway? Best Regards, Hao Wu >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + return Status; >=20 > +} >=20 >=20 >=20 > /** >=20 > Constructor for the ACPI table protocol. Initializes instance >=20 > @@ -1918,6 +2044,8 @@ AcpiTableAcpiTableConstructor ( >=20 >=20 > ChecksumCommonTables (AcpiTableInstance); >=20 >=20 >=20 > + InstallAcpiTableFromHob (AcpiTableInstance); >=20 > + >=20 > // >=20 > // Completed successfully >=20 > // >=20 > -- > 2.30.0.windows.2