ItsGroupNode->Node.Type = EFI_ACPI_IORT_TYPE_ITS_GROUP;\r
ItsGroupNode->Node.Length = (UINT16)NodeLength;\r
ItsGroupNode->Node.Revision = 0;\r
- ItsGroupNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ ItsGroupNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
ItsGroupNode->Node.NumIdMappings = 0;\r
ItsGroupNode->Node.IdReference = 0;\r
\r
NcNode->Node.Type = EFI_ACPI_IORT_TYPE_NAMED_COMP;\r
NcNode->Node.Length = (UINT16)NodeLength;\r
NcNode->Node.Revision = 2;\r
- NcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ NcNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
NcNode->Node.NumIdMappings = NodeList->IdMappingCount;\r
\r
ObjectNameLength = AsciiStrLen (NodeList->ObjectName) + 1;\r
RcNode->Node.Type = EFI_ACPI_IORT_TYPE_ROOT_COMPLEX;\r
RcNode->Node.Length = (UINT16)NodeLength;\r
RcNode->Node.Revision = 1;\r
- RcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ RcNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
RcNode->Node.NumIdMappings = NodeList->IdMappingCount;\r
RcNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?\r
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);\r
RcNode->AtsAttribute = NodeList->AtsAttribute;\r
RcNode->PciSegmentNumber = NodeList->PciSegmentNumber;\r
RcNode->MemoryAddressSize = NodeList->MemoryAddressSize;\r
+ RcNode->PasidCapabilities = EFI_ACPI_RESERVED_WORD;\r
RcNode->Reserved1[0] = EFI_ACPI_RESERVED_BYTE;\r
- RcNode->Reserved1[1] = EFI_ACPI_RESERVED_BYTE;\r
- RcNode->Reserved1[2] = EFI_ACPI_RESERVED_BYTE;\r
\r
if (NodeList->IdMappingCount > 0) {\r
if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
SmmuNode->Node.Type = EFI_ACPI_IORT_TYPE_SMMUv1v2;\r
SmmuNode->Node.Length = (UINT16)NodeLength;\r
SmmuNode->Node.Revision = 0;\r
- SmmuNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ SmmuNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
SmmuNode->Node.NumIdMappings = NodeList->IdMappingCount;\r
SmmuNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?\r
0 : (sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +\r
SmmuV3Node->Node.Type = EFI_ACPI_IORT_TYPE_SMMUv3;\r
SmmuV3Node->Node.Length = (UINT16)NodeLength;\r
SmmuV3Node->Node.Revision = 2;\r
- SmmuV3Node->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ SmmuV3Node->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
SmmuV3Node->Node.NumIdMappings = NodeList->IdMappingCount;\r
SmmuV3Node->Node.IdReference = (NodeList->IdMappingCount == 0) ?\r
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);\r
PmcgNode->Node.Type = EFI_ACPI_IORT_TYPE_PMCG;\r
PmcgNode->Node.Length = (UINT16)NodeLength;\r
PmcgNode->Node.Revision = 1;\r
- PmcgNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;\r
+ PmcgNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;\r
PmcgNode->Node.NumIdMappings = NodeList->IdMappingCount;\r
PmcgNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?\r
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);\r
// ACPI Table Signature\r
EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE,\r
// ACPI Table Revision supported by this Generator\r
- EFI_ACPI_IO_REMAPPING_TABLE_REVISION,\r
+ EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00,\r
// Minimum supported ACPI Table Revision\r
- EFI_ACPI_IO_REMAPPING_TABLE_REVISION,\r
+ EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00,\r
// Creator ID\r
TABLE_GENERATOR_CREATOR_ID_ARM,\r
// Creator Revision\r
/** @file\r
- ACPI IO Remapping Table (IORT) as specified in ARM spec DEN0049D\r
-\r
- http://infocenter.arm.com/help/topic/com.arm.doc.den0049d/DEN0049D_IO_Remapping_Table.pdf\r
+ ACPI IO Remapping Table (IORT) definitions.\r
\r
Copyright (c) 2017, Linaro Limited. All rights reserved.<BR>\r
- Copyright (c) 2018, ARM Limited. All rights reserved.<BR>\r
+ Copyright (c) 2018 - 2022, Arm Limited. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+ @par Reference(s):\r
+ - IO Remapping Table, Platform Design Document, Revision E.d, Feb 2022\r
+ (https://developer.arm.com/documentation/den0049/)\r
+\r
+ @par Glossary:\r
+ - Ref : Reference\r
+ - Mem : Memory\r
+ - Desc : Descriptor\r
**/\r
\r
#ifndef __IO_REMAPPING_TABLE_H__\r
\r
#include <IndustryStandard/Acpi.h>\r
\r
-#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION 0x0\r
+#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00 0x0\r
+#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_04 0x4 // Deprecated\r
+#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_05 0x5\r
\r
#define EFI_ACPI_IORT_TYPE_ITS_GROUP 0x0\r
#define EFI_ACPI_IORT_TYPE_NAMED_COMP 0x1\r
#define EFI_ACPI_IORT_TYPE_SMMUv1v2 0x3\r
#define EFI_ACPI_IORT_TYPE_SMMUv3 0x4\r
#define EFI_ACPI_IORT_TYPE_PMCG 0x5\r
+#define EFI_ACPI_IORT_TYPE_RMR 0x6\r
\r
#define EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA BIT0\r
\r
#define EFI_ACPI_IORT_SMMUv3_MODEL_CAVIUM_CN99XX 0x2\r
\r
#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_UNSUPPORTED 0x0\r
-#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORTED 0x1\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORTED BIT0\r
+\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_UNSUPPORTED 0x0\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_SUPPORTED BIT1\r
+\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_UNSUPPORTED 0x0\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_SUPPORTED BIT2\r
+\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_UNSUPPORTED 0x0\r
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_SUPPORTED BIT1\r
+\r
+#define EFI_ACPI_IORT_RMR_REMAP_NOT_PERMITTED 0x0\r
+#define EFI_ACPI_IORT_RMR_REMAP_PERMITTED BIT0\r
+\r
+#define EFI_ACPI_IORT_RMR_ACCESS_REQ_NOT_PRIVILEGED 0x0\r
+#define EFI_ACPI_IORT_RMR_ACCESS_REQ_PRIVILEGED BIT1\r
+\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRNE 0x0\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRE 0x1\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGRE 0x2\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_GRE 0x3\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_NC_OUT_NC 0x4\r
+#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_WB_OUT_WB_ISH 0x5\r
\r
#define EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE BIT0\r
\r
+#define EFI_ACPI_IORT_RMR_NODE_REVISION_02 0x2 // Deprecated\r
+\r
#pragma pack(1)\r
\r
///\r
UINT8 Type;\r
UINT16 Length;\r
UINT8 Revision;\r
- UINT32 Reserved;\r
+ UINT32 Identifier;\r
UINT32 NumIdMappings;\r
UINT32 IdReference;\r
} EFI_ACPI_6_0_IO_REMAPPING_NODE;\r
UINT32 AtsAttribute;\r
UINT32 PciSegmentNumber;\r
UINT8 MemoryAddressSize;\r
- UINT8 Reserved1[3];\r
+ UINT16 PasidCapabilities;\r
+ UINT8 Reserved1[1];\r
+ UINT32 Flags;\r
} EFI_ACPI_6_0_IO_REMAPPING_RC_NODE;\r
\r
///\r
// EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE OverflowInterruptMsiMapping[1];\r
} EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE;\r
\r
+///\r
+/// Memory Range Descriptor.\r
+///\r
+typedef struct {\r
+ /// Base address of Reserved Memory Range,\r
+ /// aligned to a page size of 64K.\r
+ UINT64 Base;\r
+\r
+ /// Length of the Reserved Memory range.\r
+ /// Must be a multiple of the page size of 64K.\r
+ UINT64 Length;\r
+\r
+ /// Reserved, must be zero.\r
+ UINT32 Reserved;\r
+} EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC;\r
+\r
+///\r
+/// Node type 6: Reserved Memory Range (RMR) node\r
+///\r
+typedef struct {\r
+ EFI_ACPI_6_0_IO_REMAPPING_NODE Node;\r
+\r
+ /// RMR flags\r
+ UINT32 Flags;\r
+\r
+ /// Memory range descriptor count.\r
+ UINT32 NumMemRangeDesc;\r
+\r
+ /// Offset of the memory range descriptor array.\r
+ UINT32 MemRangeDescRef;\r
+ // EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE IdMapping[1];\r
+ // EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC MemRangeDesc[1];\r
+} EFI_ACPI_6_0_IO_REMAPPING_RMR_NODE;\r
+\r
#pragma pack()\r
\r
#endif\r