1 | /** @file
|
---|
2 |
|
---|
3 | Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
|
---|
4 |
|
---|
5 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
6 |
|
---|
7 | @par Glossary:
|
---|
8 | - Cm or CM - Configuration Manager
|
---|
9 | - Obj or OBJ - Object
|
---|
10 | **/
|
---|
11 |
|
---|
12 | #ifndef CONFIGURATION_MANAGER_OBJECT_H_
|
---|
13 | #define CONFIGURATION_MANAGER_OBJECT_H_
|
---|
14 |
|
---|
15 | #include <ArmNameSpaceObjects.h>
|
---|
16 | #include <StandardNameSpaceObjects.h>
|
---|
17 |
|
---|
18 | #pragma pack(1)
|
---|
19 |
|
---|
20 | /** The CM_OBJECT_ID type is used to identify the Configuration Manager
|
---|
21 | objects.
|
---|
22 |
|
---|
23 | Description of Configuration Manager Object ID
|
---|
24 | _______________________________________________________________________________
|
---|
25 | |31 |30 |29 |28 || 27 | 26 | 25 | 24 || 23 | 22 | 21 | 20 || 19 | 18 | 17 | 16|
|
---|
26 | -------------------------------------------------------------------------------
|
---|
27 | | Name Space ID || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0|
|
---|
28 | _______________________________________________________________________________
|
---|
29 |
|
---|
30 | Bits: [31:28] - Name Space ID
|
---|
31 | 0000 - Standard
|
---|
32 | 0001 - ARM
|
---|
33 | 1000 - Custom/OEM
|
---|
34 | All other values are reserved.
|
---|
35 |
|
---|
36 | Bits: [27:16] - Reserved.
|
---|
37 | _______________________________________________________________________________
|
---|
38 | |15 |14 |13 |12 || 11 | 10 | 9 | 8 || 7 | 6 | 5 | 4 || 3 | 2 | 1 | 0|
|
---|
39 | -------------------------------------------------------------------------------
|
---|
40 | | 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || Object ID |
|
---|
41 | _______________________________________________________________________________
|
---|
42 |
|
---|
43 | Bits: [15:8] - Are reserved and must be zero.
|
---|
44 |
|
---|
45 | Bits: [7:0] - Object ID
|
---|
46 |
|
---|
47 | Object ID's in the Standard Namespace:
|
---|
48 | 0 - Configuration Manager Revision
|
---|
49 | 1 - ACPI Table List
|
---|
50 | 2 - SMBIOS Table List
|
---|
51 |
|
---|
52 | Object ID's in the ARM Namespace:
|
---|
53 | 0 - Reserved
|
---|
54 | 1 - Boot Architecture Info
|
---|
55 | 2 - CPU Info
|
---|
56 | 3 - Power Management Profile Info
|
---|
57 | 4 - GICC Info
|
---|
58 | 5 - GICD Info
|
---|
59 | 6 - GIC MSI Frame Info
|
---|
60 | 7 - GIC Redistributor Info
|
---|
61 | 8 - GIC ITS Info
|
---|
62 | 9 - Serial Console Port Info
|
---|
63 | 10 - Serial Debug Port Info
|
---|
64 | 11 - Generic Timer Info
|
---|
65 | 12 - Platform GT Block Info
|
---|
66 | 13 - Generic Timer Block Frame Info
|
---|
67 | 14 - Platform Generic Watchdog
|
---|
68 | 15 - PCI Configuration Space Info
|
---|
69 | 16 - Hypervisor Vendor Id
|
---|
70 | 17 - Fixed feature flags for FADT
|
---|
71 | 18 - ITS Group
|
---|
72 | 19 - Named Component
|
---|
73 | 20 - Root Complex
|
---|
74 | 21 - SMMUv1 or SMMUv2
|
---|
75 | 22 - SMMUv3
|
---|
76 | 23 - PMCG
|
---|
77 | 24 - GIC ITS Identifier Array
|
---|
78 | 25 - ID Mapping Array
|
---|
79 | 26 - SMMU Interrupt Array
|
---|
80 | 27 - Processor Hierarchy Info
|
---|
81 | 28 - Cache Info
|
---|
82 | 29 - Processor Hierarchy Node ID Info
|
---|
83 | 30 - CM Object Reference
|
---|
84 | */
|
---|
85 | typedef UINT32 CM_OBJECT_ID;
|
---|
86 |
|
---|
87 | /** A mask for Object ID
|
---|
88 | */
|
---|
89 | #define OBJECT_ID_MASK 0xFF
|
---|
90 |
|
---|
91 | /** A mask for Namespace ID
|
---|
92 | */
|
---|
93 | #define NAMESPACE_ID_MASK 0xF
|
---|
94 |
|
---|
95 | /** Starting bit position for Namespace ID
|
---|
96 | */
|
---|
97 | #define NAMESPACE_ID_BIT_SHIFT 28
|
---|
98 |
|
---|
99 | /** The EOBJECT_NAMESPACE_ID enum describes the defined namespaces
|
---|
100 | for the Configuration Manager Objects.
|
---|
101 | */
|
---|
102 | typedef enum ObjectNameSpaceID {
|
---|
103 | EObjNameSpaceStandard, ///< Standard Objects Namespace
|
---|
104 | EObjNameSpaceArm, ///< ARM Objects Namespace
|
---|
105 | EObjNameSpaceOem = 0x8, ///< OEM Objects Namespace
|
---|
106 | EObjNameSpaceMax
|
---|
107 | } EOBJECT_NAMESPACE_ID;
|
---|
108 |
|
---|
109 | /** A descriptor for Configuration Manager Objects.
|
---|
110 |
|
---|
111 | The Configuration Manager Protocol interface uses this descriptor
|
---|
112 | to return the Configuration Manager Objects.
|
---|
113 | */
|
---|
114 | typedef struct CmObjDescriptor {
|
---|
115 | /// Object Id
|
---|
116 | CM_OBJECT_ID ObjectId;
|
---|
117 |
|
---|
118 | /// Size of the described Object or Object List
|
---|
119 | UINT32 Size;
|
---|
120 |
|
---|
121 | /// Pointer to the described Object or Object List
|
---|
122 | VOID * Data;
|
---|
123 |
|
---|
124 | /// Count of objects in the list
|
---|
125 | UINT32 Count;
|
---|
126 | } CM_OBJ_DESCRIPTOR;
|
---|
127 |
|
---|
128 | #pragma pack()
|
---|
129 |
|
---|
130 | /** This macro returns the namespace ID from the CmObjectID.
|
---|
131 |
|
---|
132 | @param [in] CmObjectId The Configuration Manager Object ID.
|
---|
133 |
|
---|
134 | @retval Returns the Namespace ID corresponding to the CmObjectID.
|
---|
135 | **/
|
---|
136 | #define GET_CM_NAMESPACE_ID(CmObjectId) \
|
---|
137 | (((CmObjectId) >> NAMESPACE_ID_BIT_SHIFT) & \
|
---|
138 | NAMESPACE_ID_MASK)
|
---|
139 |
|
---|
140 | /** This macro returns the Object ID from the CmObjectID.
|
---|
141 |
|
---|
142 | @param [in] CmObjectId The Configuration Manager Object ID.
|
---|
143 |
|
---|
144 | @retval Returns the Object ID corresponding to the CmObjectID.
|
---|
145 | **/
|
---|
146 | #define GET_CM_OBJECT_ID(CmObjectId) ((CmObjectId) & OBJECT_ID_MASK)
|
---|
147 |
|
---|
148 | /** This macro returns a Configuration Manager Object ID
|
---|
149 | from the NameSpace ID and the ObjectID.
|
---|
150 |
|
---|
151 | @param [in] NameSpaceId The namespace ID for the Object.
|
---|
152 | @param [in] ObjectId The Object ID.
|
---|
153 |
|
---|
154 | @retval Returns the Configuration Manager Object ID.
|
---|
155 | **/
|
---|
156 | #define CREATE_CM_OBJECT_ID(NameSpaceId, ObjectId) \
|
---|
157 | ((((NameSpaceId) & NAMESPACE_ID_MASK) << NAMESPACE_ID_BIT_SHIFT) | \
|
---|
158 | ((ObjectId) & OBJECT_ID_MASK))
|
---|
159 |
|
---|
160 | /** This macro returns a Configuration Manager Object ID
|
---|
161 | in the Standard Object Namespace.
|
---|
162 |
|
---|
163 | @param [in] ObjectId The Object ID.
|
---|
164 |
|
---|
165 | @retval Returns a Standard Configuration Manager Object ID.
|
---|
166 | **/
|
---|
167 | #define CREATE_CM_STD_OBJECT_ID(ObjectId) \
|
---|
168 | (CREATE_CM_OBJECT_ID (EObjNameSpaceStandard, ObjectId))
|
---|
169 |
|
---|
170 | /** This macro returns a Configuration Manager Object ID
|
---|
171 | in the ARM Object Namespace.
|
---|
172 |
|
---|
173 | @param [in] ObjectId The Object ID.
|
---|
174 |
|
---|
175 | @retval Returns an ARM Configuration Manager Object ID.
|
---|
176 | **/
|
---|
177 | #define CREATE_CM_ARM_OBJECT_ID(ObjectId) \
|
---|
178 | (CREATE_CM_OBJECT_ID (EObjNameSpaceArm, ObjectId))
|
---|
179 |
|
---|
180 | /** This macro returns a Configuration Manager Object ID
|
---|
181 | in the OEM Object Namespace.
|
---|
182 |
|
---|
183 | @param [in] ObjectId The Object ID.
|
---|
184 |
|
---|
185 | @retval Returns an OEM Configuration Manager Object ID.
|
---|
186 | **/
|
---|
187 | #define CREATE_CM_OEM_OBJECT_ID(ObjectId) \
|
---|
188 | (CREATE_CM_OBJECT_ID (EObjNameSpaceOem, ObjectId))
|
---|
189 |
|
---|
190 | #endif // CONFIGURATION_MANAGER_OBJECT_H_
|
---|