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 216