2 ACPI IO Remapping Table (IORT) definitions.
4 Copyright (c) 2017, Linaro Limited. All rights reserved.<BR>
5 Copyright (c) 2018 - 2022, Arm Limited. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
10 - IO Remapping Table, Platform Design Document, Revision E.d, Feb 2022
11 (https://developer.arm.com/documentation/den0049/)
12 - IO Remapping Table, Platform Design Document, Revision E.e, Sept 2022
13 (https://developer.arm.com/documentation/den0049/)
21 #ifndef __IO_REMAPPING_TABLE_H__
22 #define __IO_REMAPPING_TABLE_H__
24 #include <IndustryStandard/Acpi.h>
26 #define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00 0x0
27 #define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_04 0x4 // Deprecated
28 #define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_05 0x5
29 #define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_06 0x6
31 #define EFI_ACPI_IORT_TYPE_ITS_GROUP 0x0
32 #define EFI_ACPI_IORT_TYPE_NAMED_COMP 0x1
33 #define EFI_ACPI_IORT_TYPE_ROOT_COMPLEX 0x2
34 #define EFI_ACPI_IORT_TYPE_SMMUv1v2 0x3
35 #define EFI_ACPI_IORT_TYPE_SMMUv3 0x4
36 #define EFI_ACPI_IORT_TYPE_PMCG 0x5
37 #define EFI_ACPI_IORT_TYPE_RMR 0x6
39 #define EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA BIT0
41 #define EFI_ACPI_IORT_MEM_ACCESS_PROP_AH_TR BIT0
42 #define EFI_ACPI_IORT_MEM_ACCESS_PROP_AH_WA BIT1
43 #define EFI_ACPI_IORT_MEM_ACCESS_PROP_AH_RA BIT2
44 #define EFI_ACPI_IORT_MEM_ACCESS_PROP_AH_AHO BIT3
46 #define EFI_ACPI_IORT_MEM_ACCESS_FLAGS_CPM BIT0
47 #define EFI_ACPI_IORT_MEM_ACCESS_FLAGS_DACS BIT1
49 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_v1 0x0
50 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_v2 0x1
51 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_MMU400 0x2
52 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_MMU500 0x3
53 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_MMU401 0x4
54 #define EFI_ACPI_IORT_SMMUv1v2_MODEL_CAVIUM_THX_v2 0x5
56 #define EFI_ACPI_IORT_SMMUv1v2_FLAG_DVM BIT0
57 #define EFI_ACPI_IORT_SMMUv1v2_FLAG_COH_WALK BIT1
59 #define EFI_ACPI_IORT_SMMUv1v2_INT_FLAG_LEVEL 0x0
60 #define EFI_ACPI_IORT_SMMUv1v2_INT_FLAG_EDGE 0x1
62 #define EFI_ACPI_IORT_SMMUv3_FLAG_COHAC_OVERRIDE BIT0
63 #define EFI_ACPI_IORT_SMMUv3_FLAG_HTTU_OVERRIDE BIT1
64 #define EFI_ACPI_IORT_SMMUv3_FLAG_PROXIMITY_DOMAIN BIT3
65 #define EFI_ACPI_IORT_SMMUv3_FLAG_DEVICEID_VALID BIT4
67 #define EFI_ACPI_IORT_SMMUv3_MODEL_GENERIC 0x0
68 #define EFI_ACPI_IORT_SMMUv3_MODEL_HISILICON_HI161X 0x1
69 #define EFI_ACPI_IORT_SMMUv3_MODEL_CAVIUM_CN99XX 0x2
71 #define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_UNSUPPORTED 0x0
72 #define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORTED BIT0
74 #define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_UNSUPPORTED 0x0
75 #define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_SUPPORTED BIT1
77 #define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_UNSUPPORTED 0x0
78 #define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_SUPPORTED BIT2
80 #define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_UNSUPPORTED 0x0
81 #define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_SUPPORTED BIT1
83 #define EFI_ACPI_IORT_RMR_REMAP_NOT_PERMITTED 0x0
84 #define EFI_ACPI_IORT_RMR_REMAP_PERMITTED BIT0
86 #define EFI_ACPI_IORT_RMR_ACCESS_REQ_NOT_PRIVILEGED 0x0
87 #define EFI_ACPI_IORT_RMR_ACCESS_REQ_PRIVILEGED BIT1
89 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRNE 0x0
90 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRE 0x1
91 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGRE 0x2
92 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_GRE 0x3
93 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_NC_OUT_NC 0x4
94 #define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_WB_OUT_WB_ISH 0x5
96 #define EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE BIT0
98 #define EFI_ACPI_IORT_RMR_NODE_REVISION_02 0x2 // Deprecated
106 EFI_ACPI_DESCRIPTION_HEADER Header
;
110 } EFI_ACPI_6_0_IO_REMAPPING_TABLE
;
113 /// Definition for ID mapping table shared by all node types
119 UINT32 OutputReference
;
121 } EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE
;
124 /// Node header definition shared by all node types
131 UINT32 NumIdMappings
;
133 } EFI_ACPI_6_0_IO_REMAPPING_NODE
;
136 /// Node type 0: ITS node
139 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
141 UINT32 NumItsIdentifiers
;
142 // UINT32 ItsIdentifiers[NumItsIdentifiers];
143 } EFI_ACPI_6_0_IO_REMAPPING_ITS_NODE
;
146 /// Node type 1: root complex node
149 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
151 UINT32 CacheCoherent
;
152 UINT8 AllocationHints
;
154 UINT8 MemoryAccessFlags
;
157 UINT32 PciSegmentNumber
;
158 UINT8 MemoryAddressSize
;
159 UINT16 PasidCapabilities
;
162 } EFI_ACPI_6_0_IO_REMAPPING_RC_NODE
;
165 /// Node type 2: named component node
168 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
171 UINT32 CacheCoherent
;
172 UINT8 AllocationHints
;
174 UINT8 MemoryAccessFlags
;
175 UINT8 AddressSizeLimit
;
176 // UINT8 ObjectName[];
177 } EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE
;
180 /// Node type 3: SMMUv1 or SMMUv2 node
184 UINT32 InterruptFlags
;
185 } EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT
;
188 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
194 UINT32 GlobalInterruptArrayRef
;
195 UINT32 NumContextInterrupts
;
196 UINT32 ContextInterruptArrayRef
;
197 UINT32 NumPmuInterrupts
;
198 UINT32 PmuInterruptArrayRef
;
201 UINT32 SMMU_NSgIrptFlags
;
202 UINT32 SMMU_NSgCfgIrpt
;
203 UINT32 SMMU_NSgCfgIrptFlags
;
205 // EFI_ACPI_6_0_IO_REMAPPING_SMMU_CTX_INT ContextInterrupt[NumContextInterrupts];
206 // EFI_ACPI_6_0_IO_REMAPPING_SMMU_CTX_INT PmuInterrupt[NumPmuInterrupts];
207 } EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE
;
210 /// Node type 4: SMMUv3 node
213 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
224 UINT32 ProximityDomain
;
225 UINT32 DeviceIdMappingIndex
;
226 } EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE
;
229 /// Node type 5: PMCG node
232 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
235 UINT32 OverflowInterruptGsiv
;
236 UINT32 NodeReference
;
238 // EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE OverflowInterruptMsiMapping[1];
239 } EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE
;
242 /// Memory Range Descriptor.
245 /// Base address of Reserved Memory Range,
246 /// aligned to a page size of 64K.
249 /// Length of the Reserved Memory range.
250 /// Must be a multiple of the page size of 64K.
253 /// Reserved, must be zero.
255 } EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC
;
258 /// Node type 6: Reserved Memory Range (RMR) node
261 EFI_ACPI_6_0_IO_REMAPPING_NODE Node
;
266 /// Memory range descriptor count.
267 UINT32 NumMemRangeDesc
;
269 /// Offset of the memory range descriptor array.
270 UINT32 MemRangeDescRef
;
271 // EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE IdMapping[1];
272 // EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC MemRangeDesc[1];
273 } EFI_ACPI_6_0_IO_REMAPPING_RMR_NODE
;