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.web10.10616.1607593108066462102 for ; Thu, 10 Dec 2020 01:38:28 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=bmc8olQM; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: zhichao.gao@intel.com) IronPort-SDR: c+U1STlaMrC3yPCFVQpIpWF/vLxpjbG8gucYFdKO7UqxIcrZtBMjfDJVI8QyUFTX0K4f3pjLjk 4mSxrs0HXzwA== X-IronPort-AV: E=McAfee;i="6000,8403,9830"; a="238333342" X-IronPort-AV: E=Sophos;i="5.78,408,1599548400"; d="scan'208";a="238333342" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Dec 2020 01:38:27 -0800 IronPort-SDR: B+la/MC+qx7OibnLYxoU4nv+ikTEHYNmdAOHAASJZx+cZJVfwYjtbEXVMhQJj6lSzglqD+zWHV uyEaU7C5wcRA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,408,1599548400"; d="scan'208";a="338362126" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga006.jf.intel.com with ESMTP; 10 Dec 2020 01:38:26 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 10 Dec 2020 01:38:26 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 10 Dec 2020 01:38:26 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.46) 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.1713.5; Thu, 10 Dec 2020 01:37:02 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H2qCxW42h5HH7U5uCZxEv+mBuxg6FeTYk7O6qqcr7v5NGY2BmQa6egQv0n8/5DAdbNDEoaVV8u5pu6Sskd1BNZoz78G4Yxldc9AfgSWvzHmj8wEIvfF6wPu7KlaNfuK67dxFwK/eRz1BPcOvj7nhm8MVA0E7A++WwNVryXRNqpAjk2bZVdSw6WiJIKBY953vJVrNt6F4DOghsDeo0kXL1P3Q5k3hlvG6Uz+twyGtSMT3LkkFfeSSagFOhEUbwdl/thhpzVfFw7GPV0esf4JuvX+Uj+A7ZZFdb3xnjM2ifQhGZgfrK2sThLz398uxcZw/6DfHDBLy+k9TocICiGXFmg== 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=HqcKaJYnH2azI+HVc0WbYTOcXNoF3u6cyRzR8PxC81I=; b=nHPKw5mvo+c6sakr+cuTDE+Cv7vvbMtEeg+ERa0NVcwkPHIPNwii6mB0ODcGTiVO9Y0Z0qOyXQMU1Tz80Zp/JLoTsYJHLxfMHOPQus95TGuQhhhrxcQ12R+TbnGU4eMnIw8hBeMSNTZFdiEifynos4Zdp4yVy4+vt+gQs9gY/sihL1M9GEPzPUqacLFoc7Hkeif53T4ptLWg9gMOgWM+TyJRxmvi4BY3+jEgIXTm2NYZ9DgMEMNd2mzei1YuvVVGPSsBsbDo+CG8SLeJj2BScUe0akoap82iPea8VYvw57oSc4ctY3zgub/uJiuyr6djp17xA0rPjb+5UUZp3A8VJw== 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=HqcKaJYnH2azI+HVc0WbYTOcXNoF3u6cyRzR8PxC81I=; b=bmc8olQMTVjxojTWy0m/ZQWZXqa5/M9Y9zhGXnWXeViczRWGf4h8ip4oiqXDoqeGot2ESZsmDTr69qbGrRHwCwIEzFDTLsloAWpM9aHn/Qzb9LFHFxtgLVAIsWDL+diopNn6vKi3DYpqp1nkrLwl8Wd/TldsuvVEwjWfuQm+U4k= Received: from MWHPR11MB1647.namprd11.prod.outlook.com (2603:10b6:301:d::12) by MW3PR11MB4668.namprd11.prod.outlook.com (2603:10b6:303:54::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.17; Thu, 10 Dec 2020 09:37:01 +0000 Received: from MWHPR11MB1647.namprd11.prod.outlook.com ([fe80::c861:b9c1:b082:7c77]) by MWHPR11MB1647.namprd11.prod.outlook.com ([fe80::c861:b9c1:b082:7c77%8]) with mapi id 15.20.3632.023; Thu, 10 Dec 2020 09:37:01 +0000 From: "Gao, Zhichao" To: "devel@edk2.groups.io" , "sami.mujawar@arm.com" CC: "Ni, Ray" , Matteo Carlini , Ben Adderson , nd Subject: Re: [edk2-devel] [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser Thread-Topic: [edk2-devel] [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser Thread-Index: AQHWsqTOEv5wNMVfCES+pvfFC7CraKnwPT6wgAAEwYCAAAg4EA== Date: Thu, 10 Dec 2020 09:37:01 +0000 Message-ID: References: <20201104121821.18728-1-sami.mujawar@arm.com> <20201104121821.18728-3-sami.mujawar@arm.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.55.46.39] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1d98ae62-a7ba-457a-453a-08d89cef25a0 x-ms-traffictypediagnostic: MW3PR11MB4668: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: IFdRT2nIDGPyQeSdjl1U7UlukClpbJzGvnoxgSHvbCqKNiaRynfIbGI/623n8jWXljwRrnTfzUQRUezEmCp5yigY63tRPWQ8szULtXzQ9ddJ5rxEDKswfGNC8e6tZgy28jUu4Xid0wNyJZEQrHMdMIQbY+95HZtkGkD5dMeVrTLWZDnZZ0BwSA+gViPCwfU87j6pzZl5/9/7lTOXcSUawNIeuRQDVUee7QgPBzJOJejkfZ65SVSaXUmae6ujaQGaOKhS/EQspZx/EkOtVr65VXE7p1UqVb0E029IZUsbdgMZEGxHeVJUtrKaxJDmE54Vj5Md1spWalPQ9wGWNylVynQaEpaiwWLsyKP6U/OI3WFqO5lYf08keXgPo0B8Xt+pdfrmTp2KBSRK0oswx/0LTA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1647.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(346002)(136003)(52536014)(19627235002)(508600001)(66556008)(186003)(26005)(4326008)(110136005)(6506007)(66446008)(966005)(71200400001)(33656002)(8936002)(2906002)(8676002)(76116006)(55016002)(86362001)(83380400001)(30864003)(53546011)(7696005)(54906003)(64756008)(66946007)(5660300002)(66476007)(9686003)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?+3puG6B9M9o5ZGNMMjWIibj9wmZg2VnE8xKjQsMl/h7J8kYyO2x5vrj4AXUe?= =?us-ascii?Q?vj9d/UI+ichK8nbkSa3lnWwinZCcq31xb0vwd4rUkNwPinqziyndiYQbabte?= =?us-ascii?Q?6NRndBLfOAHYvQaB0DSUdo5dlgNsrXDCzycV82INvsbOaTo34rzvvs2XkpMN?= =?us-ascii?Q?kDdq+vDZ89mgM95qbPtRrCsmKWKVNCCDZRw/XD6L6wrVzbpF9ZHaWDDYaud4?= =?us-ascii?Q?T1qHZtbivAwjG3HotAe3iIeb5rLkwWO6CJ6DsV6XBubFlNREhbwbOr7bCfCb?= =?us-ascii?Q?SgVXKTXbVWNZFCDpyqFBpXmVB1HNrTEtmUccChBr3TjHJM1dpxh0itmA3YiA?= =?us-ascii?Q?EYN8HahCMIDs6tFsFRnQ1VmQVwWBgZVnm29q1kqC7vPLv13h5p7kVFuM633m?= =?us-ascii?Q?zmDQxYQY6m4soywi1ns+kgZSOXxsUna2xeqqKWIc88+1Lw2nqdYGruu24g3N?= =?us-ascii?Q?YYDyBYajKyoak5z/+gwFyJkwFRpoGWihc/nsk4xYcM3UpUxq7BZ9uQv00Jm3?= =?us-ascii?Q?7PQ7I37t+0PuecWwhnJK/9M/WVXD0uxW7Lkq1fKJRQvARBqC7oJmIyy1QfBp?= =?us-ascii?Q?et0jX+UWd3qh2dSo/1xyW1pZs21/UMl7WJNT9K1BHOUlkqKmfAgmOjkakTvP?= =?us-ascii?Q?QocOjMpHrFkxi/wMt2m1F1k1Y5swUlINtni+aOWeXlqRO+IIn0zdP53e9iMZ?= =?us-ascii?Q?57k21vWeW2otj0ScQel/EYV8w3rPe+xaGU+YC+fEeWqfDQXH76PMn+67wD0+?= =?us-ascii?Q?RUYmmfIfeObuRv0KZH4cZTFaSopppCWlFQAIpRcCDVJO5/TInL1sQh8/rn4V?= =?us-ascii?Q?g5fT0y4Snz1rdKqvAXV7DmQ6okeXVOjHYj1ko7QsmyiJG71Stjh2mKRnPTAS?= =?us-ascii?Q?eY6arWX4ea93RNmnGs3tTTAYYyLe5THHMAg1p2tfsVMzixqQMUSt5vhoPHbs?= =?us-ascii?Q?7JnmW12pIA7jNzrT3nkVVe5mE43zwYOoPMZ85L2hPSw=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1647.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d98ae62-a7ba-457a-453a-08d89cef25a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2020 09:37:01.3613 (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: wVfL59WzCT/sgv/nb6Zl44SGgc5jPvWLdKPG9HN1gjr9ghbBZwcztvG/36uu7t+M2xcXLCd5cfQEX77XiUh+HQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4668 Return-Path: zhichao.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Apologize for the mistake. I would add the RB to the patches on your branch https://github.com/samimu= jawar/edk2/commits/840_pcct_parser_v2. Thanks, Zhichao > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Sami > Mujawar > Sent: Thursday, December 10, 2020 5:06 PM > To: Gao, Zhichao ; devel@edk2.groups.io > Cc: Ni, Ray ; Matteo Carlini ;= Ben > Adderson ; nd > Subject: Re: [edk2-devel] [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT = Parser >=20 > Hi Zhichao, >=20 > Thank you for reviewing the patches. >=20 > There was a mistake in the patch subject line when I reordered the patch= es. > I had fixed these and resent the patch series. There is no code change t= he > patches are just reordered and the subject lines fixed. >=20 > The links for the correct patches are: > https://edk2.groups.io/g/devel/message/66989?p=3D,,,20,0,0,0::Created,,S= hellPkg > %2FAcpiView%3A,20,2,0,78027441 > https://edk2.groups.io/g/devel/message/66991?p=3D,,,20,0,0,0::Created,,S= hellPkg > %2FAcpiView%3A,20,2,0,78027603 > https://edk2.groups.io/g/devel/message/66990?p=3D,,,20,0,0,0::Created,,S= hellPkg > %2FAcpiView%3A,20,2,0,78027598 >=20 > Apologies for the trouble. >=20 > Regards, >=20 > Sami Mujawar >=20 > -----Original Message----- > From: Gao, Zhichao > Sent: 10 December 2020 08:49 AM > To: Sami Mujawar ; devel@edk2.groups.io > Cc: Ni, Ray ; Matteo Carlini ;= Ben > Adderson ; nd > Subject: RE: [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser >=20 > Reviewed-by: Zhichao Gao >=20 > Thanks, > Zhichao >=20 > > -----Original Message----- > > From: Sami Mujawar > > Sent: Wednesday, November 4, 2020 8:18 PM > > To: devel@edk2.groups.io > > Cc: Sami Mujawar ; Ni, Ray ; > > Gao, Zhichao ; Matteo.Carlini@arm.com; > > Ben.Adderson@arm.com; nd@arm.com > > Subject: [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser > > > > From: Marc Moisson-Franckhauser > > > > Bugzilla: 3047 (https://bugzilla.tianocore.org/show_bug.cgi?id=3D3047) > > > > Create a new parser for the PCCT Table. > > > > The PCCT Table is used to describe how the OSPM can communicate with > > entities outside the platform. It describes which memory spaces > > correspond to which entity as well as a few of the needed information = to handle > the communications. > > > > This new PCCT parser dumps the values and names of the table fields. > > It also performs some validation on the table's fields. > > > > Signed-off-by: Marc Moisson-Franckhauser > franckhauser@arm.com> > > Signed-off-by: Sami Mujawar > > --- > > > > Notes: > > v2: > > - Addressed review comments by adding validation functions [S= AMI] > > for Doorbell, Interrupt Ack and Error Status GAS fields. > > Also added validation to check if the global platform > > interrupt flag is set for type 4 structure. > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h = | 24 +- > > ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiTableParser.h = | 4 > > +- > > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.= c > | > > 615 ++++++++++++++++++++ > > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser.= h > | > > 33 ++ > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandL > > ib.c > > | 4 +- > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib= .i > > nf | 4 +- > > 6 files changed, 679 insertions(+), 5 deletions(-) > > > > diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > > index > > > f81ccac7e118378aa185db4b625e5bcd75f78347..051fdf807abb1067a264c136364 > > bb6d145b38dab 100644 > > --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > > @@ -1,7 +1,7 @@ > > /** @file > > Header file for ACPI parser > > > > - Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. > > + Copyright (c) 2016 - 2020, Arm Limited. All rights reserved. > > SPDX-License-Identifier: BSD-2-Clause-Patent **/ > > > > @@ -671,6 +671,28 @@ ParseAcpiMcfg ( > > ); > > > > /** > > + This function parses the ACPI PCCT table including its > > + sub-structures of type 0 through 4. > > + When trace is enabled this function parses the PCCT table and > > + traces the ACPI table fields. > > + > > + This function also performs validation of the ACPI table fields. > > + > > + @param [in] Trace If TRUE, trace the ACPI fields. > > + @param [in] Ptr Pointer to the start of the buffer. > > + @param [in] AcpiTableLength Length of the ACPI table. > > + @param [in] AcpiTableRevision Revision of the ACPI table. > > +**/ > > +VOID > > +EFIAPI > > +ParseAcpiPcct ( > > + IN BOOLEAN Trace, > > + IN UINT8* Ptr, > > + IN UINT32 AcpiTableLength, > > + IN UINT8 AcpiTableRevision > > + ); > > + > > +/** > > This function parses the ACPI PPTT table. > > When trace is enabled this function parses the PPTT table and > > traces the ACPI table fields. > > diff --git > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiTableParser.h > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiTableParser.h > > index > > > 4f92596b90a6ee422d8d0959881015ffd3de4da0..0ebf79fb653ae3a8190273aee4 > > 52723c6213eb58 100644 > > --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiTableParser.h > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiTableParser.h > > @@ -1,7 +1,7 @@ > > /** @file > > Header file for ACPI table parser > > > > - Copyright (c) 2016 - 2018, ARM Limited. All rights reserved. > > + Copyright (c) 2016 - 2020, Arm Limited. All rights reserved. > > SPDX-License-Identifier: BSD-2-Clause-Patent **/ > > > > @@ -11,7 +11,7 @@ > > /** > > The maximum number of ACPI table parsers. > > */ > > -#define MAX_ACPI_TABLE_PARSERS 16 > > +#define MAX_ACPI_TABLE_PARSERS 32 > > > > /** An invalid/NULL signature value. > > */ > > diff --git > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser > > .c > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser > > .c > > new file mode 100644 > > index > > > 0000000000000000000000000000000000000000..ca553d5953f05651d8df4c95d > > 1e39a73eded5129 > > --- /dev/null > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctPa > > +++ rs > > +++ er.c > > @@ -0,0 +1,615 @@ > > +/** @file > > + PCCT table parser > > + > > + Copyright (c) 2020, Arm Limited. > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > + @par Reference(s): > > + - ACPI 6.3 Specification - January 2019 **/ > > + > > +#include > > +#include > > +#include > > +#include "AcpiParser.h" > > +#include "AcpiView.h" > > +#include "AcpiViewConfig.h" > > +#include "PcctParser.h" > > + > > +// Local variables > > +STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo; > > + > > +STATIC UINT32* PccGlobalFlags; > > +STATIC UINT8* PccSubspaceLength; > > +STATIC UINT8* PccSubspaceType; > > +STATIC UINT8* ExtendedPccSubspaceInterruptFlags; > > + > > +/** > > + This function validates the length coded on 4 bytes of a shared > > +memory range > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidateRangeLength4 ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + if (*(UINT32*)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) { > > + IncrementErrorCount (); > > + Print ( > > + L"\nError: Shared memory range length is too short.\n" > > + L"Length is %u when it should be greater than or equal to %u", > > + *(UINT32*)Ptr, > > + MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN > > + ); > > + } > > +} > > + > > +/** > > + This function validates the length coded on 8 bytes of a shared > > +memory range > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidateRangeLength8 ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + if (*(UINT64*)Ptr <=3D MIN_MEMORY_RANGE_LENGTH) { > > + IncrementErrorCount (); > > + Print ( > > + L"\nError: Shared memory range length is too short.\n" > > + L"Length is %u when it should be greater than %u", > > + *(UINT64*)Ptr, > > + MIN_MEMORY_RANGE_LENGTH > > + ); > > + } > > +} > > + > > +/** > > + This function validates address space for type 0 structure. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePccType0Gas ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + switch (*(UINT8*)Ptr) { > > +#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)) > > + case EFI_ACPI_6_3_SYSTEM_IO: > > +#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)) > > + case EFI_ACPI_6_3_SYSTEM_MEMORY: > > + return; > > + default: > > + IncrementErrorCount (); > > + Print (L"\nError: Invalid address space"); > > + } > > +} > > + > > +/** > > + This function validates address space for structures of types other= than 0. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePccGas ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + switch (*(UINT8*)Ptr) { > > +#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)) > > + case EFI_ACPI_6_3_SYSTEM_IO: > > +#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)) > > + case EFI_ACPI_6_3_FUNCTIONAL_FIXED_HARDWARE: > > + case EFI_ACPI_6_3_SYSTEM_MEMORY: > > + return; > > + default: > > + IncrementErrorCount (); > > + Print (L"\nError: Invalid address space"); > > + } > > +} > > + > > +/** > > + This function validates doorbell address space for type 4 structure= . > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePccDoorbellGas ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + // For slave subspaces this field is optional, if not present the > > +field > > + // should just contain zeros. > > + if (*PccSubspaceType =3D=3D > > EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC) { > > + if (IsZeroBuffer ( > > + Ptr, > > + sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE) > > + )) { > > + return; > > + } > > + } > > + > > + ValidatePccGas (Ptr, Context); > > +} > > + > > +/** > > + This function validates interrupt acknowledge address space for > > + type 4 structure. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePccIntAckGas ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + // If the subspace does not support interrupts or the interrupt is > > + // edge driven the register may be omitted. A value of 0x0 on all > > + // 12 bytes of the GAS structure indicates the register is not > > + // present. > > + if (((*PccGlobalFlags & > > EFI_ACPI_6_3_PCCT_FLAGS_PLATFORM_INTERRUPT) !=3D > > + EFI_ACPI_6_3_PCCT_FLAGS_PLATFORM_INTERRUPT) || > > + ((*ExtendedPccSubspaceInterruptFlags & > > + EFI_ACPI_6_3_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE) > =3D=3D > > + EFI_ACPI_6_3_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE)) > { > > + if (IsZeroBuffer ( > > + Ptr, > > + sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE) > > + )) { > > + return; > > + } > > + } > > + > > + ValidatePccGas (Ptr, Context); > > +} > > + > > +/** > > + This function validates error status address space for type 4 struc= ture. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePccErrStatusGas ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + // This field is ignored by the OSPM on slave channels. > > + if (*PccSubspaceType =3D=3D > > EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC) { > > + return; > > + } > > + > > + ValidatePccGas (Ptr, Context); > > +} > > + > > +/** > > + This function validates platform interrupt flags for type 4 structu= re. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. th= is > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidatePlatInterrupt ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + // If a slave subspace is present in the PCCT, then the global > > +Platform > > + // Interrupt flag must be set to 1. > > + if ((*PccSubspaceType =3D=3D > > EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC) && > > + ((*PccGlobalFlags & > EFI_ACPI_6_3_PCCT_FLAGS_PLATFORM_INTERRUPT) !=3D > > + EFI_ACPI_6_3_PCCT_FLAGS_PLATFORM_INTERRUPT)) { > > + IncrementErrorCount (); > > + Print ( > > + L"\nError: Global Platform interrupt flag must be set to 1" \ > > + L" if a PCC type 4 structure is present in PCCT." > > + ); > > + } > > +} > > + > > +/** > > + An ACPI_PARSER array describing the ACPI PCCT Table. > > +*/ > > +STATIC CONST ACPI_PARSER PcctParser[] =3D { > > + PARSE_ACPI_HEADER (&AcpiHdrInfo), > > + {L"Flags", 4, 36, NULL, NULL, (VOID**)&PccGlobalFlags, NULL, NULL}, > > + {L"Reserved", 8, 40, NULL, NULL, NULL, NULL, NULL} }; > > + > > +/** > > + An ACPI_PARSER array describing the platform communications channel > > +subspace > > + structure header. > > +*/ > > +STATIC CONST ACPI_PARSER PccSubspaceHeaderParser[] =3D { > > + PCC_SUBSPACE_HEADER () > > + // ... Type Specific Fields ... > > +}; > > + > > +/** > > + An ACPI_PARSER array describing the Generic Communications Subspace > > +- Type 0 */ STATIC CONST ACPI_PARSER PccSubspaceType0Parser[] =3D { > > + PCC_SUBSPACE_HEADER (), > > + {L"Reserved", 6, 2, L"%x %x %x %x %x %x", Dump6Chars, NULL, NULL, > > +NULL}, > > + {L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, > > ValidateRangeLength8, > > + NULL}, > > + {L"Doorbell Register", 12, 24, NULL, DumpGas, NULL, ValidatePccType= 0Gas, > > + NULL}, > > + {L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL}, > > + {L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, > > +NULL}, > > + {L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, > > +NULL, NULL} }; > > + > > +/** > > + An ACPI_PARSER array describing the HW-Reduced Communications > > +Subspace > > + - Type 1 > > +*/ > > +STATIC CONST ACPI_PARSER PccSubspaceType1Parser[] =3D { > > + PCC_SUBSPACE_HEADER (), > > + {L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL, NULL, NULL}, > > + {L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL, NULL, NULL, > > +NULL}, > > + {L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL}, > > + {L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, > > ValidateRangeLength8, > > + NULL}, > > + {L"Doorbell Register", 12, 24, NULL, DumpGas, NULL, > > + ValidatePccGas, NULL}, > > + {L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL}, > > + {L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, > > +NULL}, > > + {L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, > > +NULL, NULL} }; > > + > > +/** > > + An ACPI_PARSER array describing the HW-Reduced Communications > > +Subspace > > + - Type 2 > > +*/ > > +STATIC CONST ACPI_PARSER PccSubspaceType2Parser[] =3D { > > + PCC_SUBSPACE_HEADER (), > > + {L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL, NULL, NULL}, > > + {L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL, NULL, NULL, > > +NULL}, > > + {L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL}, > > + {L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, > > ValidateRangeLength8, > > + NULL}, > > + {L"Doorbell Register", 12, 24, NULL, DumpGas, NULL, > > + ValidatePccGas, NULL}, > > + {L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL}, > > + {L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, > > +NULL}, > > + {L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, > > +NULL, NULL}, > > + {L"Platform Interrupt Ack Register", 12, 62, NULL, DumpGas, NULL, > > + ValidatePccGas, NULL}, > > + {L"Platform Interrupt Ack Preserve", 8, 74, L"0x%lx", NULL, NULL, > > +NULL, NULL}, > > + {L"Platform Interrupt Ack Write", 8, 82, L"0x%lx", NULL, NULL, > > + NULL, NULL}, > > +}; > > + > > +/** > > + An ACPI_PARSER array describing the Extended PCC Subspaces - Type > > +3/4 */ STATIC CONST ACPI_PARSER PccSubspaceType3Parser[] =3D { > > + PCC_SUBSPACE_HEADER (), > > + {L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL, > > + ValidatePlatInterrupt, NULL}, > > + {L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL, > > + (VOID**)&ExtendedPccSubspaceInterruptFlags, NULL, NULL}, > > + {L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL}, > > + {L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Memory Range Length", 4, 16, L"0x%x", NULL, NULL, > > ValidateRangeLength4, > > + NULL}, > > + {L"Doorbell Register", 12, 20, NULL, DumpGas, NULL, > > + ValidatePccDoorbellGas, NULL}, > > + {L"Doorbell Preserve", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Doorbell Write", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Nominal Latency", 4, 48, L"%u", NULL, NULL, NULL, NULL}, > > + {L"Maximum Periodic Access Rate", 4, 52, L"%u", NULL, NULL, NULL, > > +NULL}, > > + {L"Minimum Request Turnaround Time", 4, 56, L"%u", NULL, NULL, > > +NULL, NULL}, > > + {L"Platform Interrupt Ack Register", 12, 60, NULL, DumpGas, NULL, > > + ValidatePccIntAckGas, NULL}, > > + {L"Platform Interrupt Ack Preserve", 8, 72, L"0x%lx", NULL, NULL, > > +NULL, NULL}, > > + {L"Platform Interrupt Ack Set", 8, 80, L"0x%lx", NULL, NULL, NULL, > > +NULL}, > > + {L"Reserved", 8, 88, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Cmd Complete Check Reg Addr", 12, 96, NULL, DumpGas, NULL, > > + ValidatePccGas, NULL}, > > + {L"Cmd Complete Check Mask", 8, 108, L"0x%lx", NULL, NULL, NULL, > > +NULL}, > > + {L"Cmd Update Reg Addr", 12, 116, NULL, DumpGas, NULL, > > + ValidatePccGas, NULL}, > > + {L"Cmd Update Preserve mask", 8, 128, L"0x%lx", NULL, NULL, NULL, > > +NULL}, > > + {L"Cmd Update Set mask", 8, 136, L"0x%lx", NULL, NULL, NULL, NULL}, > > + {L"Error Status Register", 12, 144, NULL, DumpGas, NULL, > > + ValidatePccErrStatusGas, NULL}, > > + {L"Error Status Mask", 8, 156, L"0x%lx", NULL, NULL, NULL, NULL}, > > +}; > > + > > +/** > > + This function parses the PCC Subspace type 0. > > + > > + @param [in] Ptr Pointer to the start of Subspace Structure. > > + @param [in] Length Length of the Subspace Structure. > > +**/ > > +STATIC > > +VOID > > +DumpPccSubspaceType0 ( > > + IN UINT8* Ptr, > > + IN UINT8 Length > > + ) > > +{ > > + ParseAcpi ( > > + TRUE, > > + 2, > > + "Subspace Type 0", > > + Ptr, > > + Length, > > + PARSER_PARAMS (PccSubspaceType0Parser) > > + ); > > +} > > + > > +/** > > + This function parses the PCC Subspace type 1. > > + > > + @param [in] Ptr Pointer to the start of the Subspace Structure. > > + @param [in] Length Length of the Subspace Structure. > > +**/ > > +STATIC > > +VOID > > +DumpPccSubspaceType1 ( > > + IN UINT8* Ptr, > > + IN UINT8 Length > > + ) > > +{ > > + ParseAcpi ( > > + TRUE, > > + 2, > > + "Subspace Type 1", > > + Ptr, > > + Length, > > + PARSER_PARAMS (PccSubspaceType1Parser) > > + ); > > +} > > + > > +/** > > + This function parses the PCC Subspace type 2. > > + > > + @param [in] Ptr Pointer to the start of the Subspace Structure. > > + @param [in] Length Length of the Subspace Structure. > > +**/ > > +STATIC > > +VOID > > +DumpPccSubspaceType2 ( > > + IN UINT8* Ptr, > > + IN UINT8 Length > > + ) > > +{ > > + ParseAcpi ( > > + TRUE, > > + 2, > > + "Subspace Type 2", > > + Ptr, > > + Length, > > + PARSER_PARAMS (PccSubspaceType2Parser) > > + ); > > +} > > + > > +/** > > + This function parses the PCC Subspace type 3. > > + > > + @param [in] Ptr Pointer to the start of the Subspace Structure. > > + @param [in] Length Length of the Subspace Structure. > > +**/ > > +STATIC > > +VOID > > +DumpPccSubspaceType3 ( > > + IN UINT8* Ptr, > > + IN UINT8 Length > > + ) > > +{ > > + ParseAcpi ( > > + TRUE, > > + 2, > > + "Subspace Type 3", > > + Ptr, > > + Length, > > + PARSER_PARAMS (PccSubspaceType3Parser) > > + ); > > +} > > + > > +/** > > + This function parses the PCC Subspace type 4. > > + > > + @param [in] Ptr Pointer to the start of the Subspace Structure. > > + @param [in] Length Length of the Subspace Structure. > > +**/ > > +STATIC > > +VOID > > +DumpPccSubspaceType4 ( > > + IN UINT8* Ptr, > > + IN UINT8 Length > > + ) > > +{ > > + ParseAcpi ( > > + TRUE, > > + 2, > > + "Subspace Type 4", > > + Ptr, > > + Length, > > + PARSER_PARAMS (PccSubspaceType3Parser) > > + ); > > +} > > + > > +/** > > + This function parses the ACPI PCCT table including its > > +sub-structures > > + of type 0 through 4. > > + When trace is enabled this function parses the PCCT table and > > + traces the ACPI table fields. > > + > > + This function also performs validation of the ACPI table fields. > > + > > + @param [in] Trace If TRUE, trace the ACPI fields. > > + @param [in] Ptr Pointer to the start of the buffer. > > + @param [in] AcpiTableLength Length of the ACPI table. > > + @param [in] AcpiTableRevision Revision of the ACPI table. > > +**/ > > +VOID > > +EFIAPI > > +ParseAcpiPcct ( > > + IN BOOLEAN Trace, > > + IN UINT8* Ptr, > > + IN UINT32 AcpiTableLength, > > + IN UINT8 AcpiTableRevision > > + ) > > +{ > > + UINT32 Offset; > > + UINT8* PccSubspacePtr; > > + UINTN SubspaceCount; > > + > > + if (!Trace) { > > + return; > > + } > > + > > + Offset =3D ParseAcpi ( > > + TRUE, > > + 0, > > + "PCCT", > > + Ptr, > > + AcpiTableLength, > > + PARSER_PARAMS (PcctParser) > > + ); > > + > > + PccSubspacePtr =3D Ptr + Offset; > > + > > + SubspaceCount =3D 0; > > + while (Offset < AcpiTableLength) { > > + // Parse common structure header to obtain Type and Length. > > + ParseAcpi ( > > + FALSE, > > + 0, > > + NULL, > > + PccSubspacePtr, > > + AcpiTableLength - Offset, > > + PARSER_PARAMS (PccSubspaceHeaderParser) > > + ); > > + > > + // Check if the values used to control the parsing logic have bee= n > > + // successfully read. > > + if ((PccSubspaceType =3D=3D NULL) || > > + (PccSubspaceLength =3D=3D NULL)) { > > + IncrementErrorCount (); > > + Print ( > > + L"ERROR: Insufficient remaining table buffer length to read t= he " \ > > + L"structure header. Length =3D %u.\n", > > + AcpiTableLength - Offset > > + ); > > + return; > > + } > > + > > + // Validate Structure length > > + if ((*PccSubspaceLength =3D=3D 0) || > > + ((Offset + (*PccSubspaceLength)) > AcpiTableLength)) { > > + IncrementErrorCount (); > > + Print ( > > + L"ERROR: Invalid Structure length. " \ > > + L"Length =3D %u. Offset =3D %u. AcpiTableLength =3D %u.\n", > > + *PccSubspaceLength, > > + Offset, > > + AcpiTableLength > > + ); > > + return; > > + } > > + > > + switch (*PccSubspaceType) { > > + case EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_GENERIC: > > + DumpPccSubspaceType0 ( > > + PccSubspacePtr, > > + *PccSubspaceLength > > + ); > > + break; > > + case > > EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS: > > + DumpPccSubspaceType1 ( > > + PccSubspacePtr, > > + *PccSubspaceLength > > + ); > > + break; > > + case > > EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS: > > + DumpPccSubspaceType2 ( > > + PccSubspacePtr, > > + *PccSubspaceLength > > + ); > > + break; > > + case EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC: > > + DumpPccSubspaceType3 ( > > + PccSubspacePtr, > > + *PccSubspaceLength > > + ); > > + break; > > + case EFI_ACPI_6_3_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC: > > + DumpPccSubspaceType4 ( > > + PccSubspacePtr, > > + *PccSubspaceLength > > + ); > > + break; > > + default: > > + IncrementErrorCount (); > > + Print ( > > + L"ERROR: Unknown PCC subspace structure:" > > + L" Type =3D %u, Length =3D %u\n", > > + PccSubspaceType, > > + *PccSubspaceLength > > + ); > > + } > > + > > + PccSubspacePtr +=3D *PccSubspaceLength; > > + Offset +=3D *PccSubspaceLength; > > + SubspaceCount++; > > + } // while > > + > > + if (SubspaceCount > MAX_PCC_SUBSPACES) { > > + IncrementErrorCount (); > > + Print (L"ERROR: Too many PCC subspaces."); > > + } > > +} > > diff --git > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser > > .h > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctParser > > .h > > new file mode 100644 > > index > > > 0000000000000000000000000000000000000000..278dc83c5de8860cbb2b1e2b2 > > e277aa7c6c58698 > > --- /dev/null > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pcct/PcctPa > > +++ rs > > +++ er.h > > @@ -0,0 +1,33 @@ > > +/** @file > > + Header file for PCCT parser > > + > > + Copyright (c) 2020, Arm Limited. > > + SPDX-License-Identifier: BSD-2-Clause-Patent **/ > > + > > +#ifndef PCCT_PARSER_H_ > > +#define PCCT_PARSER_H_ > > + > > +/** > > + Minimum value for the 'length' field in subspaces of types 0, 1 and= 2. > > +*/ > > +#define MIN_MEMORY_RANGE_LENGTH 8 > > + > > +/** > > + Minimum value for the 'length' field in subspaces of types 3 and 4. > > +*/ > > +#define MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN 16 > > + > > +/** > > + Maximum number of PCC subspaces. > > +*/ > > +#define MAX_PCC_SUBSPACES 256 > > + > > +/** > > + Parser for the header of any type of PCC subspace. > > +*/ > > +#define PCC_SUBSPACE_HEADER() = \ > > + {L"Type", 1, 0, L"0x%x", NULL, (VOID**)&PccSubspaceType, NULL, NULL= }, \ > > + {L"Length", 1, 1, L"%u", NULL, (VOID**)&PccSubspaceLength, NULL, > > +NULL} > > + > > +#endif // PCCT_PARSER_H_ > > diff --git > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.c > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.c > > index > > > d2f26ff89f12e596702281c38ab0de3729aa68e4..feb80661cddc420670edb2d8c7a > > 570b0a89272d8 100644 > > --- > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.c > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCo > > +++ mm > > +++ andLib.c > > @@ -1,7 +1,7 @@ > > /** @file > > Main file for 'acpiview' Shell command function. > > > > - Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
> > + Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent **/ > > > > @@ -57,6 +57,8 @@ ACPI_TABLE_PARSER ParserList[] =3D { > > {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > > ParseAcpiMadt}, > > > > > {EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BA > > SE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, > > ParseAcpiMcfg}, > > + > > > {EFI_ACPI_6_2_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE, > > + ParseAcpiPcct}, > > > > > {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGN > > ATURE, > > ParseAcpiPptt}, > > {RSDP_TABLE_INFO, ParseAcpiRsdp}, > > diff --git > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.inf > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.inf > > index > > > 91459f9ec632635ee453c5ef46f67445cd9eee0c..efa9c8784a6670e5a4f500e0ae5 > > 59a4938852f95 100644 > > --- > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLi > > b.inf > > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCo > > +++ mm > > +++ andLib.inf > > @@ -1,7 +1,7 @@ > > ## @file > > # Provides Shell 'acpiview' command functions # -# Copyright (c) > > 2016 - 2020, ARM Limited. All rights reserved.
> > +# Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
> > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -37,6 +37,8 @@ > > [Sources.common] > > Parsers/Madt/MadtParser.c > > Parsers/Madt/MadtParser.h > > Parsers/Mcfg/McfgParser.c > > + Parsers/Pcct/PcctParser.c > > + Parsers/Pcct/PcctParser.h > > Parsers/Pptt/PpttParser.c > > Parsers/Pptt/PpttParser.h > > Parsers/Rsdp/RsdpParser.c > > -- > > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' >=20 >=20 >=20 >=20 >=20