]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Include/IndustryStandard/DMARemappingReportingTable.h
46f4bc00881cda7b4e5c5f7f6fe814c79e07b7cb
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / IndustryStandard / DMARemappingReportingTable.h
1 /*++
2
3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 DMARemappingReportingTable.h
15
16 Abstract:
17
18 The definition for ACPI DMA-Remapping Reporting (DMAR) Table.
19 It is defined in "Intel VT for Direct IO Architecture Specification".
20
21 --*/
22
23 #ifndef _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
24 #define _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
25
26 #include "AcpiCommon.h"
27
28 //
29 // "DMAR" DMAR Description Table Signature
30 //
31 #define EFI_ACPI_DMAR_DESCRIPTION_TABLE_SIGNATURE 0x52414d44
32
33 //
34 // DMAR Revision
35 //
36 #define EFI_ACPI_DMAR_DESCRIPTION_TABLE_REVISION 0x01
37
38 //
39 // Ensure proper structure formats
40 //
41 #pragma pack (1)
42
43 //
44 // Definition for DMA Remapping Structure Types
45 //
46 #define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_DRHD 0
47 #define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_RMRR 1
48 #define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_ATSR 2
49 #define EFI_ACPI_DMA_REMAPPING_STRUCTURE_TYPE_RHSA 3
50
51 //
52 // Definition for DMA Remapping Structure Header
53 //
54 typedef struct {
55 UINT16 Type;
56 UINT16 Length;
57 } EFI_ACPI_DMAR_STRUCTURE_HEADER;
58
59 //
60 // Definition for DMA-Remapping PCI Path
61 //
62 typedef struct {
63 UINT8 Device;
64 UINT8 Function;
65 } EFI_ACPI_DMAR_PCI_PATH;
66
67 //
68 // Definition for DMA-Remapping Device Scope Entry Structure
69 //
70 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_ENDPOINT 0x01
71 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_BRIDGE 0x02
72 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_IOAPIC 0x03
73 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_MSI_CAPABLE_HPET 0x04
74 typedef struct {
75 UINT8 DeviceScopeEntryType;
76 UINT8 Length;
77 UINT16 Reserved_2;
78 UINT8 EnumerationID;
79 UINT8 StartingBusNumber;
80 } EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
81
82 //
83 // Definition for DMA-Remapping Hardware Definition (DRHD) Structure
84 //
85 #define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_SET 0x1
86 #define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_CLEAR 0x0
87 typedef struct {
88 UINT16 Type;
89 UINT16 Length;
90 UINT8 Flags;
91 UINT8 Reserved_5;
92 UINT16 SegmentNumber;
93 UINT64 RegisterBaseAddress;
94 } EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
95
96 //
97 // Definition for Reserved Memory Region Reporting (RMRR) Structure
98 //
99 typedef struct {
100 UINT16 Type;
101 UINT16 Length;
102 UINT8 Reserved_4[2];
103 UINT16 SegmentNumber;
104 UINT64 ReservedMemoryRegionBaseAddress;
105 UINT64 ReservedMemoryRegionLimitAddress;
106 } EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
107
108 //
109 // Definition for Root Port ATS Capability Reporting (ATSR) Structure
110 //
111 #define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_SET 0x1
112 #define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_CLEAR 0x0
113 typedef struct {
114 UINT16 Type;
115 UINT16 Length;
116 UINT8 Flags;
117 UINT8 Reserved_5;
118 UINT16 SegmentNumber;
119 } EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
120
121 //
122 // Definition for Remapping Hardware Static Affinity(RHSA) Structure
123 //
124 typedef struct {
125 UINT16 Type;
126 UINT16 Length;
127 UINT32 Reserved;
128 UINT64 RegisterBaseAddress;
129 UINT32 ProximityDomain;
130 } EFI_ACPI_DMAR_REMAPPING_HARDWARE_STATIC_AFFINITY_STRUCTURE;
131
132 //
133 // Definition for DMA Remapping Structure
134 //
135 typedef union {
136 EFI_ACPI_DMAR_STRUCTURE_HEADER DMARStructureHeader;
137 EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE DMARHardwareUnitDefinition;
138 EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE DMARReservedMemoryRegionReporting;
139 EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE DMARRootPortATSCapabilityReporting;
140 } EFI_ACPI_DMA_REMAPPING_STRUCTURE;
141
142 //
143 // Definition for DMA-Remapping Reporting ACPI Table
144 //
145 #define EFI_ACPI_DMAR_TABLE_FLAGS_INTR_REMAP_CLEAR 0x00
146 #define EFI_ACPI_DMAR_TABLE_FLAGS_INTR_REMAP_SET 0x01
147 typedef struct {
148 EFI_ACPI_DESCRIPTION_HEADER Header;
149 UINT8 HostAddressWidth;
150 UINT8 Flags;
151 UINT8 Reserved_38[10];
152 } EFI_ACPI_DMAR_DESCRIPTION_TABLE;
153
154 //
155 // The Platform specific definition can be as follows:
156 // NOTE: we use /**/ as comment for user convenience to copy it.
157 //
158
159 /*
160
161 //
162 // Dmar.h
163 //
164
165 #define EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES 0x01 // user need to update
166 typedef struct {
167 EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE Header;
168 EFI_ACPI_DMAR_PCI_PATH PciPath[EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES];
169 } EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
170
171 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY 0x01 // user need to update
172 typedef struct {
173 EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Header;
174 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY];
175 } EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
176
177 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY 0x01 // user need to update
178 typedef struct {
179 EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Header;
180 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY];
181 } EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
182
183 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY 0x01 // user need to update
184 typedef struct {
185 EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Header;
186 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY];
187 } EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
188
189 #define EFI_ACPI_DMAR_DHRD_ENTRY_COUNT 0x1 // user need to update
190 #define EFI_ACPI_DMAR_RMRR_ENTRY_COUNT 0x1 // user need to update
191 #define EFI_ACPI_DMAR_ATSR_ENTRY_COUNT 0x1 // user need to update
192
193 typedef struct {
194 EFI_ACPI_DMAR_DESCRIPTION_TABLE Header;
195
196 #if EFI_ACPI_3_0_DMAR_DHRD_ENTRY_COUNT > 0
197 EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Dhrd[EFI_ACPI_DMAR_DHRD_ENTRY_COUNT];
198 #endif
199
200 #if EFI_ACPI_3_0_DMAR_RMRR_ENTRY_COUNT > 0
201 EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Rmrr[EFI_ACPI_DMAR_RMRR_ENTRY_COUNT];
202 #endif
203
204 #if EFI_ACPI_3_0_DMAR_ATSR_ENTRY_COUNT > 0
205 EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Atsr[EFI_ACPI_DMAR_ATSR_ENTRY_COUNT];
206 #endif
207
208 } EFI_ACPI_3_0_DMA_REMAPPING_REPORTING_TABLE;
209
210 */
211
212 #pragma pack()
213
214 #endif
215