Reviewed-by: Jaben Carsey <jaben.car...@intel.com> And pushed.
> -----Original Message----- > From: Sami Mujawar [mailto:sami.muja...@arm.com] > Sent: Thursday, January 24, 2019 8:05 AM > To: Carsey, Jaben <jaben.car...@intel.com>; Krzysztof Koch > <krzysztof.k...@arm.com>; edk2-devel@lists.01.org > Cc: leif.lindh...@linaro.org; Matteo Carlini <matteo.carl...@arm.com>; > Stephanie Hughes-Fitt <stephanie.hughes-f...@arm.com>; Ni, Ray > <ray...@intel.com>; nd <n...@arm.com> > Subject: RE: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add > support for PPTT > Importance: High > > Reviewed-by: Sami Mujawar <sami.muja...@arm.com> > > Regards, > > Sami Mujawar > > -----Original Message----- > From: Carsey, Jaben <jaben.car...@intel.com> > Sent: 22 January 2019 05:47 PM > To: Krzysztof Koch <krzysztof.k...@arm.com>; edk2-devel@lists.01.org > Cc: leif.lindh...@linaro.org; Matteo Carlini <matteo.carl...@arm.com>; > Stephanie Hughes-Fitt <stephanie.hughes-f...@arm.com>; Ni, Ray > <ray...@intel.com>; Sami Mujawar <sami.muja...@arm.com>; nd > <n...@arm.com> > Subject: RE: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add > support for PPTT > > Reviewed-by: Jaben Carsey <jaben.car...@intel.com> > > Note: I am not pushing this to allow proper time for other to > review/comment. The code looks good to me. > > Jaben > > > -----Original Message----- > > From: Krzysztof Koch [mailto:krzysztof.k...@arm.com] > > Sent: Tuesday, January 22, 2019 9:06 AM > > To: edk2-devel@lists.01.org > > Cc: leif.lindh...@linaro.org; matteo.carl...@arm.com; > > Stephanie.Hughes- f...@arm.com; Carsey, Jaben > > <jaben.car...@intel.com>; Ni, Ray <ray...@intel.com>; > > sami.muja...@arm.com; n...@arm.com > > Subject: [PATCH v1 1/1] ShellPkg/UefiShellAcpiViewCommandLib: Add > > support for PPTT > > Importance: High > > > > Added the acpiview parser for the PPTT table. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Krzysztof Koch <krzysztof.k...@arm.com> > > --- > > The changes can be seen at: > > > https://github.com/KrzysztofKoch1/edk2/tree/woa_390_pptt_acpiview_v1 > > > > Notes: > > v1: > > - add PPTT parser to acpiview [Krzysztof] > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h > > | > 23 > > +- > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Pptt/PpttParser.c > > | 362 ++++++++++++++++++++ > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLib.c | 4 +- > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLib.inf | 3 +- > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComman > > dLib.uni | 3 +- > > 5 files changed, 391 insertions(+), 4 deletions(-) > > > > 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 > > > > - 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 > > the BSD License > > which accompanies this distribution. The full text of the license > > may be found at @@ -655,6 +655,27 @@ ParseAcpiMcfg ( > > 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. > > + > > + 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. > > > > 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 > > + available under the terms and conditions of the BSD > > License > > + which accompanies this distribution. The full text of the license > > + 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 <Library/PrintLib.h> > > +#include <Library/UefiLib.h> > > +#include "AcpiParser.h" > > + > > +// Local variables > > +STATIC CONST UINT8* ProcessorTopologyStructureType; STATIC CONST > > +UINT8* ProcessorTopologyStructureLength; STATIC CONST UINT32* > > +NumberOfPrivateResources; STATIC ACPI_DESCRIPTION_HEADER_INFO > > +AcpiHdrInfo; > > + > > +/** > > + An ACPI_PARSER array describing the ACPI PPTT Table. > > +**/ > > +STATIC CONST ACPI_PARSER PpttParser[] = { > > + PARSE_ACPI_HEADER (&AcpiHdrInfo) > > +}; > > + > > +/** > > + This function validates the Cache Type Structure (Type 1) Line size > > field. > > + > > + @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 = *(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)) != 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 > > field. > > + > > + @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 = *(UINT8*)Ptr; > > + > > + if ((Attributes & 0xE0) != 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[] > = > > { > > + {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 > > +Structure - > > Type 0. > > +**/ > > +STATIC CONST ACPI_PARSER ProcessorHierarchyNodeStructureParser[] = > { > > + {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[] = { > > + {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 > > + of Cache", 4, 8, L"0x%x", NULL, NULL, NULL, NULL}, {L"Size", 4, 12, > > + L"0x%x", NULL, NULL, NULL, NULL}, {L"Number of sets", 4, 16, L"%d", > > + NULL, NULL, NULL, NULL}, {L"Associativity", 1, 20, L"%d", NULL, > > + NULL, NULL, NULL}, {L"Attributes", 1, 21, L"0x%x", NULL, NULL, > > + ValidateCacheAttributes, > > NULL}, > > + {L"Line size", 2, 22, L"%d", NULL, NULL, ValidateCacheLineSize, > > +NULL} }; > > + > > +/** > > + An ACPI_PARSER array describing the ID Type Structure - Type 2. > > +**/ > > +STATIC CONST ACPI_PARSER IdStructureParser[] = { > > + {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 Node > > + 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 = ParseAcpi ( > > + TRUE, > > + 2, > > + "Processor Hierarchy Node Structure", > > + Ptr, > > + Length, > > + PARSER_PARAMS (ProcessorHierarchyNodeStructureParser) > > + ); > > + > > + PrivateResourcePtr = Ptr + Offset; > > + Index = 0; > > + while (Index < *NumberOfPrivateResources) { > > + UnicodeSPrint ( > > + Buffer, > > + sizeof (Buffer), > > + L"Private resources [%d]", > > + Index > > + ); > > + > > + PrintFieldName (4, Buffer); > > + Print ( > > + L"0x%x\n", > > + *((UINT32*) PrivateResourcePtr) > > + ); > > + > > + PrivateResourcePtr += sizeof(UINT32); > > + Index++; > > + } > > +} > > + > > +/** > > + This function parses the Cache Type Structure (Type 1). > > + > > + @param [in] Ptr Pointer to the start of the Cache Type Structure > > data. > > + @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 = ParseAcpi ( > > + TRUE, > > + 0, > > + "PPTT", > > + Ptr, > > + AcpiTableLength, > > + PARSER_PARAMS (PpttParser) > > + ); > > + ProcessorTopologyStructurePtr = Ptr + Offset; > > + > > + while (Offset < AcpiTableLength) { > > + // Parse Processor Hierarchy Node Structure to obtain Type and Length. > > + ParseAcpi ( > > + FALSE, > > + 0, > > + NULL, > > + ProcessorTopologyStructurePtr, > > + 4, // Length of the processor topology structure header is 4 bytes > > + PARSER_PARAMS (ProcessorTopologyStructureHeaderParser) > > + ); > > + > > + if ((Offset + (*ProcessorTopologyStructureLength)) > AcpiTableLength) > { > > + IncrementErrorCount (); > > + Print ( > > + L"ERROR: Invalid processor topology structure length:" > > + L" Type = %d, Length = %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 = %d, Length = %d\n", > > + *ProcessorTopologyStructureType, > > + *ProcessorTopologyStructureLength > > + ); > > + } > > + > > + ProcessorTopologyStructurePtr += > *ProcessorTopologyStructureLength; > > + Offset += *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. > > > > - Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR> > > + Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.<BR> > > This program and the accompanying materials > > are licensed and made available under the terms and conditions of > > the BSD License > > which accompanies this distribution. The full text of the license > > may be found at @@ -41,6 +41,8 @@ ACPI_TABLE_PARSER ParserList[] = { > > {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > > ParseAcpiMadt}, > > > > > {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}, > > > > > {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) > > 2016 - 2018, ARM Limited. All rights reserved.<BR> > > +# Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.<BR> > > # > > # This program and the accompanying materials # are licensed and > > made available under the terms and conditions of the BSD License @@ > > -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.<BR> > > +// Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.<BR> > > // This program and the accompanying materials // are licensed and > > made available under the terms and conditions of the BSD License // > > which accompanies this distribution. The full text of the license may > > 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)' _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel