]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DynamicTablesPkg/Include/ArmNameSpaceObjects.h
DynamicTablesPkg: Add dynamic PPTT table generation support
[mirror_edk2.git] / DynamicTablesPkg / Include / ArmNameSpaceObjects.h
index bf70dc76cea044b9a8e8eb529d2ddbf892bafd58..19c47ef6556a3b570352ab6d0b4052d60547b569 100644 (file)
@@ -48,6 +48,10 @@ typedef enum ArmObjectID {
   EArmObjGicItsIdentifierArray,       ///< 24 - GIC ITS Identifier Array\r
   EArmObjIdMappingArray,              ///< 25 - ID Mapping Array\r
   EArmObjSmmuInterruptArray,          ///< 26 - SMMU Interrupt Array\r
+  EArmObjProcHierarchyInfo,           ///< 27 - Processor Hierarchy Info\r
+  EArmObjCacheInfo,                   ///< 28 - Cache Info\r
+  EArmObjProcNodeIdInfo,              ///< 29 - Processor Hierarchy Node ID Info\r
+  EArmObjCmRef,                       ///< 30 - CM Object Reference\r
   EArmObjMax\r
 } EARM_OBJECT_ID;\r
 \r
@@ -155,6 +159,13 @@ typedef struct CmArmGicCInfo {
       ACPI Specification.\r
   */\r
   UINT8   ProcessorPowerEfficiencyClass;\r
+\r
+  /** Statistical Profiling Extension buffer overflow GSIV. Zero if\r
+      unsupported by this processor. This field was introduced in\r
+      ACPI 6.3 (MADT revision 5) and is therefore ignored when\r
+      generating MADT revision 4 or lower.\r
+  */\r
+  UINT16  SpeOverflowInterrupt;\r
 } CM_ARM_GICC_INFO;\r
 \r
 /** A structure that describes the\r
@@ -621,6 +632,97 @@ typedef struct CmArmSmmuInterrupt {
   UINT32    Flags;\r
 } CM_ARM_SMMU_INTERRUPT;\r
 \r
+/** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT\r
+\r
+    ID: EArmObjProcHierarchyInfo\r
+*/\r
+typedef struct CmArmProcHierarchyInfo {\r
+  /// A unique token used to identify this object\r
+  CM_OBJECT_TOKEN   Token;\r
+  /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155)\r
+  UINT32            Flags;\r
+  /// Token for the parent CM_ARM_PROC_HIERARCHY_INFO object in the processor\r
+  /// topology. A value of CM_NULL_TOKEN means this node has no parent.\r
+  CM_OBJECT_TOKEN   ParentToken;\r
+  /// Token of the associated CM_ARM_GICC_INFO object which has the\r
+  /// corresponding ACPI Processor ID. A value of CM_NULL_TOKEN means this\r
+  /// node represents a group of associated processors and it does not have an\r
+  /// associated GIC CPU interface.\r
+  CM_OBJECT_TOKEN   GicCToken;\r
+  /// Number of resources private to this Node\r
+  UINT32            NoOfPrivateResources;\r
+  /// Token of the array which contains references to the resources private to\r
+  /// this CM_ARM_PROC_HIERARCHY_INFO instance. This field is ignored if\r
+  /// the NoOfPrivateResources is 0, in which case it is recomended to set\r
+  /// this field to CM_NULL_TOKEN.\r
+  CM_OBJECT_TOKEN   PrivateResourcesArrayToken;\r
+} CM_ARM_PROC_HIERARCHY_INFO;\r
+\r
+/** A structure that describes the Cache Type Structure (Type 1) in PPTT\r
+\r
+    ID: EArmObjCacheInfo\r
+*/\r
+typedef struct CmArmCacheInfo {\r
+  /// A unique token used to identify this object\r
+  CM_OBJECT_TOKEN   Token;\r
+  /// Reference token for the next level of cache that is private to the same\r
+  /// CM_ARM_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN means this\r
+  /// entry represents the last cache level appropriate to the processor\r
+  /// hierarchy node structures using this entry.\r
+  CM_OBJECT_TOKEN   NextLevelOfCacheToken;\r
+  /// Size of the cache in bytes\r
+  UINT32            Size;\r
+  /// Number of sets in the cache\r
+  UINT32            NumberOfSets;\r
+  /// Integer number of ways. The maximum associativity supported by\r
+  /// ACPI Cache type structure is limited to MAX_UINT8. However,\r
+  /// the maximum number of ways supported by the architecture is\r
+  /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field\r
+  /// is 32-bit wide.\r
+  UINT32            Associativity;\r
+  /// Cache attributes (ACPI 6.3 - January 2019, PPTT, Table 5-156)\r
+  UINT8             Attributes;\r
+  /// Line size in bytes\r
+  UINT16            LineSize;\r
+} CM_ARM_CACHE_INFO;\r
+\r
+/** A structure that describes the ID Structure (Type 2) in PPTT\r
+\r
+    ID: EArmObjProcNodeIdInfo\r
+*/\r
+typedef struct CmArmProcNodeIdInfo {\r
+  /// A unique token used to identify this object\r
+  CM_OBJECT_TOKEN   Token;\r
+  // Vendor ID (as described in ACPI ID registry)\r
+  UINT32            VendorId;\r
+  /// First level unique node ID\r
+  UINT64            Level1Id;\r
+  /// Second level unique node ID\r
+  UINT64            Level2Id;\r
+  /// Major revision of the node\r
+  UINT16            MajorRev;\r
+  /// Minor revision of the node\r
+  UINT16            MinorRev;\r
+  /// Spin revision of the node\r
+  UINT16            SpinRev;\r
+} CM_ARM_PROC_NODE_ID_INFO;\r
+\r
+/** A structure that describes a reference to another Configuration Manager\r
+    object.\r
+\r
+    This is useful for creating an array of reference tokens. The framework\r
+    can then query the configuration manager for these arrays using the\r
+    object ID EArmObjCmRef.\r
+\r
+    This can be used is to represent one-to-many relationships between objects.\r
+\r
+    ID: EArmObjCmRef\r
+*/\r
+typedef struct CmArmObjRef {\r
+  /// Token of the CM object being referenced\r
+  CM_OBJECT_TOKEN   ReferenceToken;\r
+} CM_ARM_OBJ_REF;\r
+\r
 #pragma pack()\r
 \r
 #endif // ARM_NAMESPACE_OBJECTS_H_\r