]> 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 93cb6949f0eb2ac2ad3524494e4a14c7a6fab4b8..19c47ef6556a3b570352ab6d0b4052d60547b569 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
 \r
-  Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.\r
+  Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
   @par Glossary:\r
     - Cm or CM   - Configuration Manager\r
@@ -52,13 +46,19 @@ typedef enum ArmObjectID {
   EArmObjSmmuV3,                      ///< 22 - SMMUv3\r
   EArmObjPmcg,                        ///< 23 - PMCG\r
   EArmObjGicItsIdentifierArray,       ///< 24 - GIC ITS Identifier Array\r
-  EArmObjIdMapping,                   ///< 25 - ID Mapping\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
 /** A structure that describes the\r
     ARM Boot Architecture flags.\r
+\r
+    ID: EArmObjBootArchInfo\r
 */\r
 typedef struct CmArmBootArchInfo {\r
   /** This is the ARM_BOOT_ARCH flags field of the FADT Table\r
@@ -71,13 +71,10 @@ typedef struct CmArmCpuInfo {
   // Reserved for use when SMBIOS tables are implemented\r
 } CM_ARM_CPU_INFO;\r
 \r
-typedef struct CmArmCpuInfoList {\r
-  UINT32             CpuCount;\r
-  CM_ARM_CPU_INFO  * CpuInfo;\r
-} CM_ARM_CPU_INFO_LIST;\r
-\r
 /** A structure that describes the\r
     Power Management Profile Information for the Platform.\r
+\r
+    ID: EArmObjPowerManagementProfileInfo\r
 */\r
 typedef struct CmArmPowerManagementProfileInfo {\r
   /** This is the Preferred_PM_Profile field of the FADT Table\r
@@ -88,6 +85,8 @@ typedef struct CmArmPowerManagementProfileInfo {
 \r
 /** A structure that describes the\r
     GIC CPU Interface for the Platform.\r
+\r
+    ID: EArmObjGicCInfo\r
 */\r
 typedef struct CmArmGicCInfo {\r
   /// The GIC CPU Interface number.\r
@@ -160,15 +159,21 @@ 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
     GIC Distributor information for the Platform.\r
+\r
+    ID: EArmObjGicDInfo\r
 */\r
 typedef struct CmArmGicDInfo {\r
-  /// The GIC Distributor ID.\r
-  UINT32  GicId;\r
-\r
   /// The Physical Base address for the GIC Distributor.\r
   UINT64  PhysicalBaseAddress;\r
 \r
@@ -187,6 +192,8 @@ typedef struct CmArmGicDInfo {
 \r
 /** A structure that describes the\r
     GIC MSI Frame information for the Platform.\r
+\r
+    ID: EArmObjGicMsiFrameInfo\r
 */\r
 typedef struct CmArmGicMsiFrameInfo {\r
   /// The GIC MSI Frame ID\r
@@ -210,6 +217,8 @@ typedef struct CmArmGicMsiFrameInfo {
 \r
 /** A structure that describes the\r
     GIC Redistributor information for the Platform.\r
+\r
+    ID: EArmObjGicRedistributorInfo\r
 */\r
 typedef struct CmArmGicRedistInfo {\r
   /** The physical address of a page range\r
@@ -223,6 +232,8 @@ typedef struct CmArmGicRedistInfo {
 \r
 /** A structure that describes the\r
     GIC Interrupt Translation Service information for the Platform.\r
+\r
+    ID: EArmObjGicItsInfo\r
 */\r
 typedef struct CmArmGicItsInfo {\r
   /// The GIC ITS ID\r
@@ -234,6 +245,9 @@ typedef struct CmArmGicItsInfo {
 \r
 /** A structure that describes the\r
     Serial Port information for the Platform.\r
+\r
+    ID: EArmObjSerialConsolePortInfo or\r
+        EArmObjSerialDebugPortInfo\r
 */\r
 typedef struct CmArmSerialPortInfo {\r
   /// The physical base address for the serial port\r
@@ -254,6 +268,8 @@ typedef struct CmArmSerialPortInfo {
 \r
 /** A structure that describes the\r
     Generic Timer information for the Platform.\r
+\r
+    ID: EArmObjGenericTimerInfo\r
 */\r
 typedef struct CmArmGenericTimerInfo {\r
   /// The physical base address for the counter control frame\r
@@ -289,6 +305,8 @@ typedef struct CmArmGenericTimerInfo {
 \r
 /** A structure that describes the\r
     Platform Generic Block Timer Frame information for the Platform.\r
+\r
+    ID: EArmObjGTBlockTimerFrameInfo\r
 */\r
 typedef struct CmArmGTBlockTimerFrameInfo {\r
   /// The Generic Timer frame number\r
@@ -324,6 +342,8 @@ typedef struct CmArmGTBlockTimerFrameInfo {
 \r
 /** A structure that describes the\r
     Platform Generic Block Timer information for the Platform.\r
+\r
+    ID: EArmObjPlatformGTBlockInfo\r
 */\r
 typedef struct CmArmGTBlockInfo {\r
   /// The physical base address for the GT Block Timer structure\r
@@ -338,6 +358,8 @@ typedef struct CmArmGTBlockInfo {
 \r
 /** A structure that describes the\r
     SBSA Generic Watchdog information for the Platform.\r
+\r
+    ID: EArmObjPlatformGenericWatchdogInfo\r
 */\r
 typedef struct CmArmGenericWatchdogInfo {\r
   /// The physical base address of the SBSA Watchdog control frame\r
@@ -357,6 +379,8 @@ typedef struct CmArmGenericWatchdogInfo {
 \r
 /** A structure that describes the\r
     PCI Configuration Space information for the Platform.\r
+\r
+    ID: EArmObjPciConfigSpaceInfo\r
 */\r
 typedef struct CmArmPciConfigSpaceInfo {\r
   /// The physical base address for the PCI segment\r
@@ -374,6 +398,8 @@ typedef struct CmArmPciConfigSpaceInfo {
 \r
 /** A structure that describes the\r
     Hypervisor Vendor ID information for the Platform.\r
+\r
+    ID: EArmObjHypervisorVendorIdentity\r
 */\r
 typedef struct CmArmHypervisorVendorId {\r
   /// The hypervisor Vendor ID\r
@@ -382,6 +408,8 @@ typedef struct CmArmHypervisorVendorId {
 \r
 /** A structure that describes the\r
     Fixed feature flags for the Platform.\r
+\r
+    ID: EArmObjFixedFeatureFlags\r
 */\r
 typedef struct CmArmFixedFeatureFlags {\r
   /// The Fixed feature flags\r
@@ -390,9 +418,11 @@ typedef struct CmArmFixedFeatureFlags {
 \r
 /** A structure that describes the\r
     ITS Group node for the Platform.\r
+\r
+    ID: EArmObjItsGroup\r
 */\r
 typedef struct CmArmItsGroupNode {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// The number of ITS identifiers in the ITS node\r
   UINT32            ItsIdCount;\r
@@ -402,6 +432,8 @@ typedef struct CmArmItsGroupNode {
 \r
 /** A structure that describes the\r
     GIC ITS Identifiers for an ITS Group node.\r
+\r
+    ID: EArmObjGicItsIdentifierArray\r
 */\r
 typedef struct CmArmGicItsIdentifier {\r
   /// The ITS Identifier\r
@@ -410,9 +442,11 @@ typedef struct CmArmGicItsIdentifier {
 \r
 /** A structure that describes the\r
     Named component node for the Platform.\r
+\r
+    ID: EArmObjNamedComponent\r
 */\r
 typedef struct CmArmNamedComponentNode {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// Number of ID mappings\r
   UINT32            IdMappingCount;\r
@@ -439,9 +473,11 @@ typedef struct CmArmNamedComponentNode {
 \r
 /** A structure that describes the\r
     Root complex node for the Platform.\r
+\r
+    ID: EArmObjRootComplex\r
 */\r
 typedef struct CmArmRootComplexNode {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// Number of ID mappings\r
   UINT32            IdMappingCount;\r
@@ -465,9 +501,11 @@ typedef struct CmArmRootComplexNode {
 \r
 /** A structure that describes the\r
     SMMUv1 or SMMUv2 node for the Platform.\r
+\r
+    ID: EArmObjSmmuV1SmmuV2\r
 */\r
 typedef struct CmArmSmmuV1SmmuV2Node {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// Number of ID mappings\r
   UINT32            IdMappingCount;\r
@@ -505,9 +543,11 @@ typedef struct CmArmSmmuV1SmmuV2Node {
 \r
 /** A structure that describes the\r
     SMMUv3 node for the Platform.\r
+\r
+    ID: EArmObjSmmuV3\r
 */\r
 typedef struct CmArmSmmuV3Node {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// Number of ID mappings\r
   UINT32            IdMappingCount;\r
@@ -539,9 +579,11 @@ typedef struct CmArmSmmuV3Node {
 \r
 /** A structure that describes the\r
     PMCG node for the Platform.\r
+\r
+    ID: EArmObjPmcg\r
 */\r
 typedef struct CmArmPmcgNode {\r
-  /// An unique token used to ideintify this object\r
+  /// An unique token used to identify this object\r
   CM_OBJECT_TOKEN   Token;\r
   /// Number of ID mappings\r
   UINT32            IdMappingCount;\r
@@ -561,6 +603,8 @@ typedef struct CmArmPmcgNode {
 \r
 /** A structure that describes the\r
     ID Mappings for the Platform.\r
+\r
+    ID: EArmObjIdMappingArray\r
 */\r
 typedef struct CmArmIdMapping {\r
   /// Input base\r
@@ -577,6 +621,8 @@ typedef struct CmArmIdMapping {
 \r
 /** A structure that describes the\r
     SMMU interrupts for the Platform.\r
+\r
+    ID: EArmObjSmmuInterruptArray\r
 */\r
 typedef struct CmArmSmmuInterrupt {\r
   /// Interrupt number\r
@@ -586,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