VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h@ 94368

Last change on this file since 94368 was 89983, checked in by vboxsync, 4 years ago

Devices/EFI: Merge edk-stable202105 and openssl 1.1.1j and make it build, bugref:4643

  • Property svn:eol-style set to native
File size: 25.9 KB
Line 
1/** @file
2
3 Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR>
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 - Std or STD - Standard
11**/
12
13#ifndef ARM_NAMESPACE_OBJECTS_H_
14#define ARM_NAMESPACE_OBJECTS_H_
15
16#include <StandardNameSpaceObjects.h>
17
18#pragma pack(1)
19
20/** The EARM_OBJECT_ID enum describes the Object IDs
21 in the ARM Namespace
22*/
23typedef enum ArmObjectID {
24 EArmObjReserved, ///< 0 - Reserved
25 EArmObjBootArchInfo, ///< 1 - Boot Architecture Info
26 EArmObjCpuInfo, ///< 2 - CPU Info
27 EArmObjPowerManagementProfileInfo, ///< 3 - Power Management Profile Info
28 EArmObjGicCInfo, ///< 4 - GIC CPU Interface Info
29 EArmObjGicDInfo, ///< 5 - GIC Distributor Info
30 EArmObjGicMsiFrameInfo, ///< 6 - GIC MSI Frame Info
31 EArmObjGicRedistributorInfo, ///< 7 - GIC Redistributor Info
32 EArmObjGicItsInfo, ///< 8 - GIC ITS Info
33 EArmObjSerialConsolePortInfo, ///< 9 - Serial Console Port Info
34 EArmObjSerialDebugPortInfo, ///< 10 - Serial Debug Port Info
35 EArmObjGenericTimerInfo, ///< 11 - Generic Timer Info
36 EArmObjPlatformGTBlockInfo, ///< 12 - Platform GT Block Info
37 EArmObjGTBlockTimerFrameInfo, ///< 13 - Generic Timer Block Frame Info
38 EArmObjPlatformGenericWatchdogInfo, ///< 14 - Platform Generic Watchdog
39 EArmObjPciConfigSpaceInfo, ///< 15 - PCI Configuration Space Info
40 EArmObjHypervisorVendorIdentity, ///< 16 - Hypervisor Vendor Id
41 EArmObjFixedFeatureFlags, ///< 17 - Fixed feature flags for FADT
42 EArmObjItsGroup, ///< 18 - ITS Group
43 EArmObjNamedComponent, ///< 19 - Named Component
44 EArmObjRootComplex, ///< 20 - Root Complex
45 EArmObjSmmuV1SmmuV2, ///< 21 - SMMUv1 or SMMUv2
46 EArmObjSmmuV3, ///< 22 - SMMUv3
47 EArmObjPmcg, ///< 23 - PMCG
48 EArmObjGicItsIdentifierArray, ///< 24 - GIC ITS Identifier Array
49 EArmObjIdMappingArray, ///< 25 - ID Mapping Array
50 EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array
51 EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info
52 EArmObjCacheInfo, ///< 28 - Cache Info
53 EArmObjProcNodeIdInfo, ///< 29 - Processor Node ID Info
54 EArmObjCmRef, ///< 30 - CM Object Reference
55 EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info
56 EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi
57 EArmObjDeviceHandlePci, ///< 33 - Device Handle Pci
58 EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affinity
59 EArmObjSerialPortInfo, ///< 35 - Generic Serial Port Info
60 EArmObjCmn600Info, ///< 36 - CMN-600 Info
61 EArmObjMax
62} EARM_OBJECT_ID;
63
64/** A structure that describes the
65 ARM Boot Architecture flags.
66
67 ID: EArmObjBootArchInfo
68*/
69typedef struct CmArmBootArchInfo {
70 /** This is the ARM_BOOT_ARCH flags field of the FADT Table
71 described in the ACPI Table Specification.
72 */
73 UINT16 BootArchFlags;
74} CM_ARM_BOOT_ARCH_INFO;
75
76/** A structure that describes the
77 Power Management Profile Information for the Platform.
78
79 ID: EArmObjPowerManagementProfileInfo
80*/
81typedef struct CmArmPowerManagementProfileInfo {
82 /** This is the Preferred_PM_Profile field of the FADT Table
83 described in the ACPI Specification
84 */
85 UINT8 PowerManagementProfile;
86} CM_ARM_POWER_MANAGEMENT_PROFILE_INFO;
87
88/** A structure that describes the
89 GIC CPU Interface for the Platform.
90
91 ID: EArmObjGicCInfo
92*/
93typedef struct CmArmGicCInfo {
94 /// The GIC CPU Interface number.
95 UINT32 CPUInterfaceNumber;
96
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.
100 */
101 UINT32 AcpiProcessorUid;
102
103 /** The flags field as described by the GICC structure
104 in the ACPI Specification.
105 */
106 UINT32 Flags;
107
108 /** The parking protocol version field as described by
109 the GICC structure in the ACPI Specification.
110 */
111 UINT32 ParkingProtocolVersion;
112
113 /** The Performance Interrupt field as described by
114 the GICC structure in the ACPI Specification.
115 */
116 UINT32 PerformanceInterruptGsiv;
117
118 /** The CPU Parked address field as described by
119 the GICC structure in the ACPI Specification.
120 */
121 UINT64 ParkedAddress;
122
123 /** The base address for the GIC CPU Interface
124 as described by the GICC structure in the
125 ACPI Specification.
126 */
127 UINT64 PhysicalBaseAddress;
128
129 /** The base address for GICV interface
130 as described by the GICC structure in the
131 ACPI Specification.
132 */
133 UINT64 GICV;
134
135 /** The base address for GICH interface
136 as described by the GICC structure in the
137 ACPI Specification.
138 */
139 UINT64 GICH;
140
141 /** The GICV maintenance interrupt
142 as described by the GICC structure in the
143 ACPI Specification.
144 */
145 UINT32 VGICMaintenanceInterrupt;
146
147 /** The base address for GICR interface
148 as described by the GICC structure in the
149 ACPI Specification.
150 */
151 UINT64 GICRBaseAddress;
152
153 /** The MPIDR for the CPU
154 as described by the GICC structure in the
155 ACPI Specification.
156 */
157 UINT64 MPIDR;
158
159 /** The Processor Power Efficiency class
160 as described by the GICC structure in the
161 ACPI Specification.
162 */
163 UINT8 ProcessorPowerEfficiencyClass;
164
165 /** Statistical Profiling Extension buffer overflow GSIV. Zero if
166 unsupported by this processor. This field was introduced in
167 ACPI 6.3 (MADT revision 5) and is therefore ignored when
168 generating MADT revision 4 or lower.
169 */
170 UINT16 SpeOverflowInterrupt;
171
172 /** The proximity domain to which the logical processor belongs.
173 This field is used to populate the GICC affinity structure
174 in the SRAT table.
175 */
176 UINT32 ProximityDomain;
177
178 /** The clock domain to which the logical processor belongs.
179 This field is used to populate the GICC affinity structure
180 in the SRAT table.
181 */
182 UINT32 ClockDomain;
183
184 /** The GICC Affinity flags field as described by the GICC Affinity structure
185 in the SRAT table.
186 */
187 UINT32 AffinityFlags;
188} CM_ARM_GICC_INFO;
189
190/** A structure that describes the
191 GIC Distributor information for the Platform.
192
193 ID: EArmObjGicDInfo
194*/
195typedef struct CmArmGicDInfo {
196 /// The Physical Base address for the GIC Distributor.
197 UINT64 PhysicalBaseAddress;
198
199 /** The global system interrupt
200 number where this GIC Distributor's
201 interrupt inputs start.
202 */
203 UINT32 SystemVectorBase;
204
205 /** The GIC version as described
206 by the GICD structure in the
207 ACPI Specification.
208 */
209 UINT8 GicVersion;
210} CM_ARM_GICD_INFO;
211
212/** A structure that describes the
213 GIC MSI Frame information for the Platform.
214
215 ID: EArmObjGicMsiFrameInfo
216*/
217typedef struct CmArmGicMsiFrameInfo {
218 /// The GIC MSI Frame ID
219 UINT32 GicMsiFrameId;
220
221 /// The Physical base address for the MSI Frame
222 UINT64 PhysicalBaseAddress;
223
224 /** The GIC MSI Frame flags
225 as described by the GIC MSI frame
226 structure in the ACPI Specification.
227 */
228 UINT32 Flags;
229
230 /// SPI Count used by this frame
231 UINT16 SPICount;
232
233 /// SPI Base used by this frame
234 UINT16 SPIBase;
235} CM_ARM_GIC_MSI_FRAME_INFO;
236
237/** A structure that describes the
238 GIC Redistributor information for the Platform.
239
240 ID: EArmObjGicRedistributorInfo
241*/
242typedef struct CmArmGicRedistInfo {
243 /** The physical address of a page range
244 containing all GIC Redistributors.
245 */
246 UINT64 DiscoveryRangeBaseAddress;
247
248 /// Length of the GIC Redistributor Discovery page range
249 UINT32 DiscoveryRangeLength;
250} CM_ARM_GIC_REDIST_INFO;
251
252/** A structure that describes the
253 GIC Interrupt Translation Service information for the Platform.
254
255 ID: EArmObjGicItsInfo
256*/
257typedef struct CmArmGicItsInfo {
258 /// The GIC ITS ID
259 UINT32 GicItsId;
260
261 /// The physical address for the Interrupt Translation Service
262 UINT64 PhysicalBaseAddress;
263
264 /** The proximity domain to which the logical processor belongs.
265 This field is used to populate the GIC ITS affinity structure
266 in the SRAT table.
267 */
268 UINT32 ProximityDomain;
269} CM_ARM_GIC_ITS_INFO;
270
271/** A structure that describes the
272 Serial Port information for the Platform.
273
274 ID: EArmObjSerialConsolePortInfo or
275 EArmObjSerialDebugPortInfo or
276 EArmObjSerialPortInfo
277*/
278typedef struct CmArmSerialPortInfo {
279 /// The physical base address for the serial port
280 UINT64 BaseAddress;
281
282 /// The serial port interrupt
283 UINT32 Interrupt;
284
285 /// The serial port baud rate
286 UINT64 BaudRate;
287
288 /// The serial port clock
289 UINT32 Clock;
290
291 /// Serial Port subtype
292 UINT16 PortSubtype;
293
294 /// The Base address length
295 UINT64 BaseAddressLength;
296
297 /// The access size
298 UINT8 AccessSize;
299} CM_ARM_SERIAL_PORT_INFO;
300
301/** A structure that describes the
302 Generic Timer information for the Platform.
303
304 ID: EArmObjGenericTimerInfo
305*/
306typedef struct CmArmGenericTimerInfo {
307 /// The physical base address for the counter control frame
308 UINT64 CounterControlBaseAddress;
309
310 /// The physical base address for the counter read frame
311 UINT64 CounterReadBaseAddress;
312
313 /// The secure PL1 timer interrupt
314 UINT32 SecurePL1TimerGSIV;
315
316 /// The secure PL1 timer flags
317 UINT32 SecurePL1TimerFlags;
318
319 /// The non-secure PL1 timer interrupt
320 UINT32 NonSecurePL1TimerGSIV;
321
322 /// The non-secure PL1 timer flags
323 UINT32 NonSecurePL1TimerFlags;
324
325 /// The virtual timer interrupt
326 UINT32 VirtualTimerGSIV;
327
328 /// The virtual timer flags
329 UINT32 VirtualTimerFlags;
330
331 /// The non-secure PL2 timer interrupt
332 UINT32 NonSecurePL2TimerGSIV;
333
334 /// The non-secure PL2 timer flags
335 UINT32 NonSecurePL2TimerFlags;
336
337 /// GSIV for the virtual EL2 timer
338 UINT32 VirtualPL2TimerGSIV;
339
340 /// Flags for the virtual EL2 timer
341 UINT32 VirtualPL2TimerFlags;
342} CM_ARM_GENERIC_TIMER_INFO;
343
344/** A structure that describes the
345 Platform Generic Block Timer Frame information for the Platform.
346
347 ID: EArmObjGTBlockTimerFrameInfo
348*/
349typedef struct CmArmGTBlockTimerFrameInfo {
350 /// The Generic Timer frame number
351 UINT8 FrameNumber;
352
353 /// The physical base address for the CntBase block
354 UINT64 PhysicalAddressCntBase;
355
356 /// The physical base address for the CntEL0Base block
357 UINT64 PhysicalAddressCntEL0Base;
358
359 /// The physical timer interrupt
360 UINT32 PhysicalTimerGSIV;
361
362 /** The physical timer flags as described by the GT Block
363 Timer frame Structure in the ACPI Specification.
364 */
365 UINT32 PhysicalTimerFlags;
366
367 /// The virtual timer interrupt
368 UINT32 VirtualTimerGSIV;
369
370 /** The virtual timer flags as described by the GT Block
371 Timer frame Structure in the ACPI Specification.
372 */
373 UINT32 VirtualTimerFlags;
374
375 /** The common timer flags as described by the GT Block
376 Timer frame Structure in the ACPI Specification.
377 */
378 UINT32 CommonFlags;
379} CM_ARM_GTBLOCK_TIMER_FRAME_INFO;
380
381/** A structure that describes the
382 Platform Generic Block Timer information for the Platform.
383
384 ID: EArmObjPlatformGTBlockInfo
385*/
386typedef struct CmArmGTBlockInfo {
387 /// The physical base address for the GT Block Timer structure
388 UINT64 GTBlockPhysicalAddress;
389
390 /// The number of timer frames implemented in the GT Block
391 UINT32 GTBlockTimerFrameCount;
392
393 /// Reference token for the GT Block timer frame list
394 CM_OBJECT_TOKEN GTBlockTimerFrameToken;
395} CM_ARM_GTBLOCK_INFO;
396
397/** A structure that describes the
398 SBSA Generic Watchdog information for the Platform.
399
400 ID: EArmObjPlatformGenericWatchdogInfo
401*/
402typedef struct CmArmGenericWatchdogInfo {
403 /// The physical base address of the SBSA Watchdog control frame
404 UINT64 ControlFrameAddress;
405
406 /// The physical base address of the SBSA Watchdog refresh frame
407 UINT64 RefreshFrameAddress;
408
409 /// The watchdog interrupt
410 UINT32 TimerGSIV;
411
412 /** The flags for the watchdog as described by the SBSA watchdog
413 structure in the ACPI specification.
414 */
415 UINT32 Flags;
416} CM_ARM_GENERIC_WATCHDOG_INFO;
417
418/** A structure that describes the
419 PCI Configuration Space information for the Platform.
420
421 ID: EArmObjPciConfigSpaceInfo
422*/
423typedef struct CmArmPciConfigSpaceInfo {
424 /// The physical base address for the PCI segment
425 UINT64 BaseAddress;
426
427 /// The PCI segment group number
428 UINT16 PciSegmentGroupNumber;
429
430 /// The start bus number
431 UINT8 StartBusNumber;
432
433 /// The end bus number
434 UINT8 EndBusNumber;
435} CM_ARM_PCI_CONFIG_SPACE_INFO;
436
437/** A structure that describes the
438 Hypervisor Vendor ID information for the Platform.
439
440 ID: EArmObjHypervisorVendorIdentity
441*/
442typedef struct CmArmHypervisorVendorId {
443 /// The hypervisor Vendor ID
444 UINT64 HypervisorVendorId;
445} CM_ARM_HYPERVISOR_VENDOR_ID;
446
447/** A structure that describes the
448 Fixed feature flags for the Platform.
449
450 ID: EArmObjFixedFeatureFlags
451*/
452typedef struct CmArmFixedFeatureFlags {
453 /// The Fixed feature flags
454 UINT32 Flags;
455} CM_ARM_FIXED_FEATURE_FLAGS;
456
457/** A structure that describes the
458 ITS Group node for the Platform.
459
460 ID: EArmObjItsGroup
461*/
462typedef struct CmArmItsGroupNode {
463 /// An unique token used to identify this object
464 CM_OBJECT_TOKEN Token;
465 /// The number of ITS identifiers in the ITS node
466 UINT32 ItsIdCount;
467 /// Reference token for the ITS identifier array
468 CM_OBJECT_TOKEN ItsIdToken;
469} CM_ARM_ITS_GROUP_NODE;
470
471/** A structure that describes the
472 Named component node for the Platform.
473
474 ID: EArmObjNamedComponent
475*/
476typedef struct CmArmNamedComponentNode {
477 /// An unique token used to identify this object
478 CM_OBJECT_TOKEN Token;
479 /// Number of ID mappings
480 UINT32 IdMappingCount;
481 /// Reference token for the ID mapping array
482 CM_OBJECT_TOKEN IdMappingToken;
483
484 /// Flags for the named component
485 UINT32 Flags;
486
487 /// Memory access properties : Cache coherent attributes
488 UINT32 CacheCoherent;
489 /// Memory access properties : Allocation hints
490 UINT8 AllocationHints;
491 /// Memory access properties : Memory access flags
492 UINT8 MemoryAccessFlags;
493
494 /// Memory access properties : Address size limit
495 UINT8 AddressSizeLimit;
496 /** ASCII Null terminated string with the full path to
497 the entry in the namespace for this object.
498 */
499 CHAR8* ObjectName;
500} CM_ARM_NAMED_COMPONENT_NODE;
501
502/** A structure that describes the
503 Root complex node for the Platform.
504
505 ID: EArmObjRootComplex
506*/
507typedef struct CmArmRootComplexNode {
508 /// An unique token used to identify this object
509 CM_OBJECT_TOKEN Token;
510 /// Number of ID mappings
511 UINT32 IdMappingCount;
512 /// Reference token for the ID mapping array
513 CM_OBJECT_TOKEN IdMappingToken;
514
515 /// Memory access properties : Cache coherent attributes
516 UINT32 CacheCoherent;
517 /// Memory access properties : Allocation hints
518 UINT8 AllocationHints;
519 /// Memory access properties : Memory access flags
520 UINT8 MemoryAccessFlags;
521
522 /// ATS attributes
523 UINT32 AtsAttribute;
524 /// PCI segment number
525 UINT32 PciSegmentNumber;
526 /// Memory address size limit
527 UINT8 MemoryAddressSize;
528} CM_ARM_ROOT_COMPLEX_NODE;
529
530/** A structure that describes the
531 SMMUv1 or SMMUv2 node for the Platform.
532
533 ID: EArmObjSmmuV1SmmuV2
534*/
535typedef struct CmArmSmmuV1SmmuV2Node {
536 /// An unique token used to identify this object
537 CM_OBJECT_TOKEN Token;
538 /// Number of ID mappings
539 UINT32 IdMappingCount;
540 /// Reference token for the ID mapping array
541 CM_OBJECT_TOKEN IdMappingToken;
542
543 /// SMMU Base Address
544 UINT64 BaseAddress;
545 /// Length of the memory range covered by the SMMU
546 UINT64 Span;
547 /// SMMU Model
548 UINT32 Model;
549 /// SMMU flags
550 UINT32 Flags;
551
552 /// Number of context interrupts
553 UINT32 ContextInterruptCount;
554 /// Reference token for the context interrupt array
555 CM_OBJECT_TOKEN ContextInterruptToken;
556
557 /// Number of PMU interrupts
558 UINT32 PmuInterruptCount;
559 /// Reference token for the PMU interrupt array
560 CM_OBJECT_TOKEN PmuInterruptToken;
561
562 /// GSIV of the SMMU_NSgIrpt interrupt
563 UINT32 SMMU_NSgIrpt;
564 /// SMMU_NSgIrpt interrupt flags
565 UINT32 SMMU_NSgIrptFlags;
566 /// GSIV of the SMMU_NSgCfgIrpt interrupt
567 UINT32 SMMU_NSgCfgIrpt;
568 /// SMMU_NSgCfgIrpt interrupt flags
569 UINT32 SMMU_NSgCfgIrptFlags;
570} CM_ARM_SMMUV1_SMMUV2_NODE;
571
572/** A structure that describes the
573 SMMUv3 node for the Platform.
574
575 ID: EArmObjSmmuV3
576*/
577typedef struct CmArmSmmuV3Node {
578 /// An unique token used to identify this object
579 CM_OBJECT_TOKEN Token;
580 /// Number of ID mappings
581 UINT32 IdMappingCount;
582 /// Reference token for the ID mapping array
583 CM_OBJECT_TOKEN IdMappingToken;
584
585 /// SMMU Base Address
586 UINT64 BaseAddress;
587 /// SMMU flags
588 UINT32 Flags;
589 /// VATOS address
590 UINT64 VatosAddress;
591 /// Model
592 UINT32 Model;
593 /// GSIV of the Event interrupt if SPI based
594 UINT32 EventInterrupt;
595 /// PRI Interrupt if SPI based
596 UINT32 PriInterrupt;
597 /// GERR interrupt if GSIV based
598 UINT32 GerrInterrupt;
599 /// Sync interrupt if GSIV based
600 UINT32 SyncInterrupt;
601
602 /// Proximity domain flag
603 UINT32 ProximityDomain;
604 /// Index into the array of ID mapping
605 UINT32 DeviceIdMappingIndex;
606} CM_ARM_SMMUV3_NODE;
607
608/** A structure that describes the
609 PMCG node for the Platform.
610
611 ID: EArmObjPmcg
612*/
613typedef struct CmArmPmcgNode {
614 /// An unique token used to identify this object
615 CM_OBJECT_TOKEN Token;
616 /// Number of ID mappings
617 UINT32 IdMappingCount;
618 /// Reference token for the ID mapping array
619 CM_OBJECT_TOKEN IdMappingToken;
620
621 /// Base Address for performance monitor counter group
622 UINT64 BaseAddress;
623 /// GSIV for the Overflow interrupt
624 UINT32 OverflowInterrupt;
625 /// Page 1 Base address
626 UINT64 Page1BaseAddress;
627
628 /// Reference token for the IORT node associated with this node
629 CM_OBJECT_TOKEN ReferenceToken;
630} CM_ARM_PMCG_NODE;
631
632/** A structure that describes the
633 GIC ITS Identifiers for an ITS Group node.
634
635 ID: EArmObjGicItsIdentifierArray
636*/
637typedef struct CmArmGicItsIdentifier {
638 /// The ITS Identifier
639 UINT32 ItsId;
640} CM_ARM_ITS_IDENTIFIER;
641
642/** A structure that describes the
643 ID Mappings for the Platform.
644
645 ID: EArmObjIdMappingArray
646*/
647typedef struct CmArmIdMapping {
648 /// Input base
649 UINT32 InputBase;
650 /// Number of input IDs
651 UINT32 NumIds;
652 /// Output Base
653 UINT32 OutputBase;
654 /// Reference token for the output node
655 CM_OBJECT_TOKEN OutputReferenceToken;
656 /// Flags
657 UINT32 Flags;
658} CM_ARM_ID_MAPPING;
659
660/** A structure that describes the Arm
661 Generic Interrupts.
662*/
663typedef struct CmArmGenericInterrupt {
664 /// Interrupt number
665 UINT32 Interrupt;
666
667 /// Flags
668 UINT32 Flags;
669} CM_ARM_GENERIC_INTERRUPT;
670
671/** A structure that describes the SMMU interrupts for the Platform.
672
673 Interrupt Interrupt number.
674 Flags Interrupt flags as defined for SMMU node.
675
676 ID: EArmObjSmmuInterruptArray
677*/
678typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT;
679
680/** A structure that describes the AML Extended Interrupts.
681
682 Interrupt Interrupt number.
683 Flags Interrupt flags as defined by the Interrupt
684 Vector Flags (Byte 3) of the Extended Interrupt
685 resource descriptor.
686 See EFI_ACPI_EXTENDED_INTERRUPT_FLAG_xxx in Acpi10.h
687*/
688typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT;
689
690/** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT
691
692 ID: EArmObjProcHierarchyInfo
693*/
694typedef struct CmArmProcHierarchyInfo {
695 /// A unique token used to identify this object
696 CM_OBJECT_TOKEN Token;
697 /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155)
698 UINT32 Flags;
699 /// Token for the parent CM_ARM_PROC_HIERARCHY_INFO object in the processor
700 /// topology. A value of CM_NULL_TOKEN means this node has no parent.
701 CM_OBJECT_TOKEN ParentToken;
702 /// Token of the associated CM_ARM_GICC_INFO object which has the
703 /// corresponding ACPI Processor ID. A value of CM_NULL_TOKEN means this
704 /// node represents a group of associated processors and it does not have an
705 /// associated GIC CPU interface.
706 CM_OBJECT_TOKEN GicCToken;
707 /// Number of resources private to this Node
708 UINT32 NoOfPrivateResources;
709 /// Token of the array which contains references to the resources private to
710 /// this CM_ARM_PROC_HIERARCHY_INFO instance. This field is ignored if
711 /// the NoOfPrivateResources is 0, in which case it is recommended to set
712 /// this field to CM_NULL_TOKEN.
713 CM_OBJECT_TOKEN PrivateResourcesArrayToken;
714} CM_ARM_PROC_HIERARCHY_INFO;
715
716/** A structure that describes the Cache Type Structure (Type 1) in PPTT
717
718 ID: EArmObjCacheInfo
719*/
720typedef struct CmArmCacheInfo {
721 /// A unique token used to identify this object
722 CM_OBJECT_TOKEN Token;
723 /// Reference token for the next level of cache that is private to the same
724 /// CM_ARM_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN means this
725 /// entry represents the last cache level appropriate to the processor
726 /// hierarchy node structures using this entry.
727 CM_OBJECT_TOKEN NextLevelOfCacheToken;
728 /// Size of the cache in bytes
729 UINT32 Size;
730 /// Number of sets in the cache
731 UINT32 NumberOfSets;
732 /// Integer number of ways. The maximum associativity supported by
733 /// ACPI Cache type structure is limited to MAX_UINT8. However,
734 /// the maximum number of ways supported by the architecture is
735 /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field
736 /// is 32-bit wide.
737 UINT32 Associativity;
738 /// Cache attributes (ACPI 6.3 - January 2019, PPTT, Table 5-156)
739 UINT8 Attributes;
740 /// Line size in bytes
741 UINT16 LineSize;
742} CM_ARM_CACHE_INFO;
743
744/** A structure that describes the ID Structure (Type 2) in PPTT
745
746 ID: EArmObjProcNodeIdInfo
747*/
748typedef struct CmArmProcNodeIdInfo {
749 /// A unique token used to identify this object
750 CM_OBJECT_TOKEN Token;
751 // Vendor ID (as described in ACPI ID registry)
752 UINT32 VendorId;
753 /// First level unique node ID
754 UINT64 Level1Id;
755 /// Second level unique node ID
756 UINT64 Level2Id;
757 /// Major revision of the node
758 UINT16 MajorRev;
759 /// Minor revision of the node
760 UINT16 MinorRev;
761 /// Spin revision of the node
762 UINT16 SpinRev;
763} CM_ARM_PROC_NODE_ID_INFO;
764
765/** A structure that describes a reference to another Configuration Manager
766 object.
767
768 This is useful for creating an array of reference tokens. The framework
769 can then query the configuration manager for these arrays using the
770 object ID EArmObjCmRef.
771
772 This can be used is to represent one-to-many relationships between objects.
773
774 ID: EArmObjCmRef
775*/
776typedef struct CmArmObjRef {
777 /// Token of the CM object being referenced
778 CM_OBJECT_TOKEN ReferenceToken;
779} CM_ARM_OBJ_REF;
780
781/** A structure that describes the Memory Affinity Structure (Type 1) in SRAT
782
783 ID: EArmObjMemoryAffinityInfo
784*/
785typedef struct CmArmMemoryAffinityInfo {
786 /// The proximity domain to which the "range of memory" belongs.
787 UINT32 ProximityDomain;
788
789 /// Base Address
790 UINT64 BaseAddress;
791
792 /// Length
793 UINT64 Length;
794
795 /// Flags
796 UINT32 Flags;
797} CM_ARM_MEMORY_AFFINITY_INFO;
798
799/** A structure that describes the ACPI Device Handle (Type 0) in the
800 Generic Initiator Affinity structure in SRAT
801
802 ID: EArmObjDeviceHandleAcpi
803*/
804typedef struct CmArmDeviceHandleAcpi {
805 /// Hardware ID
806 UINT64 Hid;
807
808 /// Unique Id
809 UINT32 Uid;
810} CM_ARM_DEVICE_HANDLE_ACPI;
811
812/** A structure that describes the PCI Device Handle (Type 1) in the
813 Generic Initiator Affinity structure in SRAT
814
815 ID: EArmObjDeviceHandlePci
816*/
817typedef struct CmArmDeviceHandlePci {
818 /// PCI Segment Number
819 UINT16 SegmentNumber;
820
821 /// PCI Bus Number - Max 256 busses (Bits 15:8 of BDF)
822 UINT8 BusNumber;
823
824 /// PCI Device Number - Max 32 devices (Bits 7:3 of BDF)
825 UINT8 DeviceNumber;
826
827 /// PCI Function Number - Max 8 functions (Bits 2:0 of BDF)
828 UINT8 FunctionNumber;
829} CM_ARM_DEVICE_HANDLE_PCI;
830
831/** A structure that describes the Generic Initiator Affinity structure in SRAT
832
833 ID: EArmObjGenericInitiatorAffinityInfo
834*/
835typedef struct CmArmGenericInitiatorAffinityInfo {
836 /// The proximity domain to which the generic initiator belongs.
837 UINT32 ProximityDomain;
838
839 /// Flags
840 UINT32 Flags;
841
842 /// Device Handle Type
843 UINT8 DeviceHandleType;
844
845 /// Reference Token for the Device Handle
846 CM_OBJECT_TOKEN DeviceHandleToken;
847} CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO;
848
849/** A structure that describes the CMN-600 hardware.
850
851 ID: EArmObjCmn600Info
852*/
853typedef struct CmArmCmn600Info {
854 /// The PERIPHBASE address.
855 /// Corresponds to the Configuration Node Region (CFGR) base address.
856 UINT64 PeriphBaseAddress;
857
858 /// The PERIPHBASE address length.
859 /// Corresponds to the CFGR base address length.
860 UINT64 PeriphBaseAddressLength;
861
862 /// The ROOTNODEBASE address.
863 /// Corresponds to the Root node (ROOT) base address.
864 UINT64 RootNodeBaseAddress;
865
866 /// The Debug and Trace Logic Controller (DTC) count.
867 /// CMN-600 can have maximum 4 DTCs.
868 UINT8 DtcCount;
869
870 /// DTC Interrupt list.
871 /// The first interrupt resource descriptor pertains to
872 /// DTC[0], the second to DTC[1] and so on.
873 /// DtcCount determines the number of DTC Interrupts that
874 /// are populated. If DTC count is 2 then DtcInterrupt[2]
875 /// and DtcInterrupt[3] are ignored.
876 /// Note: The size of CM_ARM_CMN_600_INFO structure remains
877 /// constant and does not vary with the DTC count.
878 CM_ARM_EXTENDED_INTERRUPT DtcInterrupt[4];
879} CM_ARM_CMN_600_INFO;
880
881#pragma pack()
882
883#endif // ARM_NAMESPACE_OBJECTS_H_
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette