96 ASSERT (Node !=
NULL);
100 (Node->NoOfPrivateResources * sizeof (UINT32));
148 ASSERT (NodeIndexer !=
NULL);
152 "PPTT: Node Indexer: SearchToken = %p\n",
156 while (NodeCount-- != 0) {
159 "PPTT: Node Indexer: NodeIndexer->Token = %p. Offset = %d\n",
164 if (NodeIndexer->Token == SearchToken) {
165 *IndexedNodeFound = NodeIndexer;
169 "PPTT: Node Indexer: Token = %p. Found, Status = %r\n",
179 Status = EFI_NOT_FOUND;
182 "PPTT: Node Indexer: SearchToken = %p. Status = %r\n",
208 UINT32 NodesRemaining;
213 NodesRemaining =
Generator->ProcTopologyStructCount;
215 while (NodesRemaining != 0) {
218 "INFO: PPTT: Cycle detection for element with index %d\n",
219 Generator->ProcTopologyStructCount - NodesRemaining
222 CycleDetector = Iterator;
228 "INFO: PPTT: %p -> %p\n",
229 CycleDetector->
Token,
235 Status = EFI_INVALID_PARAMETER;
238 "ERROR: PPTT: Cycle in processor and cache topology detected for " \
239 "a chain of references originating from a node with: Token = %p " \
279 IN UINT32 *PrivResArray,
280 IN UINT32 PrivResCount,
286 UINT32 CmObjRefCount;
291 (CfgMgrProtocol !=
NULL) &&
292 (PrivResArray !=
NULL) &&
298 Status = EFI_INVALID_PARAMETER;
301 "ERROR: PPTT: The number of private resources is %d while " \
302 "PrivResToken = CM_NULL_TOKEN. Status = %r\n",
311 Status = GetEArchCommonObjCmRef (
317 if (EFI_ERROR (Status)) {
320 "ERROR: PPTT: Failed to get CM Object References. " \
321 "PrivResToken = %p. Status = %r\n",
328 if (CmObjRefCount != PrivResCount) {
329 Status = EFI_INVALID_PARAMETER;
332 "ERROR: PPTT: The number of CM Object References retrieved and the " \
333 "number of private resources don't match. CmObjRefCount = %d. " \
334 "PrivResourceCount = %d. PrivResToken = %p. Status = %r\n",
343 while (PrivResCount-- != 0) {
345 Status = EFI_INVALID_PARAMETER;
348 "ERROR: PPTT: CM_NULL_TOKEN provided as reference token for a " \
349 "private resource. Status = %r\n",
365 if (EFI_ERROR (Status)) {
368 "ERROR: PPTT: Failed to get a private resource with Token = %p from " \
369 "Node Indexer. Status = %r\n",
378 *(PrivResArray++) = PpttNodeFound->
Offset;
437 "ERROR: PPTT: Two Processor Hierarchy Info objects (%d and %d) map to " \
438 "the same ACPI ID reference object. ACPI Processor IDs are not unique. " \
439 "AcpiIdObjectToken = %p.\n",
473 IN CONST UINT32 NodesStartOffset
478 UINT32 *PrivateResources;
479 BOOLEAN IsAcpiIdObjectTokenDuplicated;
482 UINT32 GicCInfoCount;
483 UINT32 UniqueGicCRefCount;
494 (CfgMgrProtocol !=
NULL) &&
501 ProcNodeIterator =
Generator->ProcHierarchyNodeIndexedList;
502 NodeCount =
Generator->ProcHierarchyNodeCount;
513 if (IsAcpiIdObjectTokenDuplicated) {
514 return EFI_INVALID_PARAMETER;
517 UniqueGicCRefCount = 0;
519 while (NodeCount-- != 0) {
527 if (Length > MAX_UINT8) {
528 Status = EFI_INVALID_PARAMETER;
531 "ERROR: PPTT: Too many private resources. Count = %d. " \
532 "Maximum supported Processor Node size exceeded. " \
533 "Token = %p. Status = %r\n",
543 ProcStruct->Length = (UINT8)Length;
544 ProcStruct->Reserved[0] = EFI_ACPI_RESERVED_BYTE;
545 ProcStruct->Reserved[1] = EFI_ACPI_RESERVED_BYTE;
548 ProcStruct->Flags.PhysicalPackage = ProcInfoNode->
Flags & BIT0;
549 ProcStruct->Flags.AcpiProcessorIdValid = (ProcInfoNode->
Flags & BIT1) >> 1;
550 ProcStruct->Flags.ProcessorIsAThread = (ProcInfoNode->
Flags & BIT2) >> 2;
551 ProcStruct->Flags.NodeIsALeaf = (ProcInfoNode->
Flags & BIT3) >> 3;
552 ProcStruct->Flags.IdenticalImplementation =
553 (ProcInfoNode->
Flags & BIT4) >> 4;
554 ProcStruct->Flags.Reserved = 0;
558 ProcStruct->Parent = 0;
566 if (EFI_ERROR (Status)) {
569 "ERROR: PPTT: Failed to get parent processor hierarchy node " \
570 "reference. ParentToken = %p. ChildToken = %p. Status = %r\n",
583 Status = EFI_INVALID_PARAMETER;
586 "ERROR: PPTT: Reference to a leaf Processor Hierarchy Node. " \
587 "ParentToken = %p. ChildToken = %p. Status = %r\n",
596 ProcStruct->Parent = PpttNodeFound->
Offset;
606 ProcStruct->AcpiProcessorId = 0;
608 Status = EFI_INVALID_PARAMETER;
611 "ERROR: PPTT: The 'ACPI Processor ID valid' flag is set but no " \
612 "ACPI ID Reference object token was provided. " \
613 "AcpiIdObjectToken = %p. RequestorToken = %p. Status = %r\n",
620 Status = GetEArmObjGicCInfo (
626 if (EFI_ERROR (Status)) {
629 "ERROR: PPTT: Failed to get ACPI ID Reference object token. " \
630 "ACPI Processor ID can't be populated. " \
631 "AcpiIdObjectToken = %p. RequestorToken = %p. Status = %r\n",
639 if (GicCInfoCount != 1) {
640 Status = EFI_INVALID_PARAMETER;
643 "ERROR: PPTT: Failed to find a unique GICC structure. " \
644 "ACPI Processor ID can't be populated. " \
645 "GICC Structure Count = %d. AcpiIdObjectToken = %p. RequestorToken = %p " \
660 UniqueGicCRefCount++;
664 PrivateResources = (UINT32 *)((UINT8 *)ProcStruct +
667 if (ProcStruct->NumberOfPrivateResources != 0) {
673 ProcStruct->NumberOfPrivateResources,
676 if (EFI_ERROR (Status)) {
679 "ERROR: PPTT: Failed to populate the private resources array. " \
695 Status = GetEArmObjGicCInfo (
701 if (EFI_ERROR (Status)) {
704 "ERROR: PPTT: Failed to get GICC Info. Status = %r\n",
716 if (GicCInfoCount > UniqueGicCRefCount) {
717 Status = EFI_INVALID_PARAMETER;
720 "ERROR: PPTT: %d GICC structure(s) exposed by MADT don't have " \
721 "a corresponding Processor Hierarchy Node. Status = %r\n",
722 GicCInfoCount - UniqueGicCRefCount,
745 IN CONST UINT32 CacheIdListSize
750 for (Index = 0; Index < CacheIdListSize; Index++) {
751 if (CacheIdList[Index] == CacheId) {
784 IN CONST UINT32 NodesStartOffset,
794 BOOLEAN CacheIdUnique;
796 UINT32 *FoundCacheIds;
800 (CfgMgrProtocol !=
NULL) &&
807 CacheNodeIterator =
Generator->CacheStructIndexedList;
811 if (FoundCacheIds ==
NULL) {
812 DEBUG ((DEBUG_ERROR,
"ERROR: PPTT: Failed to allocate resources.\n"));
813 return EFI_OUT_OF_RESOURCES;
816 for (NodeIndex = 0; NodeIndex < NodeCount; NodeIndex++) {
820 CacheStruct->Type = EFI_ACPI_6_4_PPTT_TYPE_CACHE;
822 CacheStruct->Reserved[0] = EFI_ACPI_RESERVED_BYTE;
823 CacheStruct->Reserved[1] = EFI_ACPI_RESERVED_BYTE;
827 CacheStruct->Flags.SizePropertyValid = 1;
828 CacheStruct->Flags.NumberOfSetsValid = 1;
829 CacheStruct->Flags.AssociativityValid = 1;
830 CacheStruct->Flags.AllocationTypeValid = 1;
831 CacheStruct->Flags.CacheTypeValid = 1;
832 CacheStruct->Flags.WritePolicyValid = 1;
833 CacheStruct->Flags.LineSizeValid = 1;
834 CacheStruct->Flags.CacheIdValid = 1;
835 CacheStruct->Flags.Reserved = 0;
839 CacheStruct->NextLevelOfCache = 0;
847 if (EFI_ERROR (Status)) {
850 "ERROR: PPTT: Failed to get the reference to the Next Level of " \
851 "Cache. NextLevelOfCacheToken = %p. RequestorToken = %p. " \
854 CacheInfoNode->
Token,
861 CacheStruct->NextLevelOfCache = PpttNodeFound->
Offset;
868 CacheStruct->Size = CacheInfoNode->
Size;
872 Status = EFI_INVALID_PARAMETER;
875 "ERROR: PPTT: When ARMv8.3-CCIDX is implemented the maximum number " \
876 "of sets can be %d. NumberOfSets = %d. Status = %r\n",
887 "INFO: PPTT: When ARMv8.3-CCIDX is not implemented the maximum " \
888 "number of sets can be %d. NumberOfSets = %d\n",
894 CacheStruct->NumberOfSets = CacheInfoNode->
NumberOfSets;
899 Status = EFI_INVALID_PARAMETER;
902 "ERROR: PPTT: The maximum associativity supported by ACPI " \
903 "Cache type structure is %d. Associativity = %d, Status = %r\n",
917 if (CacheInfoNode->
Associativity > PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX) {
918 Status = EFI_INVALID_PARAMETER;
921 "ERROR: PPTT: When ARMv8.3-CCIDX is implemented the maximum cache " \
922 "associativity can be %d. Associativity = %d. Status = %r\n",
923 PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX,
930 if (CacheInfoNode->
Associativity > PPTT_ARM_CACHE_ASSOCIATIVITY_MAX) {
933 "INFO: PPTT: When ARMv8.3-CCIDX is not implemented the maximum " \
934 "cache associativity can be %d. Associativity = %d\n",
935 PPTT_ARM_CACHE_ASSOCIATIVITY_MAX,
944 CacheStruct->Associativity = (UINT8)CacheInfoNode->
Associativity;
947 CacheStruct->Attributes.AllocationType =
949 CacheStruct->Attributes.CacheType =
950 (CacheInfoNode->
Attributes & (BIT2 | BIT3)) >> 2;
951 CacheStruct->Attributes.WritePolicy =
953 CacheStruct->Attributes.Reserved = 0;
956 if ((CacheInfoNode->
LineSize < PPTT_ARM_CACHE_LINE_SIZE_MIN) ||
959 Status = EFI_INVALID_PARAMETER;
962 "ERROR: PPTT: The cache line size must be between %d and %d bytes " \
963 "on ARM Platforms. LineSize = %d. Status = %r\n",
964 PPTT_ARM_CACHE_LINE_SIZE_MIN,
973 Status = EFI_INVALID_PARAMETER;
976 "ERROR: PPTT: The cache line size is not a power of 2. " \
977 "LineSize = %d. Status = %r\n",
984 CacheStruct->LineSize = CacheInfoNode->
LineSize;
988 if (CacheInfoNode->
CacheId == 0) {
989 Status = EFI_INVALID_PARAMETER;
992 "ERROR: PPTT: The cache id cannot be zero. Status = %r\n",
1003 if (!CacheIdUnique) {
1004 Status = EFI_INVALID_PARAMETER;
1007 "ERROR: PPTT: The cache id is not unique. " \
1008 "CacheId = %d. Status = %r\n",
1016 FoundCacheIds[NodeIndex] = CacheInfoNode->
CacheId;
1018 CacheStruct->CacheId = CacheInfoNode->
CacheId;
1023 CacheStruct->Length);
1024 CacheNodeIterator++;
1070 UINT32 ProcTopologyStructCount;
1071 UINT32 ProcHierarchyNodeCount;
1072 UINT32 CacheStructCount;
1074 UINT32 ProcHierarchyNodeOffset;
1075 UINT32 CacheStructOffset;
1089 (AcpiTableInfo !=
NULL) &&
1090 (CfgMgrProtocol !=
NULL) &&
1092 (AcpiTableInfo->TableGeneratorId == This->GeneratorID) &&
1093 (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature)
1096 if ((AcpiTableInfo->AcpiTableRevision < This->MinAcpiTableRevision) ||
1097 (AcpiTableInfo->AcpiTableRevision > This->AcpiTableRevision))
1101 "ERROR: PPTT: Requested table revision = %d is not supported. "
1102 "Supported table revisions: Minimum = %d. Maximum = %d\n",
1103 AcpiTableInfo->AcpiTableRevision,
1104 This->MinAcpiTableRevision,
1105 This->AcpiTableRevision
1107 return EFI_INVALID_PARAMETER;
1115 Status = GetEArchCommonObjProcHierarchyInfo (
1118 &ProcHierarchyNodeList,
1119 &ProcHierarchyNodeCount
1121 if (EFI_ERROR (Status)) {
1124 "ERROR: PPTT: Failed to get processor hierarchy info. Status = %r\n",
1130 ProcTopologyStructCount = ProcHierarchyNodeCount;
1131 Generator->ProcHierarchyNodeCount = ProcHierarchyNodeCount;
1135 Status = GetEArchCommonObjCacheInfo (
1141 if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {
1144 "ERROR: PPTT: Failed to get cache info. Status = %r\n",
1150 ProcTopologyStructCount += CacheStructCount;
1151 Generator->CacheStructCount = CacheStructCount;
1156 ProcTopologyStructCount
1158 if (NodeIndexer ==
NULL) {
1159 Status = EFI_OUT_OF_RESOURCES;
1162 "ERROR: PPTT: Failed to allocate memory for Node Indexer. Status = %r\n ",
1168 DEBUG ((DEBUG_INFO,
"INFO: NodeIndexer = %p\n", NodeIndexer));
1169 Generator->ProcTopologyStructCount = ProcTopologyStructCount;
1176 if (
Generator->ProcHierarchyNodeCount != 0) {
1177 ProcHierarchyNodeOffset = TableSize;
1178 Generator->ProcHierarchyNodeIndexedList = NodeIndexer;
1179 TableSize += GetSizeofProcHierarchyNodes (
1180 ProcHierarchyNodeOffset,
1181 ProcHierarchyNodeList,
1188 " ProcHierarchyNodeCount = %d\n" \
1189 " ProcHierarchyNodeOffset = 0x%x\n" \
1190 " ProcHierarchyNodeIndexedList = 0x%p\n",
1192 ProcHierarchyNodeOffset,
1199 CacheStructOffset = TableSize;
1200 Generator->CacheStructIndexedList = NodeIndexer;
1201 TableSize += GetSizeofCacheTypeStructs (
1209 " CacheStructCount = %d\n" \
1210 " CacheStructOffset = 0x%x\n" \
1211 " CacheStructIndexedList = 0x%p\n",
1221 " ProcTopologyStructCount = %d\n" \
1222 " TableSize = %d\n",
1223 ProcTopologyStructCount,
1229 if (*Table ==
NULL) {
1230 Status = EFI_OUT_OF_RESOURCES;
1233 "ERROR: PPTT: Failed to allocate memory for PPTT Table. " \
1234 "Size = %d. Status = %r\n",
1245 "PPTT: Pptt = 0x%p. TableSize = 0x%x\n",
1258 if (EFI_ERROR (Status)) {
1261 "ERROR: PPTT: Failed to add ACPI header. Status = %r\n",
1268 if (
Generator->ProcHierarchyNodeCount != 0) {
1273 ProcHierarchyNodeOffset
1275 if (EFI_ERROR (Status)) {
1278 "ERROR: PPTT: Failed to add Processor Hierarchy Nodes. Status = %r\n",
1292 AcpiTableInfo->AcpiTableRevision
1294 if (EFI_ERROR (Status)) {
1297 "ERROR: PPTT: Failed to add Cache Type Structures. Status = %r\n",
1306 if (EFI_ERROR (Status)) {
1309 "ERROR: PPTT: Invalid processor and cache topology. Status = %r\n",
1323 if (*Table !=
NULL) {
1357 (AcpiTableInfo !=
NULL) &&
1358 (CfgMgrProtocol !=
NULL) &&
1359 (AcpiTableInfo->TableGeneratorId == This->GeneratorID) &&
1360 (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature)
1371 if ((Table ==
NULL) || (*Table ==
NULL)) {
1372 DEBUG ((DEBUG_ERROR,
"ERROR: PPTT: Invalid Table Pointer\n"));
1377 return EFI_INVALID_PARAMETER;
1387#define PPTT_GENERATOR_REVISION CREATE_REVISION (1, 0)
1398 L
"ACPI.STD.PPTT.GENERATOR",
1453 DEBUG ((DEBUG_INFO,
"PPTT: Register Generator. Status = %r\n", Status));
1478 DEBUG ((DEBUG_INFO,
"PPTT: Deregister Generator. Status = %r\n", Status));
#define EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION
#define EFI_ACPI_6_4_PPTT_TYPE_PROCESSOR
#define EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE
#define EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION
EFI_STATUS EFIAPI RegisterAcpiTableGenerator(IN CONST ACPI_TABLE_GENERATOR *CONST Generator)
EFI_STATUS EFIAPI DeregisterAcpiTableGenerator(IN CONST ACPI_TABLE_GENERATOR *CONST Generator)
#define CREATE_STD_ACPI_TABLE_GEN_ID(TableId)
#define TABLE_GENERATOR_CREATOR_ID
@ EStdAcpiTableIdPptt
PPTT Generator.
@ EArchCommonObjCacheInfo
17 - Cache Info
@ EArchCommonObjCmRef
7 - CM Object Reference
@ EArchCommonObjProcHierarchyInfo
16 - Processor Hierarchy Info
@ EArmObjGicCInfo
2 - GIC CPU Interface Info
#define GET_OBJECT_LIST(CmObjectNameSpace, CmObjectId, Type)
@ EObjNameSpaceArm
ARM Objects Namespace.
@ EObjNameSpaceArchCommon
Arch Common Objects Namespace.
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
STATIC ACPI_PPTT_GENERATOR PpttGenerator
STATIC UINT32 GetProcHierarchyNodeSize(IN CONST CM_ARCH_COMMON_PROC_HIERARCHY_INFO *Node)
STATIC EFI_STATUS DetectCyclesInTopology(IN CONST ACPI_PPTT_GENERATOR *CONST Generator)
STATIC BOOLEAN IsCacheIdUnique(IN CONST UINT32 CacheId, IN CONST UINT32 *CacheIdList, IN CONST UINT32 CacheIdListSize)
EFI_STATUS EFIAPI AcpiPpttLibConstructor(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
#define PPTT_GENERATOR_REVISION
STATIC EFI_STATUS AddPrivateResources(IN CONST ACPI_PPTT_GENERATOR *CONST Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN UINT32 *PrivResArray, IN UINT32 PrivResCount, IN CONST CM_OBJECT_TOKEN PrivResArrayToken)
BOOLEAN EFIAPI IsAcpiIdObjectTokenEqual(IN CONST VOID *Object1, IN CONST VOID *Object2, IN UINTN Index1, IN UINTN Index2)
STATIC EFI_STATUS GetPpttNodeReferencedByToken(IN PPTT_NODE_INDEXER *NodeIndexer, IN UINT32 NodeCount, IN CONST CM_OBJECT_TOKEN SearchToken, OUT PPTT_NODE_INDEXER **IndexedNodeFound)
STATIC EFI_STATUS EFIAPI BuildPpttTable(IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table)
STATIC EFI_STATUS AddProcHierarchyNodes(IN CONST ACPI_PPTT_GENERATOR *CONST Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN CONST EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER *Pptt, IN CONST UINT32 NodesStartOffset)
EFI_STATUS EFIAPI AcpiPpttLibDestructor(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
STATIC EFI_STATUS EFIAPI FreePpttTableResources(IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table)
STATIC EFI_STATUS AddCacheTypeStructures(IN CONST ACPI_PPTT_GENERATOR *CONST Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN CONST EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER *Pptt, IN CONST UINT32 NodesStartOffset, IN CONST UINT32 Revision)
#define GET_SIZE_OF_PPTT_STRUCTS( PpttObjName, PpttObjSize, CmObjectType)
#define PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX
#define IS_ACPI_PROC_ID_VALID(Node)
#define IS_PROC_NODE_LEAF(Node)
#define PPTT_ARM_CACHE_NUMBER_OF_SETS_MAX
#define PPTT_ARM_CACHE_LINE_SIZE_MAX
EFI_STATUS EFIAPI AddAcpiHeader(IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN CONST ACPI_TABLE_GENERATOR *CONST Generator, IN OUT EFI_ACPI_DESCRIPTION_HEADER *CONST AcpiHeader, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST UINT32 Length)
BOOLEAN EFIAPI FindDuplicateValue(IN CONST VOID *Array, IN CONST UINTN Count, IN CONST UINTN ElementSize, IN PFN_IS_EQUAL EqualTestFunction)
ACPI_TABLE_GENERATOR Header
ACPI Table generator header.
UINT32 CacheId
Unique ID for the cache.
UINT8 Attributes
Cache attributes (ACPI 6.4 - January 2021, PPTT, Table 5.140)
UINT32 Size
Size of the cache in bytes.
UINT32 NumberOfSets
Number of sets in the cache.
UINT16 LineSize
Line size in bytes.
CM_OBJECT_TOKEN NextLevelOfCacheToken
CM_OBJECT_TOKEN Token
A unique token used to identify this object.
CM_OBJECT_TOKEN ReferenceToken
Token of the CM object being referenced.
UINT32 NoOfPrivateResources
Number of resources private to this Node.
CM_OBJECT_TOKEN AcpiIdObjectToken
CM_OBJECT_TOKEN Token
A unique token used to identify this object.
CM_OBJECT_TOKEN PrivateResourcesArrayToken
UINT32 Flags
Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155)
CM_OBJECT_TOKEN ParentToken
struct PpttNodeIndexer * TopologyParent
CM_OBJECT_TOKEN Token
Unique identifier for the node.
VOID * Object
Pointer to the CM object being indexed.
UINT32 CycleDetectionStamp