Home | History | Annotate | Download | only in IndustryStandard
      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