summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DynamicTablesPkg/Include/ConfigurationManagerObject.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/DynamicTablesPkg/Include/ConfigurationManagerObject.h b/DynamicTablesPkg/Include/ConfigurationManagerObject.h
new file mode 100644
index 0000000000..ad67e1ce45
--- /dev/null
+++ b/DynamicTablesPkg/Include/ConfigurationManagerObject.h
@@ -0,0 +1,182 @@
+/** @file
+
+ Copyright (c) 2017 - 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 Glossary:
+ - Cm or CM - Configuration Manager
+ - Obj or OBJ - Object
+**/
+
+#ifndef CONFIGURATION_MANAGER_OBJECT_H_
+#define CONFIGURATION_MANAGER_OBJECT_H_
+
+#include <ArmNameSpaceObjects.h>
+#include <StandardNameSpaceObjects.h>
+
+#pragma pack(1)
+
+/** The CM_OBJECT_ID type is used to identify the Configuration Manager
+ objects.
+
+ Description of Configuration Manager Object ID
+_______________________________________________________________________________
+|31 |30 |29 |28 || 27 | 26 | 25 | 24 || 23 | 22 | 21 | 20 || 19 | 18 | 17 | 16|
+-------------------------------------------------------------------------------
+| Name Space ID || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0|
+_______________________________________________________________________________
+
+Bits: [31:28] - Name Space ID
+ 0000 - Standard
+ 0001 - ARM
+ 1000 - Custom/OEM
+ All other values are reserved.
+
+Bits: [27:16] - Reserved.
+_______________________________________________________________________________
+|15 |14 |13 |12 || 11 | 10 | 9 | 8 || 7 | 6 | 5 | 4 || 3 | 2 | 1 | 0|
+-------------------------------------------------------------------------------
+| 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || Object ID |
+_______________________________________________________________________________
+
+Bits: [15:8] - Are reserved and must be zero.
+
+Bits: [7:0] - Object ID
+
+Object ID's in the Standard Namespace:
+ 0 - Configuration Manager Revision
+ 1 - ACPI Table List
+ 2 - SMBIOS Table List
+
+Object ID's in the ARM Namespace:
+ 0 - Reserved
+ 1 - Boot Architecture Info
+ 2 - CPU Info
+ 3 - Power Management Profile Info
+ 4 - GICC Info
+ 5 - GICD Info
+ 6 - GIC MSI Frame Info
+ 7 - GIC Redistributor Info
+ 8 - GIC ITS Info
+ 9 - Serial Console Port Info
+ 10 - Serial Debug Port Info
+ 11 - Generic Timer Info
+ 12 - Platform GT Block Info
+ 13 - Platform Generic Watchdog
+ 14 - PCI Configuration Space Info
+ 15 - Hypervisor Vendor Id
+ 16 - Fixed feature flags for FADT
+*/
+typedef UINT32 CM_OBJECT_ID;
+
+/** A mask for Object ID
+*/
+#define OBJECT_ID_MASK 0xFF
+
+/** A mask for Namespace ID
+*/
+#define NAMESPACE_ID_MASK 0xF
+
+/** Starting bit position for Namespace ID
+*/
+#define NAMESPACE_ID_BIT_SHIFT 28
+
+/** The EOBJECT_NAMESPACE_ID enum describes the defined namespaces
+ for the Configuration Manager Objects.
+*/
+typedef enum ObjectNameSpaceID {
+ EObjNameSpaceStandard, ///< Standard Objects Namespace
+ EObjNameSpaceArm, ///< ARM Objects Namespace
+ EObjNameSpaceOem = 0x8, ///< OEM Objects Namespace
+ EObjNameSpaceMax
+} EOBJECT_NAMESPACE_ID;
+
+/** A descriptor for Configuration Manager Objects.
+
+ The Configuration Manager Protocol interface uses this descriptor
+ to return the Configuration Manager Objects.
+*/
+typedef struct CmObjDescriptor {
+ /// Object Id
+ CM_OBJECT_ID ObjectId;
+
+ /// Size of the described Object or Object List
+ UINT32 Size;
+
+ /// Pointer to the described Object or Object List
+ VOID * Data;
+
+ /// Count of objects in the list
+ UINT32 Count;
+} CM_OBJ_DESCRIPTOR;
+
+#pragma pack()
+
+/** This macro returns the namespace ID from the CmObjectID.
+
+ @param [in] CmObjectId The Configuration Manager Object ID.
+
+ @retval Returns the Namespace ID corresponding to the CmObjectID.
+**/
+#define GET_CM_NAMESPACE_ID(CmObjectId) \
+ (((CmObjectId) >> NAMESPACE_ID_BIT_SHIFT) & \
+ NAMESPACE_ID_MASK)
+
+/** This macro returns the Object ID from the CmObjectID.
+
+ @param [in] CmObjectId The Configuration Manager Object ID.
+
+ @retval Returns the Object ID corresponding to the CmObjectID.
+**/
+#define GET_CM_OBJECT_ID(CmObjectId) ((CmObjectId) & OBJECT_ID_MASK)
+
+/** This macro returns a Configuration Manager Object ID
+ from the NameSpace ID and the ObjectID.
+
+ @param [in] NameSpaceId The namespace ID for the Object.
+ @param [in] ObjectId The Object ID.
+
+ @retval Returns the Configuration Manager Object ID.
+**/
+#define CREATE_CM_OBJECT_ID(NameSpaceId, ObjectId) \
+ ((((NameSpaceId) & NAMESPACE_ID_MASK) << NAMESPACE_ID_BIT_SHIFT) | \
+ ((ObjectId) & OBJECT_ID_MASK))
+
+/** This macro returns a Configuration Manager Object ID
+ in the Standard Object Namespace.
+
+ @param [in] ObjectId The Object ID.
+
+ @retval Returns a Standard Configuration Manager Object ID.
+**/
+#define CREATE_CM_STD_OBJECT_ID(ObjectId) \
+ (CREATE_CM_OBJECT_ID (EObjNameSpaceStandard, ObjectId))
+
+/** This macro returns a Configuration Manager Object ID
+ in the ARM Object Namespace.
+
+ @param [in] ObjectId The Object ID.
+
+ @retval Returns an ARM Configuration Manager Object ID.
+**/
+#define CREATE_CM_ARM_OBJECT_ID(ObjectId) \
+ (CREATE_CM_OBJECT_ID (EObjNameSpaceArm, ObjectId))
+
+/** This macro returns a Configuration Manager Object ID
+ in the OEM Object Namespace.
+
+ @param [in] ObjectId The Object ID.
+
+ @retval Returns an OEM Configuration Manager Object ID.
+**/
+#define CREATE_CM_OEM_OBJECT_ID(ObjectId) \
+ (CREATE_CM_OBJECT_ID (EObjNameSpaceOem, ObjectId))
+
+#endif // CONFIGURATION_MANAGER_OBJECT_H_