diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index c5639e0508..429505b650 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -30,6 +30,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjCmRef, ///< 7 - CM Object Reference EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info + EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -185,6 +186,43 @@ typedef struct CmArchCommonGenericInterrupt { UINT32 Flags; } CM_ARCH_COMMON_GENERIC_INTERRUPT; +/** A structure that describes a PCI Interrupt Map. + + The legacy PCI interrupts used by PCI devices are described by this object. + + Cf Devicetree Specification - Release v0.3 + s2.4.3 "Interrupt Nexus Properties" + + ID: EArchCommonObjPciInterruptMapInfo +*/ +typedef struct CmArchCommonPciInterruptMapInfo { + /// Pci Bus. + /// Value on 8 bits (max 255). + UINT8 PciBus; + + /// Pci Device. + /// Value on 5 bits (max 31). + UINT8 PciDevice; + + /** PCI interrupt + + ACPI bindings are used: + Cf. ACPI 6.4, s6.2.13 _PRT (PCI Routing Table): + "0-INTA, 1-INTB, 2-INTC, 3-INTD" + + Device-tree bindings are shifted by 1: + "INTA=1, INTB=2, INTC=3, INTD=4" + */ + UINT8 PciInterrupt; + + /** Interrupt controller interrupt. + + Cf Devicetree Specification - Release v0.3 + s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier" + */ + CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; +} CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 60ec34a7b3..5d7c84f51d 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -56,18 +56,17 @@ typedef enum ArmObjectID { EArmObjGenericInitiatorAffinityInfo, ///< 25 - Generic Initiator Affinity EArmObjCmn600Info, ///< 26 - CMN-600 Info EArmObjLpiInfo, ///< 27 - Lpi Info - EArmObjPciInterruptMapInfo, ///< 28 - Pci Interrupt Map Info - EArmObjRmr, ///< 29 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 30 - Memory Range Descriptor - EArmObjCpcInfo, ///< 31 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 32 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 33 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 34 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 35 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 36 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 37 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 38 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 39 - P-State Dependency (PSD) Info + EArmObjRmr, ///< 28 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 29 - Memory Range Descriptor + EArmObjCpcInfo, ///< 30 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 31 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 32 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 33 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 34 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 35 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 36 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 37 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 38 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -885,43 +884,6 @@ typedef struct CmArmLpiInfo { CHAR8 StateName[16]; } CM_ARM_LPI_INFO; -/** A structure that describes a PCI Interrupt Map. - - The legacy PCI interrupts used by PCI devices are described by this object. - - Cf Devicetree Specification - Release v0.3 - s2.4.3 "Interrupt Nexus Properties" - - ID: EArmObjPciInterruptMapInfo -*/ -typedef struct CmArmPciInterruptMapInfo { - /// Pci Bus. - /// Value on 8 bits (max 255). - UINT8 PciBus; - - /// Pci Device. - /// Value on 5 bits (max 31). - UINT8 PciDevice; - - /** PCI interrupt - - ACPI bindings are used: - Cf. ACPI 6.4, s6.2.13 _PRT (PCI Routing Table): - "0-INTA, 1-INTB, 2-INTC, 3-INTD" - - Device-tree bindings are shifted by 1: - "INTA=1, INTB=2, INTC=3, INTD=4" - */ - UINT8 PciInterrupt; - - /** Interrupt controller interrupt. - - Cf Devicetree Specification - Release v0.3 - s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier" - */ - CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; -} CM_ARM_PCI_INTERRUPT_MAP_INFO; - /** A structure that describes the RMR node for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index e86f1cb529..2b488016e5 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c @@ -45,7 +45,7 @@ Requirements: - EArchCommonObjCmRef - EArchCommonObjPciConfigSpaceInfo - EArchCommonObjPciAddressMapInfo - - EArmObjPciInterruptMapInfo + - EArchCommonObjPciInterruptMapInfo */ /** This macro expands to a function that retrieves the cross-CM-object- @@ -79,9 +79,9 @@ GET_OBJECT_LIST ( Interrupt Mapping Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPciInterruptMapInfo, - CM_ARM_PCI_INTERRUPT_MAP_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPciInterruptMapInfo, + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO ); /** Initialize the MappingTable. @@ -310,12 +310,12 @@ GeneratePrt ( IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { - EFI_STATUS Status; - INT32 Index; - AML_OBJECT_NODE_HANDLE PrtNode; - CM_ARCH_COMMON_OBJ_REF *RefInfo; - UINT32 RefCount; - CM_ARM_PCI_INTERRUPT_MAP_INFO *IrqMapInfo; + EFI_STATUS Status; + INT32 Index; + AML_OBJECT_NODE_HANDLE PrtNode; + CM_ARCH_COMMON_OBJ_REF *RefInfo; + UINT32 RefCount; + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO *IrqMapInfo; ASSERT (Generator != NULL); ASSERT (CfgMgrProtocol != NULL); @@ -325,7 +325,7 @@ GeneratePrt ( PrtNode = NULL; // Get the array of CM_ARCH_COMMON_OBJ_REF referencing the - // CM_ARM_PCI_INTERRUPT_MAP_INFO objects. + // CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO objects. Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PciInfo->InterruptMapToken, @@ -352,8 +352,8 @@ GeneratePrt ( } for (Index = 0; Index < RefCount; Index++) { - // Get CM_ARM_PCI_INTERRUPT_MAP_INFO structures one by one. - Status = GetEArmObjPciInterruptMapInfo ( + // Get CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO structures one by one. + Status = GetEArchCommonObjPciInterruptMapInfo ( CfgMgrProtocol, RefInfo[Index].ReferenceToken, &IrqMapInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 0e12b0f8b1..4d660265cf 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -171,18 +171,17 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 25 - Generic Initiator Affinity NULL, ///< 26 - CMN-600 Info NULL, ///< 27 - Lpi Info - NULL, ///< 28 - Pci Interrupt Map Info - NULL, ///< 29 - Reserved Memory Range Node - NULL, ///< 30 - Memory Range Descriptor - NULL, ///< 31 - Continuous Performance Control Info - NULL, ///< 32 - Pcc Subspace Type 0 Info + NULL, ///< 28 - Reserved Memory Range Node + NULL, ///< 29 - Memory Range Descriptor + NULL, ///< 30 - Continuous Performance Control Info + NULL, ///< 31 - Pcc Subspace Type 0 Info + NULL, ///< 32 - Pcc Subspace Type 2 Info NULL, ///< 33 - Pcc Subspace Type 2 Info - NULL, ///< 34 - Pcc Subspace Type 2 Info - NULL, ///< 35 - Pcc Subspace Type 3 Info - NULL, ///< 36 - Pcc Subspace Type 4 Info - NULL, ///< 37 - Pcc Subspace Type 5 Info - NULL, ///< 38 - Embedded Trace Extension/Module Info - NULL ///< 39 - P-State Dependency (PSD) Info + NULL, ///< 34 - Pcc Subspace Type 3 Info + NULL, ///< 35 - Pcc Subspace Type 4 Info + NULL, ///< 36 - Pcc Subspace Type 5 Info + NULL, ///< 37 - Embedded Trace Extension/Module Info + NULL ///< 38 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 1fd1edb8eb..4ca35d65fc 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -449,9 +449,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPciAddressMapInfoParser[] = { { "AddressSize", 8, "0x%llx", NULL }, }; -/** A parser for EArmObjPciInterruptMapInfo. +/** A parser for EArchCommonObjPciInterruptMapInfo. */ -STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPciInterruptMapInfoParser[] = { { "PciBus", 1, "0x%x", NULL }, { "PciDevice", 1, "0x%x", NULL }, { "PciInterrupt", 1, "0x%x", NULL }, @@ -680,6 +680,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -714,7 +715,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPciInterruptMapInfo, CmPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index b20d265a83..b064e62c17 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -311,8 +311,8 @@ ParseIrqMap ( UINT32 PciAddressAttr; - CM_ARM_PCI_INTERRUPT_MAP_INFO *PciInterruptMapInfo; - UINT32 BufferSize; + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO *PciInterruptMapInfo; + UINT32 BufferSize; Data = fdt_getprop (Fdt, HostPciNode, "interrupt-map", &DataSize); if ((Data == NULL) || (DataSize <= 0)) { @@ -455,9 +455,9 @@ ParseIrqMap ( } // for PciInfo->Mapping[PciMappingTableInterrupt].ObjectId = - CREATE_CM_ARM_OBJECT_ID (EArmObjPciInterruptMapInfo); + CREATE_CM_ARCH_COMMON_OBJECT_ID (EArchCommonObjPciInterruptMapInfo); PciInfo->Mapping[PciMappingTableInterrupt].Size = - sizeof (CM_ARM_PCI_INTERRUPT_MAP_INFO) * IrqMapCount; + sizeof (CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO) * IrqMapCount; PciInfo->Mapping[PciMappingTableInterrupt].Data = PciInterruptMapInfo; PciInfo->Mapping[PciMappingTableInterrupt].Count = IrqMapCount; @@ -581,7 +581,7 @@ PciNodeParser ( CmObj of the following types are concerned: - EArchCommonObjPciConfigSpaceInfo - EArchCommonObjPciAddressMapInfo - - EArmObjPciInterruptMapInfo + - EArchCommonObjPciInterruptMapInfo @param [in] FdtParserHandle A handle to the parser instance. @param [in] PciTableInfo PCI_PARSER_TABLE structure containing the @@ -701,12 +701,12 @@ FreeParserTable ( UINT64 AddressSize; // {Populated} } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; - typedef struct CmArmPciInterruptMapInfo { + typedef struct CmArchCommonPciInterruptMapInfo { UINT8 PciBus; // {Populated} UINT8 PciDevice; // {Populated} UINT8 PciInterrupt; // {Populated} CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} - } CM_ARM_PCI_INTERRUPT_MAP_INFO; + } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h index 33457cd6e9..e680138385 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h @@ -109,12 +109,12 @@ typedef struct PciParserTable { UINT64 AddressSize; // {Populated} } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; - typedef struct CmArmPciInterruptMapInfo { + typedef struct CmArchCommonPciInterruptMapInfo { UINT8 PciBus; // {Populated} UINT8 PciDevice; // {Populated} UINT8 PciInterrupt; // {Populated} CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} - } CM_ARM_PCI_INTERRUPT_MAP_INFO; + } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 0caae7dc45..558cf69afa 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -468,18 +468,17 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 25 | Generic Initiator Affinity Info | Move to Arch Common NS | | 26 | CMN 600 Info | | | 27 | Low Power Idle State Info | Move to Arch Common NS | -| 28 | PCI Interrupt Map Info | Move to Arch Common NS | -| 29 | Reserved Memory Range Node | | -| 30 | Memory Range Descriptor | | -| 31 | Continuous Performance Control Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 38 | Embedded Trace Extension/Module Info | | -| 39 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 28 | Reserved Memory Range Node | | +| 29 | Memory Range Descriptor | | +| 30 | Continuous Performance Control Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 37 | Embedded Trace Extension/Module Info | | +| 38 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 7 | CM Object Reference | | | 8 | PCI Configuration Space Info | | | 9 | PCI Address Map Info | | +| 10 | PCI Interrupt Map Info | | | `*` | All other values are reserved. | |