3 Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 - Cm or CM - Configuration Manager
16 - Std or STD - Standard
19 #ifndef ARM_NAMESPACE_OBJECTS_H_
20 #define ARM_NAMESPACE_OBJECTS_H_
22 #include <StandardNameSpaceObjects.h>
26 /** The EARM_OBJECT_ID enum describes the Object IDs
29 typedef enum ArmObjectID
{
30 EArmObjReserved
, ///< 0 - Reserved
31 EArmObjBootArchInfo
, ///< 1 - Boot Architecture Info
32 EArmObjCpuInfo
, ///< 2 - CPU Info
33 EArmObjPowerManagementProfileInfo
, ///< 3 - Power Management Profile Info
34 EArmObjGicCInfo
, ///< 4 - GIC CPU Interface Info
35 EArmObjGicDInfo
, ///< 5 - GIC Distributor Info
36 EArmObjGicMsiFrameInfo
, ///< 6 - GIC MSI Frame Info
37 EArmObjGicRedistributorInfo
, ///< 7 - GIC Redistributor Info
38 EArmObjGicItsInfo
, ///< 8 - GIC ITS Info
39 EArmObjSerialConsolePortInfo
, ///< 9 - Serial Console Port Info
40 EArmObjSerialDebugPortInfo
, ///< 10 - Serial Debug Port Info
41 EArmObjGenericTimerInfo
, ///< 11 - Generic Timer Info
42 EArmObjPlatformGTBlockInfo
, ///< 12 - Platform GT Block Info
43 EArmObjGTBlockTimerFrameInfo
, ///< 13 - Generic Timer Block Frame Info
44 EArmObjPlatformGenericWatchdogInfo
, ///< 14 - Platform Generic Watchdog
45 EArmObjPciConfigSpaceInfo
, ///< 15 - PCI Configuration Space Info
46 EArmObjHypervisorVendorIdentity
, ///< 16 - Hypervisor Vendor Id
47 EArmObjFixedFeatureFlags
, ///< 17 - Fixed feature flags for FADT
48 EArmObjItsGroup
, ///< 18 - ITS Group
49 EArmObjNamedComponent
, ///< 19 - Named Component
50 EArmObjRootComplex
, ///< 20 - Root Complex
51 EArmObjSmmuV1SmmuV2
, ///< 21 - SMMUv1 or SMMUv2
52 EArmObjSmmuV3
, ///< 22 - SMMUv3
53 EArmObjPmcg
, ///< 23 - PMCG
54 EArmObjGicItsIdentifierArray
, ///< 24 - GIC ITS Identifier Array
55 EArmObjIdMappingArray
, ///< 25 - ID Mapping Array
56 EArmObjSmmuInterruptArray
, ///< 26 - SMMU Interrupt Array
60 /** A structure that describes the
61 ARM Boot Architecture flags.
63 ID: EArmObjBootArchInfo
65 typedef struct CmArmBootArchInfo
{
66 /** This is the ARM_BOOT_ARCH flags field of the FADT Table
67 described in the ACPI Table Specification.
70 } CM_ARM_BOOT_ARCH_INFO
;
72 typedef struct CmArmCpuInfo
{
73 // Reserved for use when SMBIOS tables are implemented
76 /** A structure that describes the
77 Power Management Profile Information for the Platform.
79 ID: EArmObjPowerManagementProfileInfo
81 typedef struct CmArmPowerManagementProfileInfo
{
82 /** This is the Preferred_PM_Profile field of the FADT Table
83 described in the ACPI Specification
85 UINT8 PowerManagementProfile
;
86 } CM_ARM_POWER_MANAGEMENT_PROFILE_INFO
;
88 /** A structure that describes the
89 GIC CPU Interface for the Platform.
93 typedef struct CmArmGicCInfo
{
94 /// The GIC CPU Interface number.
95 UINT32 CPUInterfaceNumber
;
97 /** The ACPI Processor UID. This must match the
98 _UID of the CPU Device object information described
99 in the DSDT/SSDT for the CPU.
101 UINT32 AcpiProcessorUid
;
103 /** The flags field as described by the GICC structure
104 in the ACPI Specification.
108 /** The parking protocol version field as described by
109 the GICC structure in the ACPI Specification.
111 UINT32 ParkingProtocolVersion
;
113 /** The Performance Interrupt field as described by
114 the GICC structure in the ACPI Specification.
116 UINT32 PerformanceInterruptGsiv
;
118 /** The CPU Parked address field as described by
119 the GICC structure in the ACPI Specification.
121 UINT64 ParkedAddress
;
123 /** The base address for the GIC CPU Interface
124 as described by the GICC structure in the
127 UINT64 PhysicalBaseAddress
;
129 /** The base address for GICV interface
130 as described by the GICC structure in the
135 /** The base address for GICH interface
136 as described by the GICC structure in the
141 /** The GICV maintenance interrupt
142 as described by the GICC structure in the
145 UINT32 VGICMaintenanceInterrupt
;
147 /** The base address for GICR interface
148 as described by the GICC structure in the
151 UINT64 GICRBaseAddress
;
153 /** The MPIDR for the CPU
154 as described by the GICC structure in the
159 /** The Processor Power Efficiency class
160 as described by the GICC structure in the
163 UINT8 ProcessorPowerEfficiencyClass
;
166 /** A structure that describes the
167 GIC Distributor information for the Platform.
171 typedef struct CmArmGicDInfo
{
172 /// The Physical Base address for the GIC Distributor.
173 UINT64 PhysicalBaseAddress
;
175 /** The global system interrupt
176 number where this GIC Distributor's
177 interrupt inputs start.
179 UINT32 SystemVectorBase
;
181 /** The GIC version as described
182 by the GICD structure in the
188 /** A structure that describes the
189 GIC MSI Frame information for the Platform.
191 ID: EArmObjGicMsiFrameInfo
193 typedef struct CmArmGicMsiFrameInfo
{
194 /// The GIC MSI Frame ID
195 UINT32 GicMsiFrameId
;
197 /// The Physical base address for the MSI Frame
198 UINT64 PhysicalBaseAddress
;
200 /** The GIC MSI Frame flags
201 as described by the GIC MSI frame
202 structure in the ACPI Specification.
206 /// SPI Count used by this frame
209 /// SPI Base used by this frame
211 } CM_ARM_GIC_MSI_FRAME_INFO
;
213 /** A structure that describes the
214 GIC Redistributor information for the Platform.
216 ID: EArmObjGicRedistributorInfo
218 typedef struct CmArmGicRedistInfo
{
219 /** The physical address of a page range
220 containing all GIC Redistributors.
222 UINT64 DiscoveryRangeBaseAddress
;
224 /// Length of the GIC Redistributor Discovery page range
225 UINT32 DiscoveryRangeLength
;
226 } CM_ARM_GIC_REDIST_INFO
;
228 /** A structure that describes the
229 GIC Interrupt Translation Service information for the Platform.
231 ID: EArmObjGicItsInfo
233 typedef struct CmArmGicItsInfo
{
237 /// The physical address for the Interrupt Translation Service
238 UINT64 PhysicalBaseAddress
;
239 } CM_ARM_GIC_ITS_INFO
;
241 /** A structure that describes the
242 Serial Port information for the Platform.
244 ID: EArmObjSerialConsolePortInfo or
245 EArmObjSerialDebugPortInfo
247 typedef struct CmArmSerialPortInfo
{
248 /// The physical base address for the serial port
251 /// The serial port interrupt
254 /// The serial port baud rate
257 /// The serial port clock
260 /// Serial Port subtype
262 } CM_ARM_SERIAL_PORT_INFO
;
264 /** A structure that describes the
265 Generic Timer information for the Platform.
267 ID: EArmObjGenericTimerInfo
269 typedef struct CmArmGenericTimerInfo
{
270 /// The physical base address for the counter control frame
271 UINT64 CounterControlBaseAddress
;
273 /// The physical base address for the counter read frame
274 UINT64 CounterReadBaseAddress
;
276 /// The secure PL1 timer interrupt
277 UINT32 SecurePL1TimerGSIV
;
279 /// The secure PL1 timer flags
280 UINT32 SecurePL1TimerFlags
;
282 /// The non-secure PL1 timer interrupt
283 UINT32 NonSecurePL1TimerGSIV
;
285 /// The non-secure PL1 timer flags
286 UINT32 NonSecurePL1TimerFlags
;
288 /// The virtual timer interrupt
289 UINT32 VirtualTimerGSIV
;
291 /// The virtual timer flags
292 UINT32 VirtualTimerFlags
;
294 /// The non-secure PL2 timer interrupt
295 UINT32 NonSecurePL2TimerGSIV
;
297 /// The non-secure PL2 timer flags
298 UINT32 NonSecurePL2TimerFlags
;
299 } CM_ARM_GENERIC_TIMER_INFO
;
301 /** A structure that describes the
302 Platform Generic Block Timer Frame information for the Platform.
304 ID: EArmObjGTBlockTimerFrameInfo
306 typedef struct CmArmGTBlockTimerFrameInfo
{
307 /// The Generic Timer frame number
310 /// The physical base address for the CntBase block
311 UINT64 PhysicalAddressCntBase
;
313 /// The physical base address for the CntEL0Base block
314 UINT64 PhysicalAddressCntEL0Base
;
316 /// The physical timer interrupt
317 UINT32 PhysicalTimerGSIV
;
319 /** The physical timer flags as described by the GT Block
320 Timer frame Structure in the ACPI Specification.
322 UINT32 PhysicalTimerFlags
;
324 /// The virtual timer interrupt
325 UINT32 VirtualTimerGSIV
;
327 /** The virtual timer flags as described by the GT Block
328 Timer frame Structure in the ACPI Specification.
330 UINT32 VirtualTimerFlags
;
332 /** The common timer flags as described by the GT Block
333 Timer frame Structure in the ACPI Specification.
336 } CM_ARM_GTBLOCK_TIMER_FRAME_INFO
;
338 /** A structure that describes the
339 Platform Generic Block Timer information for the Platform.
341 ID: EArmObjPlatformGTBlockInfo
343 typedef struct CmArmGTBlockInfo
{
344 /// The physical base address for the GT Block Timer structure
345 UINT64 GTBlockPhysicalAddress
;
347 /// The number of timer frames implemented in the GT Block
348 UINT32 GTBlockTimerFrameCount
;
350 /// Reference token for the GT Block timer frame list
351 CM_OBJECT_TOKEN GTBlockTimerFrameToken
;
352 } CM_ARM_GTBLOCK_INFO
;
354 /** A structure that describes the
355 SBSA Generic Watchdog information for the Platform.
357 ID: EArmObjPlatformGenericWatchdogInfo
359 typedef struct CmArmGenericWatchdogInfo
{
360 /// The physical base address of the SBSA Watchdog control frame
361 UINT64 ControlFrameAddress
;
363 /// The physical base address of the SBSA Watchdog refresh frame
364 UINT64 RefreshFrameAddress
;
366 /// The watchdog interrupt
369 /** The flags for the watchdog as described by the SBSA watchdog
370 structure in the ACPI specification.
373 } CM_ARM_GENERIC_WATCHDOG_INFO
;
375 /** A structure that describes the
376 PCI Configuration Space information for the Platform.
378 ID: EArmObjPciConfigSpaceInfo
380 typedef struct CmArmPciConfigSpaceInfo
{
381 /// The physical base address for the PCI segment
384 /// The PCI segment group number
385 UINT16 PciSegmentGroupNumber
;
387 /// The start bus number
388 UINT8 StartBusNumber
;
390 /// The end bus number
392 } CM_ARM_PCI_CONFIG_SPACE_INFO
;
394 /** A structure that describes the
395 Hypervisor Vendor ID information for the Platform.
397 ID: EArmObjHypervisorVendorIdentity
399 typedef struct CmArmHypervisorVendorId
{
400 /// The hypervisor Vendor ID
401 UINT64 HypervisorVendorId
;
402 } CM_ARM_HYPERVISOR_VENDOR_ID
;
404 /** A structure that describes the
405 Fixed feature flags for the Platform.
407 ID: EArmObjFixedFeatureFlags
409 typedef struct CmArmFixedFeatureFlags
{
410 /// The Fixed feature flags
412 } CM_ARM_FIXED_FEATURE_FLAGS
;
414 /** A structure that describes the
415 ITS Group node for the Platform.
419 typedef struct CmArmItsGroupNode
{
420 /// An unique token used to identify this object
421 CM_OBJECT_TOKEN Token
;
422 /// The number of ITS identifiers in the ITS node
424 /// Reference token for the ITS identifier array
425 CM_OBJECT_TOKEN ItsIdToken
;
426 } CM_ARM_ITS_GROUP_NODE
;
428 /** A structure that describes the
429 GIC ITS Identifiers for an ITS Group node.
431 ID: EArmObjGicItsIdentifierArray
433 typedef struct CmArmGicItsIdentifier
{
434 /// The ITS Identifier
436 } CM_ARM_ITS_IDENTIFIER
;
438 /** A structure that describes the
439 Named component node for the Platform.
441 ID: EArmObjNamedComponent
443 typedef struct CmArmNamedComponentNode
{
444 /// An unique token used to identify this object
445 CM_OBJECT_TOKEN Token
;
446 /// Number of ID mappings
447 UINT32 IdMappingCount
;
448 /// Reference token for the ID mapping array
449 CM_OBJECT_TOKEN IdMappingToken
;
451 /// Flags for the named component
454 /// Memory access properties : Cache coherent attributes
455 UINT32 CacheCoherent
;
456 /// Memory access properties : Allocation hints
457 UINT8 AllocationHints
;
458 /// Memory access properties : Memory access flags
459 UINT8 MemoryAccessFlags
;
461 /// Memory access properties : Address size limit
462 UINT8 AddressSizeLimit
;
463 /** ASCII Null terminated string with the full path to
464 the entry in the namespace for this object.
467 } CM_ARM_NAMED_COMPONENT_NODE
;
469 /** A structure that describes the
470 Root complex node for the Platform.
472 ID: EArmObjRootComplex
474 typedef struct CmArmRootComplexNode
{
475 /// An unique token used to identify this object
476 CM_OBJECT_TOKEN Token
;
477 /// Number of ID mappings
478 UINT32 IdMappingCount
;
479 /// Reference token for the ID mapping array
480 CM_OBJECT_TOKEN IdMappingToken
;
482 /// Memory access properties : Cache coherent attributes
483 UINT32 CacheCoherent
;
484 /// Memory access properties : Allocation hints
485 UINT8 AllocationHints
;
486 /// Memory access properties : Memory access flags
487 UINT8 MemoryAccessFlags
;
491 /// PCI segment number
492 UINT32 PciSegmentNumber
;
493 /// Memory address size limit
494 UINT8 MemoryAddressSize
;
495 } CM_ARM_ROOT_COMPLEX_NODE
;
497 /** A structure that describes the
498 SMMUv1 or SMMUv2 node for the Platform.
500 ID: EArmObjSmmuV1SmmuV2
502 typedef struct CmArmSmmuV1SmmuV2Node
{
503 /// An unique token used to identify this object
504 CM_OBJECT_TOKEN Token
;
505 /// Number of ID mappings
506 UINT32 IdMappingCount
;
507 /// Reference token for the ID mapping array
508 CM_OBJECT_TOKEN IdMappingToken
;
510 /// SMMU Base Address
512 /// Length of the memory range covered by the SMMU
519 /// Number of context interrupts
520 UINT32 ContextInterruptCount
;
521 /// Reference token for the context interrupt array
522 CM_OBJECT_TOKEN ContextInterruptToken
;
524 /// Number of PMU interrupts
525 UINT32 PmuInterruptCount
;
526 /// Reference token for the PMU interrupt array
527 CM_OBJECT_TOKEN PmuInterruptToken
;
529 /// GSIV of the SMMU_NSgIrpt interrupt
531 /// SMMU_NSgIrpt interrupt flags
532 UINT32 SMMU_NSgIrptFlags
;
533 /// GSIV of the SMMU_NSgCfgIrpt interrupt
534 UINT32 SMMU_NSgCfgIrpt
;
535 /// SMMU_NSgCfgIrpt interrupt flags
536 UINT32 SMMU_NSgCfgIrptFlags
;
537 } CM_ARM_SMMUV1_SMMUV2_NODE
;
539 /** A structure that describes the
540 SMMUv3 node for the Platform.
544 typedef struct CmArmSmmuV3Node
{
545 /// An unique token used to identify this object
546 CM_OBJECT_TOKEN Token
;
547 /// Number of ID mappings
548 UINT32 IdMappingCount
;
549 /// Reference token for the ID mapping array
550 CM_OBJECT_TOKEN IdMappingToken
;
552 /// SMMU Base Address
560 /// GSIV of the Event interrupt if SPI based
561 UINT32 EventInterrupt
;
562 /// PRI Interrupt if SPI based
564 /// GERR interrupt if GSIV based
565 UINT32 GerrInterrupt
;
566 /// Sync interrupt if GSIV based
567 UINT32 SyncInterrupt
;
569 /// Proximity domain flag
570 UINT32 ProximityDomain
;
571 /// Index into the array of ID mapping
572 UINT32 DeviceIdMappingIndex
;
573 } CM_ARM_SMMUV3_NODE
;
575 /** A structure that describes the
576 PMCG node for the Platform.
580 typedef struct CmArmPmcgNode
{
581 /// An unique token used to identify this object
582 CM_OBJECT_TOKEN Token
;
583 /// Number of ID mappings
584 UINT32 IdMappingCount
;
585 /// Reference token for the ID mapping array
586 CM_OBJECT_TOKEN IdMappingToken
;
588 /// Base Address for performance monitor counter group
590 /// GSIV for the Overflow interrupt
591 UINT32 OverflowInterrupt
;
592 /// Page 1 Base address
593 UINT64 Page1BaseAddress
;
595 /// Reference token for the IORT node associated with this node
596 CM_OBJECT_TOKEN ReferenceToken
;
599 /** A structure that describes the
600 ID Mappings for the Platform.
602 ID: EArmObjIdMappingArray
604 typedef struct CmArmIdMapping
{
607 /// Number of input IDs
611 /// Reference token for the output node
612 CM_OBJECT_TOKEN OutputReferenceToken
;
617 /** A structure that describes the
618 SMMU interrupts for the Platform.
620 ID: EArmObjSmmuInterruptArray
622 typedef struct CmArmSmmuInterrupt
{
628 } CM_ARM_SMMU_INTERRUPT
;
632 #endif // ARM_NAMESPACE_OBJECTS_H_