Add RHSA (remapping hardware static Affinity) structure definition according to VT...
[edk2.git] / EdkCompatibilityPkg / Foundation / Include / IndustryStandard / DMARemappingReportingTable.h
blob5adc20fc25ff6ada0ae65050b5fed60017de2273
1 /*++
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
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.
12 Module Name:
14 DMARemappingReportingTable.h
16 Abstract:
18 The definition for ACPI DMA-Remapping Reporting (DMAR) Table.
19 It is defined in "Intel VT for Direct IO Architecture Specification".
21 --*/
23 #ifndef _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
24 #define _EFI_DMA_REMAPPING_REPORTING_TABLE_H_
26 #include "AcpiCommon.h"
29 // "DMAR" DMAR Description Table Signature
31 #define EFI_ACPI_DMAR_DESCRIPTION_TABLE_SIGNATURE 0x52414d44
34 // DMAR Revision
36 #define EFI_ACPI_DMAR_DESCRIPTION_TABLE_REVISION 0x01
39 // Ensure proper structure formats
41 #pragma pack (1)
44 // Definition for DMA Remapping Structure Types
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
52 // Definition for DMA Remapping Structure Header
54 typedef struct {
55 UINT16 Type;
56 UINT16 Length;
57 } EFI_ACPI_DMAR_STRUCTURE_HEADER;
60 // Definition for DMA-Remapping PCI Path
62 typedef struct {
63 UINT8 Device;
64 UINT8 Function;
65 } EFI_ACPI_DMAR_PCI_PATH;
68 // Definition for DMA-Remapping Device Scope Entry Structure
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;
83 // Definition for DMA-Remapping Hardware Definition (DRHD) Structure
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;
97 // Definition for Reserved Memory Region Reporting (RMRR) Structure
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;
109 // Definition for Root Port ATS Capability Reporting (ATSR) Structure
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;
122 // Definition for Remapping Hardware Static Affinity(RHSA) Structure
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;
133 // Definition for DMA Remapping Structure
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;
143 // Definition for DMA-Remapping Reporting ACPI Table
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;
155 // The Platform specific definition can be as follows:
156 // NOTE: we use /**/ as comment for user convenience to copy it.
162 // Dmar.h
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;
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;
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;
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;
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
193 typedef struct {
194 EFI_ACPI_DMAR_DESCRIPTION_TABLE Header;
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
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
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
208 } EFI_ACPI_3_0_DMA_REMAPPING_REPORTING_TABLE;
212 #pragma pack()
214 #endif