From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.15.88; helo=eur01-db5-obe.outbound.protection.outlook.com; envelope-from=sami.mujawar@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150088.outbound.protection.outlook.com [40.107.15.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A440221959CB2 for ; Thu, 24 Jan 2019 08:04:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q+Bp1uWXG55Z7F0F9QG+yYmXTwCoONJK6zDl1z3y848=; b=WCvgmMRc4baFIYjPPDfOEFQoCO3JYu9DAh7+8ySTxKLVYA6zmchilrcdfv91P+xG3UIPxAc3pWLwv038zJxPDzn36RgIYw7nP36e4gu0hXXuSIRJG4b1jDYT4lgVqru51nc9endCDl4HOLL8rloz6B988gqNjgd/OjISCr7GWi0= Received: from DB6PR0802MB2375.eurprd08.prod.outlook.com (10.172.228.142) by DB6PR0802MB2454.eurprd08.prod.outlook.com (10.172.251.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.27; Thu, 24 Jan 2019 16:04:36 +0000 Received: from DB6PR0802MB2375.eurprd08.prod.outlook.com ([fe80::d17f:cf4e:9bed:12e5]) by DB6PR0802MB2375.eurprd08.prod.outlook.com ([fe80::d17f:cf4e:9bed:12e5%5]) with mapi id 15.20.1558.016; Thu, 24 Jan 2019 16:04:36 +0000 From: Sami Mujawar To: "Carsey, Jaben" , Krzysztof Koch , "edk2-devel@lists.01.org" CC: "leif.lindholm@linaro.org" , Matteo Carlini , Stephanie Hughes-Fitt , "Ni, Ray" , nd Thread-Topic: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add support for PPTT Thread-Index: AQHUsnTPwb95WpRCUky92tHjS88K4aW7j+eAgAMHCrA= Date: Thu, 24 Jan 2019 16:04:36 +0000 Message-ID: References: <20190122170558.5892-1-krzysztof.koch@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Sami.Mujawar@arm.com; x-originating-ip: [217.140.106.55] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB6PR0802MB2454; 6:zI9jHC5uylK/lfyLgb6AB7LQntzu9gCF6xc8iXuUaRxP5O+T577jhI+ik6uoMhYvo309p+zYim1TdSNq2AS/ZN0Ax7MK5HpI7bT78hua/EaQRwzDKElAExjYd09kywA2x7r8fZMbOi0VCuUty9eK3Z9WSNb2msUxWlBz5HDtmAgsTLk3nu55jCYr72BbFd8eehZC2hfpkFncRXWumjRxydiQNjmBiTY1wSD5myLVI9Fnf29Ozejlr40MW1DtlKc7wWFnVvkOOx1X9MCdeg8dXgi0cJyA/sMIRgAZBFDhyyl4U+WNuLx2+pF2r7dHP5U1w+8SvVjnEEL9x7iOvTaDbus6XxoYoJ04DJEmnZigcOTDMuMxS716kpKBFDh3CViPXmIVZnR7lM7LQP9Nc3SY9q6bINVlp0/b1KXcQufKeCX06gnpPlASyqJu+vDMAHLOsRdR+wVGhoJpQ5XJ7n9Y8A==; 5:aE2W3DOaZbW+gktaHEb+NIS3npjCRH1FhzPVoKDJXtvZXNx7rxNN7abYkb02nMZJLd83JvXswqnjyvG2jk9ZIIfLtCFjBGUCEb4TSVSZDNAU36pIiXnay3iMHJDWsCYmiiCKpSSx3XT6hQqDAtAyOab/obhTX22AmcCkGadcWK/ShYxOsCpS8yQbrEmbQdH47GOogJsRSek5ha7StyoUxA==; 7:s4jLp0dv1Y2K+nk9UGe1WcC4pUc7jXNUsq5g/yprP6+AJAykhOt2WxzE91jjQmfTTmT28nh+GaUoDsxcFT+Hw8JcWHcSzYKuZVo/FralfxQnvn2VRjixGkTXo7OxscCSsHxAA5XgJRZ7xBnuP0IPgQ== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: 50121742-6318-4b38-24b0-08d68215a33a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB6PR0802MB2454; x-ms-traffictypediagnostic: DB6PR0802MB2454: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 0927AA37C7 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(376002)(396003)(366004)(346002)(189003)(199004)(13464003)(6306002)(53936002)(30864003)(110136005)(9686003)(53946003)(16799955002)(66066001)(54906003)(25786009)(53546011)(6506007)(102836004)(99286004)(15188155005)(71190400001)(7696005)(71200400001)(55016002)(76176011)(74316002)(6436002)(81156014)(229853002)(2501003)(3846002)(8676002)(68736007)(81166006)(305945005)(7736002)(53376002)(316002)(6246003)(33656002)(97736004)(478600001)(486006)(86362001)(8936002)(6116002)(11346002)(446003)(106356001)(4326008)(2906002)(26005)(186003)(72206003)(105586002)(966005)(256004)(14454004)(476003)(213903007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2454; H:DB6PR0802MB2375.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 9LWpJF6GdjVoqE7S+V3567lhUAlXGiauAi50dhF2NfRKv6xTDhyxqB7oJVKwujXngO3aESy8PxsuwmKQoXIS69mqP+DdVoAxm6/AdWIyrQJRxCPl4SemU6o71fMDn+Nwy5Vkl8AR3YY0WvT6c6Mpn8a+S+/Kd/Bc5PXeWKOpnL63yOZp6ZpX1MgBOzqvrG/2Xbd+IPdMYIn9jkndVmIPUNzNcxYEz9yLzy2B/vLssCfuax/fPP27W4d9bGKPg8WaEXZQ4sp8iWKQ+7K1PPXcmCbyTKp3L/ntmz67qNW5JshyMYnuyN+eMcPb3Mb4h3auvoITPpg/RPImy0r2ldtcF0ppt7zsuVaxmWrpSGses6QJMeIW5S6IYVlwiq3EKB5izy34bKrWSBbR8eZ9QOU5fT1hRpkYXMgzEQwxYCq9fgY= MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50121742-6318-4b38-24b0-08d68215a33a X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jan 2019 16:04:36.3063 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2454 Subject: Re: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add support for PPTT X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 X-List-Received-Date: Thu, 24 Jan 2019 16:04:40 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Sami Mujawar Regards, Sami Mujawar -----Original Message----- From: Carsey, Jaben =20 Sent: 22 January 2019 05:47 PM To: Krzysztof Koch ; edk2-devel@lists.01.org Cc: leif.lindholm@linaro.org; Matteo Carlini ; Step= hanie Hughes-Fitt ; Ni, Ray ; Sami Mujawar ; nd Subject: RE: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add suppo= rt for PPTT Reviewed-by: Jaben Carsey Note: I am not pushing this to allow proper time for other to review/commen= t. The code looks good to me. Jaben > -----Original Message----- > From: Krzysztof Koch [mailto:krzysztof.koch@arm.com] > Sent: Tuesday, January 22, 2019 9:06 AM > To: edk2-devel@lists.01.org > Cc: leif.lindholm@linaro.org; Matteo.Carlini@arm.com;=20 > Stephanie.Hughes- Fitt@arm.com; Carsey, Jaben=20 > ; Ni, Ray ;=20 > sami.mujawar@arm.com; nd@arm.com > Subject: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add=20 > support for PPTT > Importance: High >=20 > Added the acpiview parser for the PPTT table. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Krzysztof Koch > --- > The changes can be seen at: > https://github.com/KrzysztofKoch1/edk2/tree/woa_390_pptt_acpiview_v1 >=20 > Notes: > v1: > - add PPTT parser to acpiview [Krzyszto= f] >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h = | 23 > +- > =20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c > | 362 ++++++++++++++++++++ >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > dLib.c | 4 +- >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > dLib.inf | 3 +- >=20 > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > dLib.uni | 3 +- > 5 files changed, 391 insertions(+), 4 deletions(-) >=20 > diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > index > ecf7dae9038a4ebcb3e3764964f0c16ca3ef51f6..a42450c1431be343870dabb4e > 03f64ed1cf78afc 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 - 2018, ARM Limited. All rights reserved. > + Copyright (c) 2016 - 2019, ARM Limited. All rights reserved. > This program and the accompanying materials > are licensed and made available under the terms and conditions of=20 > the BSD License > which accompanies this distribution. The full text of the license=20 > may be found at @@ -655,6 +655,27 @@ ParseAcpiMcfg ( > IN UINT8 AcpiTableRevision > ); >=20 > +/** > + This function parses the ACPI PPTT table. > + When trace is enabled this function parses the PPTT 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 > +ParseAcpiPptt ( > + IN BOOLEAN Trace, > + IN UINT8* Ptr, > + IN UINT32 AcpiTableLength, > + IN UINT8 AcpiTableRevision > + ); > + > /** > This function parses the ACPI RSDP table. >=20 > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser. > c > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser. > c > new file mode 100644 > index > 0000000000000000000000000000000000000000..d97ddf8e925d30917f888bf33 > e2c1346cd330663 > --- /dev/null > +++ > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser. > c > @@ -0,0 +1,362 @@ > +/** @file > + PPTT table parser > + > + Copyright (c) 2019, ARM Limited. All rights reserved. > + This program and the accompanying materials are licensed and made=20 > + available under the terms and conditions of the BSD > License > + which accompanies this distribution. The full text of the license=20 > + may be > found at > + http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > + @par Reference(s): > + - ACPI 6.2 Specification - Errata A, September 2017 **/ > + > +#include > +#include > +#include "AcpiParser.h" > + > +// Local variables > +STATIC CONST UINT8* ProcessorTopologyStructureType; STATIC CONST=20 > +UINT8* ProcessorTopologyStructureLength; STATIC CONST UINT32*=20 > +NumberOfPrivateResources; STATIC ACPI_DESCRIPTION_HEADER_INFO=20 > +AcpiHdrInfo; > + > +/** > + An ACPI_PARSER array describing the ACPI PPTT Table. > +**/ > +STATIC CONST ACPI_PARSER PpttParser[] =3D { > + PARSE_ACPI_HEADER (&AcpiHdrInfo) > +}; > + > +/** > + This function validates the Cache Type Structure (Type 1) Line size fi= eld. > + > + @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 > +ValidateCacheLineSize ( > + IN UINT8* Ptr, > + IN VOID* Context > + ) > +{ > +#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64) > + // Reference: ARM Architecture Reference Manual ARMv8 (D.a) > + // Section D12.2.25: CCSIDR_EL1, Current Cache Size ID Register > + // LineSize, bits [2:0] > + // (Log2(Number of bytes in cache line)) - 4. > + > + UINT16 LineSize; > + LineSize =3D *(UINT16*)Ptr; > + > + if ((LineSize < 16) || (LineSize > 2048)) { > + IncrementErrorCount (); > + Print ( > + L"\nERROR: The cache line size must be between 16 and 2048 bytes" > + L" on ARM Platforms." > + ); > + return; > + } > + > + if ((LineSize & (LineSize - 1)) !=3D 0) { > + IncrementErrorCount (); > + Print (L"\nERROR: The cache line size is not a power of 2."); > + } > +#endif > +} > + > +/** > + This function validates the Cache Type Structure (Type 1) Attributes f= ield. > + > + @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 > +ValidateCacheAttributes ( > + IN UINT8* Ptr, > + IN VOID* Context > + ) > +{ > +#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64) > + // Reference: Advanced Configuration and Power Interface (ACPI) > Specification > + // Version 6.2 Errata A, September 2017 > + // Table 5-153: Cache Type Structure > + > + UINT8 Attributes; > + Attributes =3D *(UINT8*)Ptr; > + > + if ((Attributes & 0xE0) !=3D 0) { > + IncrementErrorCount (); > + Print ( > + L"\nERROR: Attributes bits [7:5] are reserved and must be zero.", > + Attributes > + ); > + return; > + } > +#endif > +} > + > +/** > + An ACPI_PARSER array describing the processor topology structure > header. > +**/ > +STATIC CONST ACPI_PARSER ProcessorTopologyStructureHeaderParser[] =3D > { > + {L"Type", 1, 0, NULL, NULL, (VOID**)&ProcessorTopologyStructureType, > + NULL, NULL}, > + {L"Length", 1, 1, NULL, NULL, > (VOID**)&ProcessorTopologyStructureLength, > + NULL, NULL}, > + {L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL} }; > + > +/** > + An ACPI_PARSER array describing the Processor Hierarchy Node=20 > +Structure - > Type 0. > +**/ > +STATIC CONST ACPI_PARSER ProcessorHierarchyNodeStructureParser[] =3D { > + {L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL}, > + {L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL}, > + > + {L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"Parent", 4, 8, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"ACPI Processor ID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"Number of private resources", 4, 16, L"%d", NULL, > + (VOID**)&NumberOfPrivateResources, NULL, NULL} }; > + > +/** > + An ACPI_PARSER array describing the Cache Type Structure - Type 1. > +**/ > +STATIC CONST ACPI_PARSER CacheTypeStructureParser[] =3D { > + {L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL}, > + {L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL}, > + > + {L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}, {L"Next Level=20 > + of Cache", 4, 8, L"0x%x", NULL, NULL, NULL, NULL}, {L"Size", 4, 12,=20 > + L"0x%x", NULL, NULL, NULL, NULL}, {L"Number of sets", 4, 16, L"%d",=20 > + NULL, NULL, NULL, NULL}, {L"Associativity", 1, 20, L"%d", NULL,=20 > + NULL, NULL, NULL}, {L"Attributes", 1, 21, L"0x%x", NULL, NULL,=20 > + ValidateCacheAttributes, > NULL}, > + {L"Line size", 2, 22, L"%d", NULL, NULL, ValidateCacheLineSize,=20 > +NULL} }; > + > +/** > + An ACPI_PARSER array describing the ID Type Structure - Type 2. > +**/ > +STATIC CONST ACPI_PARSER IdStructureParser[] =3D { > + {L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL}, > + {L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL}, > + > + {L"VENDOR_ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"LEVEL_1_ID", 8, 8, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"LEVEL_2_ID", 8, 16, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"MAJOR_REV", 2, 24, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"MINOR_REV", 2, 26, L"0x%x", NULL, NULL, NULL, NULL}, > + {L"SPIN_REV", 2, 28, L"0x%x", NULL, NULL, NULL, NULL}, }; > + > +/** > + This function parses the Processor Hierarchy Node Structure (Type 0). > + > + @param [in] Ptr Pointer to the start of the Processor Hierarchy No= de > + Structure data. > + @param [in] Length Length of the Processor Hierarchy Node Structure. > +**/ > +STATIC > +VOID > +DumpProcessorHierarchyNodeStructure ( > + IN UINT8* Ptr, > + IN UINT8 Length > + ) > +{ > + UINT8 Offset; > + UINT8* PrivateResourcePtr; > + UINT32 Index; > + CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH]; > + > + Offset =3D ParseAcpi ( > + TRUE, > + 2, > + "Processor Hierarchy Node Structure", > + Ptr, > + Length, > + PARSER_PARAMS (ProcessorHierarchyNodeStructureParser) > + ); > + > + PrivateResourcePtr =3D Ptr + Offset; > + Index =3D 0; > + while (Index < *NumberOfPrivateResources) { > + UnicodeSPrint ( > + Buffer, > + sizeof (Buffer), > + L"Private resources [%d]", > + Index > + ); > + > + PrintFieldName (4, Buffer); > + Print ( > + L"0x%x\n", > + *((UINT32*) PrivateResourcePtr) > + ); > + > + PrivateResourcePtr +=3D sizeof(UINT32); > + Index++; > + } > +} > + > +/** > + This function parses the Cache Type Structure (Type 1). > + > + @param [in] Ptr Pointer to the start of the Cache Type Structure d= ata. > + @param [in] Length Length of the Cache Type Structure. > +**/ > +STATIC > +VOID > +DumpCacheTypeStructure ( > + IN UINT8* Ptr, > + IN UINT8 Length > + ) > +{ > + ParseAcpi ( > + TRUE, > + 2, > + "Cache Type Structure", > + Ptr, > + Length, > + PARSER_PARAMS (CacheTypeStructureParser) > + ); > +} > + > +/** > + This function parses the ID Structure (Type 2). > + > + @param [in] Ptr Pointer to the start of the ID Structure data. > + @param [in] Length Length of the ID Structure. > +**/ > +STATIC > +VOID > +DumpIDStructure ( > + IN UINT8* Ptr, > + IN UINT8 Length > + ) > +{ > + ParseAcpi ( > + TRUE, > + 2, > + "ID Structure", > + Ptr, > + Length, > + PARSER_PARAMS (IdStructureParser) > + ); > +} > + > +/** > + This function parses the ACPI PPTT table. > + When trace is enabled this function parses the PPTT table and > + traces the ACPI table fields. > + > + This function parses the following processor topology structures: > + - Processor hierarchy node structure (Type 0) > + - Cache Type Structure (Type 1) > + - ID structure (Type 2) > + > + 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 > +ParseAcpiPptt ( > + IN BOOLEAN Trace, > + IN UINT8* Ptr, > + IN UINT32 AcpiTableLength, > + IN UINT8 AcpiTableRevision > + ) > +{ > + UINT32 Offset; > + UINT8* ProcessorTopologyStructurePtr; > + > + if (!Trace) { > + return; > + } > + > + Offset =3D ParseAcpi ( > + TRUE, > + 0, > + "PPTT", > + Ptr, > + AcpiTableLength, > + PARSER_PARAMS (PpttParser) > + ); > + ProcessorTopologyStructurePtr =3D Ptr + Offset; > + > + while (Offset < AcpiTableLength) { > + // Parse Processor Hierarchy Node Structure to obtain Type and Lengt= h. > + ParseAcpi ( > + FALSE, > + 0, > + NULL, > + ProcessorTopologyStructurePtr, > + 4, // Length of the processor topology structure header is 4 byte= s > + PARSER_PARAMS (ProcessorTopologyStructureHeaderParser) > + ); > + > + if ((Offset + (*ProcessorTopologyStructureLength)) > AcpiTableLength= ) { > + IncrementErrorCount (); > + Print ( > + L"ERROR: Invalid processor topology structure length:" > + L" Type =3D %d, Length =3D %d\n", > + *ProcessorTopologyStructureType, > + *ProcessorTopologyStructureLength > + ); > + break; > + } > + > + PrintFieldName (2, L"* Structure Offset *"); > + Print (L"0x%x\n", Offset); > + > + switch (*ProcessorTopologyStructureType) { > + case EFI_ACPI_6_2_PPTT_TYPE_PROCESSOR: > + DumpProcessorHierarchyNodeStructure ( > + ProcessorTopologyStructurePtr, > + *ProcessorTopologyStructureLength > + ); > + break; > + case EFI_ACPI_6_2_PPTT_TYPE_CACHE: > + DumpCacheTypeStructure ( > + ProcessorTopologyStructurePtr, > + *ProcessorTopologyStructureLength > + ); > + break; > + case EFI_ACPI_6_2_PPTT_TYPE_ID: > + DumpIDStructure ( > + ProcessorTopologyStructurePtr, > + *ProcessorTopologyStructureLength > + ); > + break; > + default: > + IncrementErrorCount (); > + Print ( > + L"ERROR: Unknown processor topology structure:" > + L" Type =3D %d, Length =3D %d\n", > + *ProcessorTopologyStructureType, > + *ProcessorTopologyStructureLength > + ); > + } > + > + ProcessorTopologyStructurePtr +=3D *ProcessorTopologyStructureLength= ; > + Offset +=3D *ProcessorTopologyStructureLength; > + } // while > +} > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.c > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.c > index > c6eb7087cfdde2db6a0298b508c751110a061677..2f908bfbd3381f2ca2cfd066dc > ed1ee22f116b46 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.c > +++ > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.c > @@ -1,7 +1,7 @@ > /** @file > Main file for 'acpiview' Shell command function. >=20 > - Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
> + Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
> This program and the accompanying materials > are licensed and made available under the terms and conditions of=20 > the BSD License > which accompanies this distribution. The full text of the license=20 > may be found at @@ -41,6 +41,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 > _BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, > ParseAcpiMcfg}, > + > {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_S > IGNATURE, > + ParseAcpiPptt}, > {RSDP_TABLE_INFO, ParseAcpiRsdp}, > {EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, > ParseAcpiSlit}, >=20 > {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, > ParseAcpiSpcr}, > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.inf > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.inf > index > 6df8c08b855241ed4704b606bb1fd61a0a59464a..db06e7a0667c787b183322e87 > 51ab3f923f01ea4 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.inf > +++ > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.inf > @@ -1,7 +1,7 @@ > ## @file > # Provides Shell 'acpiview' command functions # -# Copyright (c)=20 > 2016 - 2018, ARM Limited. All rights reserved.
> +# Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
> # > # This program and the accompanying materials # are licensed and=20 > made available under the terms and conditions of the BSD License @@=20 > -41,6 +41,7 @@ [Sources.common] > Parsers/Iort/IortParser.c > Parsers/Madt/MadtParser.c > Parsers/Mcfg/McfgParser.c > + Parsers/Pptt/PpttParser.c > Parsers/Rsdp/RsdpParser.c > Parsers/Slit/SlitParser.c > Parsers/Spcr/SpcrParser.c > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.uni > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.uni > index > 1c4d66e1ff507054d4aa42bd47bfae8824c218e6..0762eeba533f01e6e4656084e > c108dea8bd7c58b 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.uni > +++ > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > andLib.uni > @@ -1,6 +1,6 @@ > // /** > // > -// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved.
> +// Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
> // This program and the accompanying materials // are licensed and=20 > made available under the terms and conditions of the BSD License //=20 > which accompanies this distribution. The full text of the license may=20 > be found at @@ -82,6 +82,7 @@ > " GTDT - Generic Timer Description Table\r\n" > " IORT - IO Remapping Table\r\n" > " MCFG - Memory Mapped Config Space Base Address Description > Table\r\n" > +" PPTT - Processor Properties Topology Table\r\n" > " RSDP - Root System Description Pointer\r\n" > " SLIT - System Locality Information Table\r\n" > " SPCR - Serial Port Console Redirection Table\r\n" > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'