From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (EUR01-VE1-obe.outbound.protection.outlook.com [40.107.14.83]) by mx.groups.io with SMTP id smtpd.web08.10446.1607591157740573154 for ; Thu, 10 Dec 2020 01:05:59 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=PKGgNdu4; spf=pass (domain: arm.com, ip: 40.107.14.83, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1+TKwctrc1DKXNQiJx2yltNZnVxqAzz0fBIgjL9VYCc=; b=PKGgNdu4XFZH6RhKk4/BMmKj1uMS8wS2dtn0PGUW/J3ucsV9paSyot4URqJzwYH7+f6CjQ6B41GmD2IK7bYVAsqBb1yFFaIG+WnzKSZntUoSSGlylcyiuzCzEup9XDqu4YhqEG0I4MNjgaTxlYC8AFleVv6xURicBtO/GTP1zHo= Received: from AM5PR0701CA0018.eurprd07.prod.outlook.com (2603:10a6:203:51::28) by DBBPR08MB5898.eurprd08.prod.outlook.com (2603:10a6:10:20c::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Thu, 10 Dec 2020 09:05:54 +0000 Received: from VE1EUR03FT061.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:51:cafe::b9) by AM5PR0701CA0018.outlook.office365.com (2603:10a6:203:51::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.8 via Frontend Transport; Thu, 10 Dec 2020 09:05:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT061.mail.protection.outlook.com (10.152.19.220) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12 via Frontend Transport; Thu, 10 Dec 2020 09:05:54 +0000 Received: ("Tessian outbound 665ba7fbdfd9:v71"); Thu, 10 Dec 2020 09:05:53 +0000 X-CR-MTA-TID: 64aa7808 Received: from 646096421186.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id A095776F-7A19-4019-A6E6-281FBAD12C14.1; Thu, 10 Dec 2020 09:05:48 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 646096421186.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 10 Dec 2020 09:05:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NPsqt5oqW+s/IPGoZ2cmOZIxjFwhRODUj5Qz5XgFXamXrCAHFg/2MLYe7hCk1V4whtyuAqkijhd7Lgd3zkly7m5QMVG8PpbLIOc7yZ1HelWJFBPHNoNfHEZJ7OkIFFIEJt7+sQLgzILHtSKBlzHnwVv+UPXr93hOrdCz1xuZcCw54B4XHf22Up11WtKZbC66G4UhYas8xlMhKGfIE8pXKvPK1Dk1TUs+ZedcPILGuE6SOYwnoAdGY3SSCoUbDUSsMCFtfZNnlrw4t0ttaFM3I6YphiHwc6OzOZSLpPDK4xTmxgtLYkn8e41Lv2IsCCQLWwcczZohgK60T6QidhNPvQ== 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=1+TKwctrc1DKXNQiJx2yltNZnVxqAzz0fBIgjL9VYCc=; b=RP6lqlXijVnq7uVQ1Rnxfj7qA/fyzkKHD6DYwouTHJvwAF9GGvEfgJkjwkAzrEF8wVb/V/ES0DZTyBdtPE3+AqoDTPEMKSPKShtyTuGfCIYlKJ1MUPsFrnngEJFXZhyftpb0Sub7twn7fgetHcdB4olKCoPDduaDzRYOLSx8fNzCKN1ihiux0Nwzirvt1OPogSup7LY31bsewidp4kmZbyhKBQKn20DpRmwf+66pOy3GFoeI2nlrpHeeK1Zi5u1dW2sKlyT+VSLukdLmH3sALqnbZPJXwzWo4OQuQ+/UaXFD/C/KhrR9my+GFwfapeKqKyH+g7U1TmlE+tRPxrYw1A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1+TKwctrc1DKXNQiJx2yltNZnVxqAzz0fBIgjL9VYCc=; b=PKGgNdu4XFZH6RhKk4/BMmKj1uMS8wS2dtn0PGUW/J3ucsV9paSyot4URqJzwYH7+f6CjQ6B41GmD2IK7bYVAsqBb1yFFaIG+WnzKSZntUoSSGlylcyiuzCzEup9XDqu4YhqEG0I4MNjgaTxlYC8AFleVv6xURicBtO/GTP1zHo= Received: from DB7PR08MB3097.eurprd08.prod.outlook.com (2603:10a6:5:1d::27) by DB8PR08MB5355.eurprd08.prod.outlook.com (2603:10a6:10:11f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12; Thu, 10 Dec 2020 09:05:46 +0000 Received: from DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::315c:f6c3:2600:bd39]) by DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::315c:f6c3:2600:bd39%6]) with mapi id 15.20.3611.039; Thu, 10 Dec 2020 09:05:46 +0000 From: "Sami Mujawar" To: "Gao, Zhichao" , "devel@edk2.groups.io" CC: "Ni, Ray" , Matteo Carlini , Ben Adderson , nd Subject: Re: [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser Thread-Topic: [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser Thread-Index: AQHWsqSxoOEeqhLhKk+LHgaIWFYm/KnwPWIAgAADODA= Date: Thu, 10 Dec 2020 09:05:45 +0000 Message-ID: References: <20201104121821.18728-1-sami.mujawar@arm.com> <20201104121821.18728-3-sami.mujawar@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 93FE624E5573D0479F4BC95D44AA0BC8.0 x-checkrecipientchecked: true Authentication-Results-Original: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [86.161.210.147] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1dd4d6da-2c37-47ed-b0cb-08d89ceacca4 x-ms-traffictypediagnostic: DB8PR08MB5355:|DBBPR08MB5898: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Zbh/CVAq833GHlyfW3JOlVhGmu1SRpfCQl8VN8Fpw9YvlfEd4wQuCGw2WiAnrk2Dvof+QN0+db9AYHw2PAaI9XgiYEv7bCGh95/2Y+83RWbrwZTrNOOreBbFRRSJJARRHgZf2t7/yReNfEnw4n9qWfxC9WzSQ5HsP77wMvDy7PumSdgH+xs8c+SIJr6jyhISi16biWRIZGv4l+Wy+6rFgM5+URn+FNx5o3PHh6O0oG8xWdQ30d/TqCoPu57gmdlruIpbOUHWxCCJuRjSjV9kXMc8n5JfEdTNqvr+HG3rLe9HtfpM1mMOfYVs1KIr73gAd3GZoQTYl/SmLKksbj9hN/rX9jBIRTlwAdHPeXy2ohJWc5ldkHdJ944au6N40E86q5NoAL+Xs2mj49KqivQffQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3097.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39830400003)(366004)(376002)(346002)(396003)(86362001)(71200400001)(9686003)(508600001)(66946007)(4326008)(6506007)(66446008)(64756008)(53546011)(76116006)(7696005)(110136005)(66556008)(83380400001)(966005)(186003)(26005)(55016002)(2906002)(33656002)(5660300002)(54906003)(66476007)(19627235002)(52536014)(30864003)(8936002)(8676002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?GxHHmotCJtO+xoo1w02Ty3JfEgIkL+atxINj2SV35mF788FfWtH7IMbq2oAs?= =?us-ascii?Q?dOv3W+LlnOEq7EidpXq0mt5T2V5AtL4joOLk8pU3/okp1LTYrlLg/cLBCU0z?= =?us-ascii?Q?FTiTCkJ5GkZplvoMph0tNW/5QNl0ggLd8YwgVak/WAGYQjGwZTCRmDz973b5?= =?us-ascii?Q?5cgVSH9c+PYVVZW7KBWT8re6Og8ji+OGoYXwmOeikOzdaBKJQXboQXtRV0MH?= =?us-ascii?Q?7xOTOo0QyUwRf7VDlXLDt06fQp40yR7t3F2+1GbvR1zwIIMa++pl8Mq+0VXl?= =?us-ascii?Q?BxiyRCBe7aTxiz2JiZbbKM70XD7M0IBAc3gN8O/CJLmsSAZfo7Y6OZVKIxOP?= =?us-ascii?Q?UUHEGLzDT5L8r2vp9sRYvz+5gW3CGpjDwAS4JtgELWCvAqbA/j/xmhwAu8mF?= =?us-ascii?Q?UVy+KQkIzlnJ4sK5Dw117EFJo2C6kA0sWoUR2ZTYceFO6RCoiOoCBIljy8v4?= =?us-ascii?Q?+32+9CcUsQ79Xb4S0kSDYs4CGfwYYUqe5fOvREBCm2b/mSGaDmKXLWoRqFn6?= =?us-ascii?Q?Rh1Ds3EIAc4e0U1gubMTvxr8EBQOtDfjY0YL5pxqRwqkvsELEouWrrpOkxRc?= =?us-ascii?Q?XAxoUg8VavgeffEKekCTfiACTnfndp/1o/OmXbc8XpK+/W89dLwISApnlTAL?= =?us-ascii?Q?e5xfvG0NyZrJ5Cock6ry/l1uj+05E7FnHzoddkIKUffvSX1sGkECTrriYBP3?= =?us-ascii?Q?fb793apjaVYOBAv8Ft6Y2OLxChzlMAvmMecsg3WD2RsqyLVv6wQ3KT43nSq5?= =?us-ascii?Q?T307YpMuncG1rr3oAyWZMd3rVDuXT/J4iSvNeY2T/g3tCwJ4DjD0dApTYhEq?= =?us-ascii?Q?RNwFkUf514VwCZyDxLZ1gtW+jJoP2o40tkEdpYS7IZQdRT68Qd4k6GoN/SAW?= =?us-ascii?Q?XWHs+3NSAIUKe2CqPLLOwdgTC4n72DmQR9UFtyKIhPpbeI5ccgtarGfs0qw0?= =?us-ascii?Q?oAP/KqjRAq0VOXfffrZ1PSDIEDmysfQ2M5m1pwtGrm8=3D?= MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5355 Original-Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 59195055-84be-4baa-a3c2-08d89ceac7d1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cMkIW4p4savt28PSCvl7QMMtd6qh6fRlTNMnwkYSB2B6yJA7iQ8fhgE564cTXvZwl51Q6k9mYOZ6tZaIJpNKO3K43RoBd1ggtAz7/Zx5srzuQ9UT/a3JuLeLsxlLmF2vXkp3NyGV5o/tfSJvDl9qCpYtUQAwhTieIjsGDpjqUk9pqIIYfhmc4CIPfJlo8ba7OqUleTXOAwWAlWWUKe3ZrhIZVSMsyj3lYC/WVJfpCsg0USnZIqOEYgObrG4Xn/Ny9A4Bao0sph2KtQj2bRALmpQNgnd/4KY6xronCtWJ03r8DIMU/irMP1yjYcMDJAQ574iwqnOxjOkzbAIMy2nQeQwEnxmjo97rde/MjdWN1PRUD5a6CAtJN7uvWPuCQUvXXmav3wq/TyDWTi4gujecynIKf5Bc9q4rd/VsE2Hu7KqYYKgw7eJ7XEbrjMpteCKFemieI8yVbiyZQzuXJw/3tEl2gLVKYPjMni3+qogEEdI= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(346002)(376002)(396003)(136003)(46966005)(336012)(9686003)(54906003)(2906002)(81166007)(52536014)(47076004)(70206006)(5660300002)(82310400003)(86362001)(110136005)(8936002)(356005)(33656002)(316002)(4326008)(7696005)(8676002)(82740400003)(30864003)(26005)(83380400001)(19627235002)(966005)(478600001)(70586007)(53546011)(186003)(6506007)(55016002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2020 09:05:54.0871 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1dd4d6da-2c37-47ed-b0cb-08d89ceacca4 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB5898 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Zhichao, Thank you for reviewing the patches. There was a mistake in the patch subject line when I reordered the patches. I had fixed these and resent the patch series. There is no code change the = patches are just reordered and the subject lines fixed. The links for the correct patches are: https://edk2.groups.io/g/devel/message/66989?p=3D,,,20,0,0,0::Created,,Shel= lPkg%2FAcpiView%3A,20,2,0,78027441 https://edk2.groups.io/g/devel/message/66991?p=3D,,,20,0,0,0::Created,,Shel= lPkg%2FAcpiView%3A,20,2,0,78027603 https://edk2.groups.io/g/devel/message/66990?p=3D,,,20,0,0,0::Created,,Shel= lPkg%2FAcpiView%3A,20,2,0,78027598 Apologies for the trouble. Regards, Sami Mujawar -----Original Message----- From: Gao, Zhichao =20 Sent: 10 December 2020 08:49 AM To: Sami Mujawar ; devel@edk2.groups.io Cc: Ni, Ray ; Matteo Carlini ; Be= n Adderson ; nd Subject: RE: [PATCH v2-resend 1/2] ShellPkg/AcpiView: PCCT Parser Reviewed-by: Zhichao Gao Thanks, Zhichao > -----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 >=20 > From: Marc Moisson-Franckhauser >=20 > Bugzilla: 3047 (https://bugzilla.tianocore.org/show_bug.cgi?id=3D3047) >=20 > Create a new parser for the PCCT Table. >=20 > The PCCT Table is used to describe how the OSPM can communicate with enti= ties > outside the platform. It describes which memory spaces correspond to whic= h > entity as well as a few of the needed information to handle the communica= tions. >=20 > This new PCCT parser dumps the values and names of the table fields. It a= lso > performs some validation on the table's fields. >=20 > Signed-off-by: Marc Moisson-Franckhauser franckhauser@arm.com> > Signed-off-by: Sami Mujawar > --- >=20 > Notes: > v2: > - Addressed review comments by adding validation functions [SAMI= ] > 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. >=20 > 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 ++ >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.= c > | 4 +- >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.= i > nf | 4 +- > 6 files changed, 679 insertions(+), 5 deletions(-) >=20 > 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 >=20 > - 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 **/ >=20 > @@ -671,6 +671,28 @@ ParseAcpiMcfg ( > ); >=20 > /** > + 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 >=20 > - 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 **/ >=20 > @@ -11,7 +11,7 @@ > /** > The maximum number of ACPI table parsers. > */ > -#define MAX_ACPI_TABLE_PARSERS 16 > +#define MAX_ACPI_TABLE_PARSERS 32 >=20 > /** 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/PcctPars > +++ 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. this > + 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. this > + 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. this > + 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 th= an 0. > + > + @param [in] Ptr Pointer to the start of the field data. > + @param [in] Context Pointer to context specific information e.g. this > + 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. this > + 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. this > + 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 structur= e. > + > + @param [in] Ptr Pointer to the start of the field data. > + @param [in] Context Pointer to context specific information e.g. this > + 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 structure. > + > + @param [in] Ptr Pointer to the start of the field data. > + @param [in] Context Pointer to context specific information e.g. this > + 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, ValidatePccType0Ga= s, > + 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 been > + // successfully read. > + if ((PccSubspaceType =3D=3D NULL) || > + (PccSubspaceLength =3D=3D NULL)) { > + IncrementErrorCount (); > + Print ( > + L"ERROR: Insufficient remaining table buffer length to read the = " \ > + 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/PcctPars > +++ 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/UefiShellAcpiViewCommandLi > b.c > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.c > index > d2f26ff89f12e596702281c38ab0de3729aa68e4..feb80661cddc420670edb2d8c7a > 570b0a89272d8 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.c > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > +++ andLib.c > @@ -1,7 +1,7 @@ > /** @file > Main file for 'acpiview' Shell command function. >=20 > - 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 **/ >=20 > @@ -57,6 +57,8 @@ ACPI_TABLE_PARSER ParserList[] =3D { > {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > ParseAcpiMadt}, >=20 > {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}, >=20 > {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGN > ATURE, > ParseAcpiPptt}, > {RSDP_TABLE_INFO, ParseAcpiRsdp}, > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.inf > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.inf > index > 91459f9ec632635ee453c5ef46f67445cd9eee0c..efa9c8784a6670e5a4f500e0ae5 > 59a4938852f95 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.inf > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > +++ 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)'