diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 883 |
1 files changed, 883 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h new file mode 100644 index 00000000..0bf48406 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -0,0 +1,883 @@ +/** @file + + Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object + - Std or STD - Standard +**/ + +#ifndef ARM_NAMESPACE_OBJECTS_H_ +#define ARM_NAMESPACE_OBJECTS_H_ + +#include <StandardNameSpaceObjects.h> + +#pragma pack(1) + +/** The EARM_OBJECT_ID enum describes the Object IDs + in the ARM Namespace +*/ +typedef enum ArmObjectID { + EArmObjReserved, ///< 0 - Reserved + EArmObjBootArchInfo, ///< 1 - Boot Architecture Info + EArmObjCpuInfo, ///< 2 - CPU Info + EArmObjPowerManagementProfileInfo, ///< 3 - Power Management Profile Info + EArmObjGicCInfo, ///< 4 - GIC CPU Interface Info + EArmObjGicDInfo, ///< 5 - GIC Distributor Info + EArmObjGicMsiFrameInfo, ///< 6 - GIC MSI Frame Info + EArmObjGicRedistributorInfo, ///< 7 - GIC Redistributor Info + EArmObjGicItsInfo, ///< 8 - GIC ITS Info + EArmObjSerialConsolePortInfo, ///< 9 - Serial Console Port Info + EArmObjSerialDebugPortInfo, ///< 10 - Serial Debug Port Info + EArmObjGenericTimerInfo, ///< 11 - Generic Timer Info + EArmObjPlatformGTBlockInfo, ///< 12 - Platform GT Block Info + EArmObjGTBlockTimerFrameInfo, ///< 13 - Generic Timer Block Frame Info + EArmObjPlatformGenericWatchdogInfo, ///< 14 - Platform Generic Watchdog + EArmObjPciConfigSpaceInfo, ///< 15 - PCI Configuration Space Info + EArmObjHypervisorVendorIdentity, ///< 16 - Hypervisor Vendor Id + EArmObjFixedFeatureFlags, ///< 17 - Fixed feature flags for FADT + EArmObjItsGroup, ///< 18 - ITS Group + EArmObjNamedComponent, ///< 19 - Named Component + EArmObjRootComplex, ///< 20 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 21 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 22 - SMMUv3 + EArmObjPmcg, ///< 23 - PMCG + EArmObjGicItsIdentifierArray, ///< 24 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 25 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 28 - Cache Info + EArmObjProcNodeIdInfo, ///< 29 - Processor Node ID Info + EArmObjCmRef, ///< 30 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 33 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affinity + EArmObjSerialPortInfo, ///< 35 - Generic Serial Port Info + EArmObjCmn600Info, ///< 36 - CMN-600 Info + EArmObjMax +} EARM_OBJECT_ID; + +/** A structure that describes the + ARM Boot Architecture flags. + + ID: EArmObjBootArchInfo +*/ +typedef struct CmArmBootArchInfo { + /** This is the ARM_BOOT_ARCH flags field of the FADT Table + described in the ACPI Table Specification. + */ + UINT16 BootArchFlags; +} CM_ARM_BOOT_ARCH_INFO; + +/** A structure that describes the + Power Management Profile Information for the Platform. + + ID: EArmObjPowerManagementProfileInfo +*/ +typedef struct CmArmPowerManagementProfileInfo { + /** This is the Preferred_PM_Profile field of the FADT Table + described in the ACPI Specification + */ + UINT8 PowerManagementProfile; +} CM_ARM_POWER_MANAGEMENT_PROFILE_INFO; + +/** A structure that describes the + GIC CPU Interface for the Platform. + + ID: EArmObjGicCInfo +*/ +typedef struct CmArmGicCInfo { + /// The GIC CPU Interface number. + UINT32 CPUInterfaceNumber; + + /** The ACPI Processor UID. This must match the + _UID of the CPU Device object information described + in the DSDT/SSDT for the CPU. + */ + UINT32 AcpiProcessorUid; + + /** The flags field as described by the GICC structure + in the ACPI Specification. + */ + UINT32 Flags; + + /** The parking protocol version field as described by + the GICC structure in the ACPI Specification. + */ + UINT32 ParkingProtocolVersion; + + /** The Performance Interrupt field as described by + the GICC structure in the ACPI Specification. + */ + UINT32 PerformanceInterruptGsiv; + + /** The CPU Parked address field as described by + the GICC structure in the ACPI Specification. + */ + UINT64 ParkedAddress; + + /** The base address for the GIC CPU Interface + as described by the GICC structure in the + ACPI Specification. + */ + UINT64 PhysicalBaseAddress; + + /** The base address for GICV interface + as described by the GICC structure in the + ACPI Specification. + */ + UINT64 GICV; + + /** The base address for GICH interface + as described by the GICC structure in the + ACPI Specification. + */ + UINT64 GICH; + + /** The GICV maintenance interrupt + as described by the GICC structure in the + ACPI Specification. + */ + UINT32 VGICMaintenanceInterrupt; + + /** The base address for GICR interface + as described by the GICC structure in the + ACPI Specification. + */ + UINT64 GICRBaseAddress; + + /** The MPIDR for the CPU + as described by the GICC structure in the + ACPI Specification. + */ + UINT64 MPIDR; + + /** The Processor Power Efficiency class + as described by the GICC structure in the + ACPI Specification. + */ + UINT8 ProcessorPowerEfficiencyClass; + + /** Statistical Profiling Extension buffer overflow GSIV. Zero if + unsupported by this processor. This field was introduced in + ACPI 6.3 (MADT revision 5) and is therefore ignored when + generating MADT revision 4 or lower. + */ + UINT16 SpeOverflowInterrupt; + + /** The proximity domain to which the logical processor belongs. + This field is used to populate the GICC affinity structure + in the SRAT table. + */ + UINT32 ProximityDomain; + + /** The clock domain to which the logical processor belongs. + This field is used to populate the GICC affinity structure + in the SRAT table. + */ + UINT32 ClockDomain; + + /** The GICC Affinity flags field as described by the GICC Affinity structure + in the SRAT table. + */ + UINT32 AffinityFlags; +} CM_ARM_GICC_INFO; + +/** A structure that describes the + GIC Distributor information for the Platform. + + ID: EArmObjGicDInfo +*/ +typedef struct CmArmGicDInfo { + /// The Physical Base address for the GIC Distributor. + UINT64 PhysicalBaseAddress; + + /** The global system interrupt + number where this GIC Distributor's + interrupt inputs start. + */ + UINT32 SystemVectorBase; + + /** The GIC version as described + by the GICD structure in the + ACPI Specification. + */ + UINT8 GicVersion; +} CM_ARM_GICD_INFO; + +/** A structure that describes the + GIC MSI Frame information for the Platform. + + ID: EArmObjGicMsiFrameInfo +*/ +typedef struct CmArmGicMsiFrameInfo { + /// The GIC MSI Frame ID + UINT32 GicMsiFrameId; + + /// The Physical base address for the MSI Frame + UINT64 PhysicalBaseAddress; + + /** The GIC MSI Frame flags + as described by the GIC MSI frame + structure in the ACPI Specification. + */ + UINT32 Flags; + + /// SPI Count used by this frame + UINT16 SPICount; + + /// SPI Base used by this frame + UINT16 SPIBase; +} CM_ARM_GIC_MSI_FRAME_INFO; + +/** A structure that describes the + GIC Redistributor information for the Platform. + + ID: EArmObjGicRedistributorInfo +*/ +typedef struct CmArmGicRedistInfo { + /** The physical address of a page range + containing all GIC Redistributors. + */ + UINT64 DiscoveryRangeBaseAddress; + + /// Length of the GIC Redistributor Discovery page range + UINT32 DiscoveryRangeLength; +} CM_ARM_GIC_REDIST_INFO; + +/** A structure that describes the + GIC Interrupt Translation Service information for the Platform. + + ID: EArmObjGicItsInfo +*/ +typedef struct CmArmGicItsInfo { + /// The GIC ITS ID + UINT32 GicItsId; + + /// The physical address for the Interrupt Translation Service + UINT64 PhysicalBaseAddress; + + /** The proximity domain to which the logical processor belongs. + This field is used to populate the GIC ITS affinity structure + in the SRAT table. + */ + UINT32 ProximityDomain; +} CM_ARM_GIC_ITS_INFO; + +/** A structure that describes the + Serial Port information for the Platform. + + ID: EArmObjSerialConsolePortInfo or + EArmObjSerialDebugPortInfo or + EArmObjSerialPortInfo +*/ +typedef struct CmArmSerialPortInfo { + /// The physical base address for the serial port + UINT64 BaseAddress; + + /// The serial port interrupt + UINT32 Interrupt; + + /// The serial port baud rate + UINT64 BaudRate; + + /// The serial port clock + UINT32 Clock; + + /// Serial Port subtype + UINT16 PortSubtype; + + /// The Base address length + UINT64 BaseAddressLength; + + /// The access size + UINT8 AccessSize; +} CM_ARM_SERIAL_PORT_INFO; + +/** A structure that describes the + Generic Timer information for the Platform. + + ID: EArmObjGenericTimerInfo +*/ +typedef struct CmArmGenericTimerInfo { + /// The physical base address for the counter control frame + UINT64 CounterControlBaseAddress; + + /// The physical base address for the counter read frame + UINT64 CounterReadBaseAddress; + + /// The secure PL1 timer interrupt + UINT32 SecurePL1TimerGSIV; + + /// The secure PL1 timer flags + UINT32 SecurePL1TimerFlags; + + /// The non-secure PL1 timer interrupt + UINT32 NonSecurePL1TimerGSIV; + + /// The non-secure PL1 timer flags + UINT32 NonSecurePL1TimerFlags; + + /// The virtual timer interrupt + UINT32 VirtualTimerGSIV; + + /// The virtual timer flags + UINT32 VirtualTimerFlags; + + /// The non-secure PL2 timer interrupt + UINT32 NonSecurePL2TimerGSIV; + + /// The non-secure PL2 timer flags + UINT32 NonSecurePL2TimerFlags; + + /// GSIV for the virtual EL2 timer + UINT32 VirtualPL2TimerGSIV; + + /// Flags for the virtual EL2 timer + UINT32 VirtualPL2TimerFlags; +} CM_ARM_GENERIC_TIMER_INFO; + +/** A structure that describes the + Platform Generic Block Timer Frame information for the Platform. + + ID: EArmObjGTBlockTimerFrameInfo +*/ +typedef struct CmArmGTBlockTimerFrameInfo { + /// The Generic Timer frame number + UINT8 FrameNumber; + + /// The physical base address for the CntBase block + UINT64 PhysicalAddressCntBase; + + /// The physical base address for the CntEL0Base block + UINT64 PhysicalAddressCntEL0Base; + + /// The physical timer interrupt + UINT32 PhysicalTimerGSIV; + + /** The physical timer flags as described by the GT Block + Timer frame Structure in the ACPI Specification. + */ + UINT32 PhysicalTimerFlags; + + /// The virtual timer interrupt + UINT32 VirtualTimerGSIV; + + /** The virtual timer flags as described by the GT Block + Timer frame Structure in the ACPI Specification. + */ + UINT32 VirtualTimerFlags; + + /** The common timer flags as described by the GT Block + Timer frame Structure in the ACPI Specification. + */ + UINT32 CommonFlags; +} CM_ARM_GTBLOCK_TIMER_FRAME_INFO; + +/** A structure that describes the + Platform Generic Block Timer information for the Platform. + + ID: EArmObjPlatformGTBlockInfo +*/ +typedef struct CmArmGTBlockInfo { + /// The physical base address for the GT Block Timer structure + UINT64 GTBlockPhysicalAddress; + + /// The number of timer frames implemented in the GT Block + UINT32 GTBlockTimerFrameCount; + + /// Reference token for the GT Block timer frame list + CM_OBJECT_TOKEN GTBlockTimerFrameToken; +} CM_ARM_GTBLOCK_INFO; + +/** A structure that describes the + SBSA Generic Watchdog information for the Platform. + + ID: EArmObjPlatformGenericWatchdogInfo +*/ +typedef struct CmArmGenericWatchdogInfo { + /// The physical base address of the SBSA Watchdog control frame + UINT64 ControlFrameAddress; + + /// The physical base address of the SBSA Watchdog refresh frame + UINT64 RefreshFrameAddress; + + /// The watchdog interrupt + UINT32 TimerGSIV; + + /** The flags for the watchdog as described by the SBSA watchdog + structure in the ACPI specification. + */ + UINT32 Flags; +} CM_ARM_GENERIC_WATCHDOG_INFO; + +/** A structure that describes the + PCI Configuration Space information for the Platform. + + ID: EArmObjPciConfigSpaceInfo +*/ +typedef struct CmArmPciConfigSpaceInfo { + /// The physical base address for the PCI segment + UINT64 BaseAddress; + + /// The PCI segment group number + UINT16 PciSegmentGroupNumber; + + /// The start bus number + UINT8 StartBusNumber; + + /// The end bus number + UINT8 EndBusNumber; +} CM_ARM_PCI_CONFIG_SPACE_INFO; + +/** A structure that describes the + Hypervisor Vendor ID information for the Platform. + + ID: EArmObjHypervisorVendorIdentity +*/ +typedef struct CmArmHypervisorVendorId { + /// The hypervisor Vendor ID + UINT64 HypervisorVendorId; +} CM_ARM_HYPERVISOR_VENDOR_ID; + +/** A structure that describes the + Fixed feature flags for the Platform. + + ID: EArmObjFixedFeatureFlags +*/ +typedef struct CmArmFixedFeatureFlags { + /// The Fixed feature flags + UINT32 Flags; +} CM_ARM_FIXED_FEATURE_FLAGS; + +/** A structure that describes the + ITS Group node for the Platform. + + ID: EArmObjItsGroup +*/ +typedef struct CmArmItsGroupNode { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// The number of ITS identifiers in the ITS node + UINT32 ItsIdCount; + /// Reference token for the ITS identifier array + CM_OBJECT_TOKEN ItsIdToken; +} CM_ARM_ITS_GROUP_NODE; + +/** A structure that describes the + Named component node for the Platform. + + ID: EArmObjNamedComponent +*/ +typedef struct CmArmNamedComponentNode { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Number of ID mappings + UINT32 IdMappingCount; + /// Reference token for the ID mapping array + CM_OBJECT_TOKEN IdMappingToken; + + /// Flags for the named component + UINT32 Flags; + + /// Memory access properties : Cache coherent attributes + UINT32 CacheCoherent; + /// Memory access properties : Allocation hints + UINT8 AllocationHints; + /// Memory access properties : Memory access flags + UINT8 MemoryAccessFlags; + + /// Memory access properties : Address size limit + UINT8 AddressSizeLimit; + /** ASCII Null terminated string with the full path to + the entry in the namespace for this object. + */ + CHAR8* ObjectName; +} CM_ARM_NAMED_COMPONENT_NODE; + +/** A structure that describes the + Root complex node for the Platform. + + ID: EArmObjRootComplex +*/ +typedef struct CmArmRootComplexNode { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Number of ID mappings + UINT32 IdMappingCount; + /// Reference token for the ID mapping array + CM_OBJECT_TOKEN IdMappingToken; + + /// Memory access properties : Cache coherent attributes + UINT32 CacheCoherent; + /// Memory access properties : Allocation hints + UINT8 AllocationHints; + /// Memory access properties : Memory access flags + UINT8 MemoryAccessFlags; + + /// ATS attributes + UINT32 AtsAttribute; + /// PCI segment number + UINT32 PciSegmentNumber; + /// Memory address size limit + UINT8 MemoryAddressSize; +} CM_ARM_ROOT_COMPLEX_NODE; + +/** A structure that describes the + SMMUv1 or SMMUv2 node for the Platform. + + ID: EArmObjSmmuV1SmmuV2 +*/ +typedef struct CmArmSmmuV1SmmuV2Node { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Number of ID mappings + UINT32 IdMappingCount; + /// Reference token for the ID mapping array + CM_OBJECT_TOKEN IdMappingToken; + + /// SMMU Base Address + UINT64 BaseAddress; + /// Length of the memory range covered by the SMMU + UINT64 Span; + /// SMMU Model + UINT32 Model; + /// SMMU flags + UINT32 Flags; + + /// Number of context interrupts + UINT32 ContextInterruptCount; + /// Reference token for the context interrupt array + CM_OBJECT_TOKEN ContextInterruptToken; + + /// Number of PMU interrupts + UINT32 PmuInterruptCount; + /// Reference token for the PMU interrupt array + CM_OBJECT_TOKEN PmuInterruptToken; + + /// GSIV of the SMMU_NSgIrpt interrupt + UINT32 SMMU_NSgIrpt; + /// SMMU_NSgIrpt interrupt flags + UINT32 SMMU_NSgIrptFlags; + /// GSIV of the SMMU_NSgCfgIrpt interrupt + UINT32 SMMU_NSgCfgIrpt; + /// SMMU_NSgCfgIrpt interrupt flags + UINT32 SMMU_NSgCfgIrptFlags; +} CM_ARM_SMMUV1_SMMUV2_NODE; + +/** A structure that describes the + SMMUv3 node for the Platform. + + ID: EArmObjSmmuV3 +*/ +typedef struct CmArmSmmuV3Node { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Number of ID mappings + UINT32 IdMappingCount; + /// Reference token for the ID mapping array + CM_OBJECT_TOKEN IdMappingToken; + + /// SMMU Base Address + UINT64 BaseAddress; + /// SMMU flags + UINT32 Flags; + /// VATOS address + UINT64 VatosAddress; + /// Model + UINT32 Model; + /// GSIV of the Event interrupt if SPI based + UINT32 EventInterrupt; + /// PRI Interrupt if SPI based + UINT32 PriInterrupt; + /// GERR interrupt if GSIV based + UINT32 GerrInterrupt; + /// Sync interrupt if GSIV based + UINT32 SyncInterrupt; + + /// Proximity domain flag + UINT32 ProximityDomain; + /// Index into the array of ID mapping + UINT32 DeviceIdMappingIndex; +} CM_ARM_SMMUV3_NODE; + +/** A structure that describes the + PMCG node for the Platform. + + ID: EArmObjPmcg +*/ +typedef struct CmArmPmcgNode { + /// An unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Number of ID mappings + UINT32 IdMappingCount; + /// Reference token for the ID mapping array + CM_OBJECT_TOKEN IdMappingToken; + + /// Base Address for performance monitor counter group + UINT64 BaseAddress; + /// GSIV for the Overflow interrupt + UINT32 OverflowInterrupt; + /// Page 1 Base address + UINT64 Page1BaseAddress; + + /// Reference token for the IORT node associated with this node + CM_OBJECT_TOKEN ReferenceToken; +} CM_ARM_PMCG_NODE; + +/** A structure that describes the + GIC ITS Identifiers for an ITS Group node. + + ID: EArmObjGicItsIdentifierArray +*/ +typedef struct CmArmGicItsIdentifier { + /// The ITS Identifier + UINT32 ItsId; +} CM_ARM_ITS_IDENTIFIER; + +/** A structure that describes the + ID Mappings for the Platform. + + ID: EArmObjIdMappingArray +*/ +typedef struct CmArmIdMapping { + /// Input base + UINT32 InputBase; + /// Number of input IDs + UINT32 NumIds; + /// Output Base + UINT32 OutputBase; + /// Reference token for the output node + CM_OBJECT_TOKEN OutputReferenceToken; + /// Flags + UINT32 Flags; +} CM_ARM_ID_MAPPING; + +/** A structure that describes the Arm + Generic Interrupts. +*/ +typedef struct CmArmGenericInterrupt { + /// Interrupt number + UINT32 Interrupt; + + /// Flags + UINT32 Flags; +} CM_ARM_GENERIC_INTERRUPT; + +/** A structure that describes the SMMU interrupts for the Platform. + + Interrupt Interrupt number. + Flags Interrupt flags as defined for SMMU node. + + ID: EArmObjSmmuInterruptArray +*/ +typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; + +/** A structure that describes the AML Extended Interrupts. + + Interrupt Interrupt number. + Flags Interrupt flags as defined by the Interrupt + Vector Flags (Byte 3) of the Extended Interrupt + resource descriptor. + See EFI_ACPI_EXTENDED_INTERRUPT_FLAG_xxx in Acpi10.h +*/ +typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT; + +/** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT + + ID: EArmObjProcHierarchyInfo +*/ +typedef struct CmArmProcHierarchyInfo { + /// A unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155) + UINT32 Flags; + /// Token for the parent CM_ARM_PROC_HIERARCHY_INFO object in the processor + /// topology. A value of CM_NULL_TOKEN means this node has no parent. + CM_OBJECT_TOKEN ParentToken; + /// Token of the associated CM_ARM_GICC_INFO object which has the + /// corresponding ACPI Processor ID. A value of CM_NULL_TOKEN means this + /// node represents a group of associated processors and it does not have an + /// associated GIC CPU interface. + CM_OBJECT_TOKEN GicCToken; + /// Number of resources private to this Node + UINT32 NoOfPrivateResources; + /// Token of the array which contains references to the resources private to + /// this CM_ARM_PROC_HIERARCHY_INFO instance. This field is ignored if + /// the NoOfPrivateResources is 0, in which case it is recommended to set + /// this field to CM_NULL_TOKEN. + CM_OBJECT_TOKEN PrivateResourcesArrayToken; +} CM_ARM_PROC_HIERARCHY_INFO; + +/** A structure that describes the Cache Type Structure (Type 1) in PPTT + + ID: EArmObjCacheInfo +*/ +typedef struct CmArmCacheInfo { + /// A unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Reference token for the next level of cache that is private to the same + /// CM_ARM_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN means this + /// entry represents the last cache level appropriate to the processor + /// hierarchy node structures using this entry. + CM_OBJECT_TOKEN NextLevelOfCacheToken; + /// Size of the cache in bytes + UINT32 Size; + /// Number of sets in the cache + UINT32 NumberOfSets; + /// Integer number of ways. The maximum associativity supported by + /// ACPI Cache type structure is limited to MAX_UINT8. However, + /// the maximum number of ways supported by the architecture is + /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field + /// is 32-bit wide. + UINT32 Associativity; + /// Cache attributes (ACPI 6.3 - January 2019, PPTT, Table 5-156) + UINT8 Attributes; + /// Line size in bytes + UINT16 LineSize; +} CM_ARM_CACHE_INFO; + +/** A structure that describes the ID Structure (Type 2) in PPTT + + ID: EArmObjProcNodeIdInfo +*/ +typedef struct CmArmProcNodeIdInfo { + /// A unique token used to identify this object + CM_OBJECT_TOKEN Token; + // Vendor ID (as described in ACPI ID registry) + UINT32 VendorId; + /// First level unique node ID + UINT64 Level1Id; + /// Second level unique node ID + UINT64 Level2Id; + /// Major revision of the node + UINT16 MajorRev; + /// Minor revision of the node + UINT16 MinorRev; + /// Spin revision of the node + UINT16 SpinRev; +} CM_ARM_PROC_NODE_ID_INFO; + +/** A structure that describes a reference to another Configuration Manager + object. + + This is useful for creating an array of reference tokens. The framework + can then query the configuration manager for these arrays using the + object ID EArmObjCmRef. + + This can be used is to represent one-to-many relationships between objects. + + ID: EArmObjCmRef +*/ +typedef struct CmArmObjRef { + /// Token of the CM object being referenced + CM_OBJECT_TOKEN ReferenceToken; +} CM_ARM_OBJ_REF; + +/** A structure that describes the Memory Affinity Structure (Type 1) in SRAT + + ID: EArmObjMemoryAffinityInfo +*/ +typedef struct CmArmMemoryAffinityInfo { + /// The proximity domain to which the "range of memory" belongs. + UINT32 ProximityDomain; + + /// Base Address + UINT64 BaseAddress; + + /// Length + UINT64 Length; + + /// Flags + UINT32 Flags; +} CM_ARM_MEMORY_AFFINITY_INFO; + +/** A structure that describes the ACPI Device Handle (Type 0) in the + Generic Initiator Affinity structure in SRAT + + ID: EArmObjDeviceHandleAcpi +*/ +typedef struct CmArmDeviceHandleAcpi { + /// Hardware ID + UINT64 Hid; + + /// Unique Id + UINT32 Uid; +} CM_ARM_DEVICE_HANDLE_ACPI; + +/** A structure that describes the PCI Device Handle (Type 1) in the + Generic Initiator Affinity structure in SRAT + + ID: EArmObjDeviceHandlePci +*/ +typedef struct CmArmDeviceHandlePci { + /// PCI Segment Number + UINT16 SegmentNumber; + + /// PCI Bus Number - Max 256 busses (Bits 15:8 of BDF) + UINT8 BusNumber; + + /// PCI Device Number - Max 32 devices (Bits 7:3 of BDF) + UINT8 DeviceNumber; + + /// PCI Function Number - Max 8 functions (Bits 2:0 of BDF) + UINT8 FunctionNumber; +} CM_ARM_DEVICE_HANDLE_PCI; + +/** A structure that describes the Generic Initiator Affinity structure in SRAT + + ID: EArmObjGenericInitiatorAffinityInfo +*/ +typedef struct CmArmGenericInitiatorAffinityInfo { + /// The proximity domain to which the generic initiator belongs. + UINT32 ProximityDomain; + + /// Flags + UINT32 Flags; + + /// Device Handle Type + UINT8 DeviceHandleType; + + /// Reference Token for the Device Handle + CM_OBJECT_TOKEN DeviceHandleToken; +} CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO; + +/** A structure that describes the CMN-600 hardware. + + ID: EArmObjCmn600Info +*/ +typedef struct CmArmCmn600Info { + /// The PERIPHBASE address. + /// Corresponds to the Configuration Node Region (CFGR) base address. + UINT64 PeriphBaseAddress; + + /// The PERIPHBASE address length. + /// Corresponds to the CFGR base address length. + UINT64 PeriphBaseAddressLength; + + /// The ROOTNODEBASE address. + /// Corresponds to the Root node (ROOT) base address. + UINT64 RootNodeBaseAddress; + + /// The Debug and Trace Logic Controller (DTC) count. + /// CMN-600 can have maximum 4 DTCs. + UINT8 DtcCount; + + /// DTC Interrupt list. + /// The first interrupt resource descriptor pertains to + /// DTC[0], the second to DTC[1] and so on. + /// DtcCount determines the number of DTC Interrupts that + /// are populated. If DTC count is 2 then DtcInterrupt[2] + /// and DtcInterrupt[3] are ignored. + /// Note: The size of CM_ARM_CMN_600_INFO structure remains + /// constant and does not vary with the DTC count. + CM_ARM_EXTENDED_INTERRUPT DtcInterrupt[4]; +} CM_ARM_CMN_600_INFO; + +#pragma pack() + +#endif // ARM_NAMESPACE_OBJECTS_H_ |