1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
|
/** @file
Copyright (c) 2017 - 2025, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Cm or CM - Configuration Manager
- Obj or OBJ - Object
**/
#ifndef CONFIGURATION_MANAGER_H__
#define CONFIGURATION_MANAGER_H__
/** C array containing the compiled AML template.
This symbol is defined in the auto generated C file
containing the AML bytecode array.
*/
extern CHAR8 dsdt_aml_code[];
/** The configuration manager version.
*/
#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (1, 0)
/** The OEM ID
*/
#define CFG_MGR_OEM_ID { 'A', 'R', 'M', 'L', 'T', 'D' }
/** A helper macro for populating the GIC CPU information
*/
#define GICC_ENTRY( \
CPUInterfaceNumber, \
Mpidr, \
PmuIrq, \
VGicIrq, \
EnergyEfficiency \
) { \
CPUInterfaceNumber, /* UINT32 CPUInterfaceNumber */ \
CPUInterfaceNumber, /* UINT32 AcpiProcessorUid */ \
EFI_ACPI_6_2_GIC_ENABLED, /* UINT32 Flags */ \
0, /* UINT32 ParkingProtocolVersion */ \
PmuIrq, /* UINT32 PerformanceInterruptGsiv */ \
0, /* UINT64 ParkedAddress */ \
FixedPcdGet64 ( \
PcdGicInterruptInterfaceBase \
), /* UINT64 PhysicalBaseAddress */ \
0, /* UINT64 GICV */ \
0, /* UINT64 GICH */ \
VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \
0, /* UINT64 GICRBaseAddress */ \
Mpidr, /* UINT64 MPIDR */ \
EnergyEfficiency /* UINT8 ProcessorPowerEfficiencyClass*/ \
}
/** A helper macro for populating the Processor Hierarchy Node flags
*/
#define PROC_NODE_FLAGS( \
PhysicalPackage, \
AcpiProcessorIdValid, \
ProcessorIsThread, \
NodeIsLeaf, \
IdenticalImplementation \
) \
( \
PhysicalPackage | \
(AcpiProcessorIdValid << 1) | \
(ProcessorIsThread << 2) | \
(NodeIsLeaf << 3) | \
(IdenticalImplementation << 4) \
)
/** A helper macro for populating the Cache Type Structure's attributes
*/
#define CACHE_ATTRIBUTES( \
AllocationType, \
CacheType, \
WritePolicy \
) \
( \
AllocationType | \
(CacheType << 2) | \
(WritePolicy << 4) \
)
/** A function that prepares Configuration Manager Objects for returning.
@param [in] This Pointer to the Configuration Manager Protocol.
@param [in] CmObjectId The Configuration Manager Object ID.
@param [in] Token A token for identifying the object.
@param [out] CmObject Pointer to the Configuration Manager Object
descriptor describing the requested Object.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER A parameter is invalid.
@retval EFI_NOT_FOUND The required object information is not found.
**/
typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) (
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This,
IN CONST CM_OBJECT_ID CmObjectId,
IN CONST CM_OBJECT_TOKEN Token,
IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject
);
/** A helper macro for mapping a reference token.
*/
#define REFERENCE_TOKEN(Field) \
(CM_OBJECT_TOKEN)((UINT8*)&VExpressPlatRepositoryInfo + \
OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, Field))
/** Macro to return MPIDR for Multi Threaded Cores
*/
#define GET_MPID_MT(Cluster, Core, Thread) \
(((Cluster) << 16) | ((Core) << 8) | (Thread))
/** The number of CPUs
*/
#define PLAT_CPU_COUNT 8
/** The number of ACPI tables to install
*/
#define PLAT_ACPI_TABLE_COUNT 11
/** The number of platform generic timer blocks
*/
#define PLAT_GTBLOCK_COUNT 1
/** The number of timer frames per generic timer block
*/
#define PLAT_GTFRAME_COUNT 2
/** Count of PCI address-range mapping struct.
*/
#define PCI_ADDRESS_MAP_COUNT 3
/** Count of PCI device legacy interrupt mapping struct.
*/
#define PCI_INTERRUPT_MAP_COUNT 4
/** PCI space codes.
*/
#define PCI_SS_CONFIG 0
#define PCI_SS_IO 1
#define PCI_SS_M32 2
#define PCI_SS_M64 3
/** The number of Processor Hierarchy Nodes
- one package node
- two cluster nodes
- eight cores
*/
#define PLAT_PROC_HIERARCHY_NODE_COUNT 11
/** The number of unique cache structures:
- L1 instruction cache
- L1 data cache
- L2 cache
- L3 cache
*/
#define PLAT_CACHE_COUNT 7
/** The number of resources private to the package
- L3 cache
*/
#define PACKAGE_RESOURCE_COUNT 1
/** The number of resources private to Cluster 0
- L2 cache
*/
#define CLUSTER0_RESOURCE_COUNT 1
/** The number of resources private to each Cluster 0 core instance
- L1 data cache
- L1 instruction cache
*/
#define CLUSTER0_CORE_RESOURCE_COUNT 2
/** The number of resources private to Cluster 1
- L2 cache
*/
#define CLUSTER1_RESOURCE_COUNT 1
/** The number of resources private to each Cluster 1 core instance
- L1 data cache
- L1 instruction cache
*/
#define CLUSTER1_CORE_RESOURCE_COUNT 2
/** The number of Lpi states for the platform:
- two for the cores
- one for the clusters
*/
#define CORES_LPI_STATE_COUNT 2
#define CLUSTERS_LPI_STATE_COUNT 1
#define LPI_STATE_COUNT (CORES_LPI_STATE_COUNT + \
CLUSTERS_LPI_STATE_COUNT)
/** A structure describing the platform configuration
manager repository information
*/
typedef struct PlatformRepositoryInfo {
/// Configuration Manager Information
CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo;
/// List of ACPI tables
CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT];
/// Boot architecture information
CM_ARM_BOOT_ARCH_INFO BootArchInfo;
#ifdef HEADLESS_PLATFORM
/// Fixed feature flag information
CM_ARCH_COMMON_FIXED_FEATURE_FLAGS FixedFeatureFlags;
#endif
/// Power management profile information
CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo;
/// GIC CPU interface information
CM_ARM_GICC_INFO GicCInfo[PLAT_CPU_COUNT];
/// GIC distributor information
CM_ARM_GICD_INFO GicDInfo;
/// GIC Redistributor information
CM_ARM_GIC_REDIST_INFO GicRedistInfo;
/// Generic timer information
CM_ARM_GENERIC_TIMER_INFO GenericTimerInfo;
/// Generic timer block information
CM_ARM_GTBLOCK_INFO GTBlockInfo[PLAT_GTBLOCK_COUNT];
/// Generic timer frame information
CM_ARM_GTBLOCK_TIMER_FRAME_INFO GTBlock0TimerInfo[PLAT_GTFRAME_COUNT];
/// Watchdog information
CM_ARM_GENERIC_WATCHDOG_INFO Watchdog;
/** Serial port information for the
serial port console redirection port
*/
CM_ARCH_COMMON_SERIAL_PORT_INFO SpcrSerialPort;
/// Serial port information for the DBG2 UART port
CM_ARCH_COMMON_SERIAL_PORT_INFO DbgSerialPort;
/// GIC ITS information
CM_ARM_GIC_ITS_INFO GicItsInfo;
// FVP RevC components
/// SMMUv3 node
CM_ARM_SMMUV3_NODE SmmuV3Info;
/// ITS Group node
CM_ARM_ITS_GROUP_NODE ItsGroupInfo;
/// ITS Identifier array
CM_ARM_ITS_IDENTIFIER ItsIdentifierArray[1];
/// PCI Root complex node
CM_ARM_ROOT_COMPLEX_NODE RootComplexInfo;
/// Array of DeviceID mapping
CM_ARM_ID_MAPPING DeviceIdMapping[2];
/// PCI configuration space information
CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO PciConfigInfo;
// PCI address-range mapping references
CM_ARCH_COMMON_OBJ_REF PciAddressMapRef[PCI_ADDRESS_MAP_COUNT];
// PCI address-range mapping information
CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO PciAddressMapInfo[PCI_ADDRESS_MAP_COUNT];
// PCI device legacy interrupts mapping references
CM_ARCH_COMMON_OBJ_REF PciInterruptMapRef[PCI_INTERRUPT_MAP_COUNT];
// PCI device legacy interrupts mapping information
CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO PciInterruptMapInfo[PCI_INTERRUPT_MAP_COUNT];
CM_ARM_ET_INFO EtInfo;
// Processor topology information
CM_ARCH_COMMON_PROC_HIERARCHY_INFO ProcHierarchyInfo[PLAT_PROC_HIERARCHY_NODE_COUNT];
// Cache information
CM_ARCH_COMMON_CACHE_INFO CacheInfo[PLAT_CACHE_COUNT];
// package private resources
CM_ARCH_COMMON_OBJ_REF PackageResources[PACKAGE_RESOURCE_COUNT];
// cluster 0 private resources
CM_ARCH_COMMON_OBJ_REF Cluster0Resources[CLUSTER0_RESOURCE_COUNT];
// cluster 0 core private resources
CM_ARCH_COMMON_OBJ_REF Cluster0CoreResources[CLUSTER0_CORE_RESOURCE_COUNT];
// cluster 1 private resources
CM_ARCH_COMMON_OBJ_REF Cluster1Resources[CLUSTER1_RESOURCE_COUNT];
// cluster 1 core private resources
CM_ARCH_COMMON_OBJ_REF Cluster1CoreResources[CLUSTER1_CORE_RESOURCE_COUNT];
// Low Power Idle state information (LPI) for all cores/clusters
CM_ARCH_COMMON_LPI_INFO LpiInfo[LPI_STATE_COUNT];
// Clusters Low Power Idle state references (LPI)
CM_ARCH_COMMON_OBJ_REF ClustersLpiRef[CLUSTERS_LPI_STATE_COUNT];
// Cores Low Power Idle state references (LPI)
CM_ARCH_COMMON_OBJ_REF CoresLpiRef[CORES_LPI_STATE_COUNT];
/// System ID
UINT32 SysId;
} EDKII_PLATFORM_REPOSITORY_INFO;
#endif // CONFIGURATION_MANAGER_H__
|