]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Include/IndustryStandard/DMARemappingReportingTable.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / IndustryStandard / DMARemappingReportingTable.h
1 /*++
2
3 Copyright (c) 2007, Intel Corporation
4 All rights reserved. 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
50 //
51 // Definition for DMA Remapping Structure Header
52 //
53 typedef struct {
54 UINT16 Type;
55 UINT16 Length;
56 } EFI_ACPI_DMAR_STRUCTURE_HEADER;
57
58 //
59 // Definition for DMA-Remapping PCI Path
60 //
61 typedef struct {
62 UINT8 Device;
63 UINT8 Function;
64 } EFI_ACPI_DMAR_PCI_PATH;
65
66 //
67 // Definition for DMA-Remapping Device Scope Entry Structure
68 //
69 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_ENDPOINT 0x01
70 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_BRIDGE 0x02
71 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_IOAPIC 0x03
72 #define EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_MSI_CAPABLE_HPET 0x04
73 typedef struct {
74 UINT8 DeviceScopeEntryType;
75 UINT8 Length;
76 UINT16 Reserved_2;
77 UINT8 EnumerationID;
78 UINT8 StartingBusNumber;
79 } EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
80
81 //
82 // Definition for DMA-Remapping Hardware Definition (DRHD) Structure
83 //
84 #define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_SET 0x1
85 #define EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_ALL_CLEAR 0x0
86 typedef struct {
87 UINT16 Type;
88 UINT16 Length;
89 UINT8 Flags;
90 UINT8 Reserved_5;
91 UINT16 SegmentNumber;
92 UINT64 RegisterBaseAddress;
93 } EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
94
95 //
96 // Definition for Reserved Memory Region Reporting (RMRR) Structure
97 //
98 typedef struct {
99 UINT16 Type;
100 UINT16 Length;
101 UINT8 Reserved_4[2];
102 UINT16 SegmentNumber;
103 UINT64 ReservedMemoryRegionBaseAddress;
104 UINT64 ReservedMemoryRegionLimitAddress;
105 } EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
106
107 //
108 // Definition for Root Port ATS Capability Reporting (ATSR) Structure
109 //
110 #define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_SET 0x1
111 #define EFI_ACPI_DMAR_ATSR_FLAGS_ALL_PORTS_CLEAR 0x0
112 typedef struct {
113 UINT16 Type;
114 UINT16 Length;
115 UINT8 Flags;
116 UINT8 Reserved_5;
117 UINT16 SegmentNumber;
118 } EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
119
120 //
121 // Definition for DMA Remapping Structure
122 //
123 typedef union {
124 EFI_ACPI_DMAR_STRUCTURE_HEADER DMARStructureHeader;
125 EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE DMARHardwareUnitDefinition;
126 EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE DMARReservedMemoryRegionReporting;
127 EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE DMARRootPortATSCapabilityReporting;
128 } EFI_ACPI_DMA_REMAPPING_STRUCTURE;
129
130 //
131 // Definition for DMA-Remapping Reporting ACPI Table
132 //
133 #define EFI_ACPI_DMAR_TABLE_FLAGS_INTR_REMAP_SET 0x01
134 typedef struct {
135 EFI_ACPI_DESCRIPTION_HEADER Header;
136 UINT8 HostAddressWidth;
137 UINT8 Flags;
138 UINT8 Reserved_38[10];
139 } EFI_ACPI_DMAR_DESCRIPTION_TABLE;
140
141 //
142 // The Platform specific definition can be as follows:
143 // NOTE: we use /**/ as comment for user convenience to copy it.
144 //
145
146 /*
147
148 //
149 // Dmar.h
150 //
151
152 #define EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES 0x01 // user need to update
153 typedef struct {
154 EFI_ACPI_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE Header;
155 EFI_ACPI_DMAR_PCI_PATH PciPath[EFI_ACPI_MAX_NUM_PCI_PATH_ENTRIES];
156 } EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE;
157
158 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY 0x01 // user need to update
159 typedef struct {
160 EFI_ACPI_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Header;
161 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_DHRD_ENTRY];
162 } EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE;
163
164 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY 0x01 // user need to update
165 typedef struct {
166 EFI_ACPI_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Header;
167 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_RMRR_ENTRY];
168 } EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE;
169
170 #define EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY 0x01 // user need to update
171 typedef struct {
172 EFI_ACPI_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Header;
173 EFI_ACPI_3_0_DMAR_DEVICE_SCOPE_ENTRY_STRUCTURE DeviceScopeEntry[EFI_ACPI_MAX_NUM_OF_DEVICE_SCOPE_PER_ATSR_ENTRY];
174 } EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE;
175
176 #define EFI_ACPI_DMAR_DHRD_ENTRY_COUNT 0x1 // user need to update
177 #define EFI_ACPI_DMAR_RMRR_ENTRY_COUNT 0x1 // user need to update
178 #define EFI_ACPI_DMAR_ATSR_ENTRY_COUNT 0x1 // user need to update
179
180 typedef struct {
181 EFI_ACPI_DMAR_DESCRIPTION_TABLE Header;
182
183 #if EFI_ACPI_3_0_DMAR_DHRD_ENTRY_COUNT > 0
184 EFI_ACPI_3_0_DMAR_HARDWARE_UNIT_DEFINITION_STRUCTURE Dhrd[EFI_ACPI_DMAR_DHRD_ENTRY_COUNT];
185 #endif
186
187 #if EFI_ACPI_3_0_DMAR_RMRR_ENTRY_COUNT > 0
188 EFI_ACPI_3_0_DMAR_RESERVED_MEMORY_REGION_REPORTING_STRUCTURE Rmrr[EFI_ACPI_DMAR_RMRR_ENTRY_COUNT];
189 #endif
190
191 #if EFI_ACPI_3_0_DMAR_ATSR_ENTRY_COUNT > 0
192 EFI_ACPI_3_0_DMAR_ROOT_PORT_ATS_CAPABILITY_REPORTING_STRUCTURE Atsr[EFI_ACPI_DMAR_ATSR_ENTRY_COUNT];
193 #endif
194
195 } EFI_ACPI_3_0_DMA_REMAPPING_REPORTING_TABLE;
196
197 */
198
199 #pragma pack()
200
201 #endif
202