]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelSiliconPkg/Feature/VTd/IntelVTdPmrPei/DmarTable.c
Remove IntelSiliconPkg that has been moved to edk2-platform repo
[mirror_edk2.git] / IntelSiliconPkg / Feature / VTd / IntelVTdPmrPei / DmarTable.c
diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdPmrPei/DmarTable.c b/IntelSiliconPkg/Feature/VTd/IntelVTdPmrPei/DmarTable.c
deleted file mode 100644 (file)
index d920d13..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-/** @file\r
-\r
-  Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-#include <PiPei.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/HobLib.h>\r
-#include <IndustryStandard/Vtd.h>\r
-#include <Ppi/VtdInfo.h>\r
-\r
-#include "IntelVTdPmrPei.h"\r
-\r
-/**\r
-  Dump DMAR DeviceScopeEntry.\r
-\r
-  @param[in]  DmarDeviceScopeEntry  DMAR DeviceScopeEntry\r
-**/\r
-VOID\r
-DumpDmarDeviceScopeEntry (\r
-  IN EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER     *DmarDeviceScopeEntry\r
-  )\r
-{\r
-  UINTN   PciPathNumber;\r
-  UINTN   PciPathIndex;\r
-  EFI_ACPI_DMAR_PCI_PATH  *PciPath;\r
-\r
-  if (DmarDeviceScopeEntry == NULL) {\r
-    return;\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "    *************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    *       DMA-Remapping Device Scope Entry Structure                      *\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    *************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    (sizeof(UINTN) == sizeof(UINT64)) ?\r
-    "    DMAR Device Scope Entry address ...................... 0x%016lx\n" :\r
-    "    DMAR Device Scope Entry address ...................... 0x%08x\n",\r
-    DmarDeviceScopeEntry\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      Device Scope Entry Type ............................ 0x%02x\n",\r
-    DmarDeviceScopeEntry->Type\r
-    ));\r
-  switch (DmarDeviceScopeEntry->Type) {\r
-  case EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_ENDPOINT:\r
-    DEBUG ((DEBUG_INFO,\r
-      "        PCI Endpoint Device\n"\r
-      ));\r
-    break;\r
-  case EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_BRIDGE:\r
-    DEBUG ((DEBUG_INFO,\r
-      "        PCI Sub-hierachy\n"\r
-      ));\r
-    break;\r
-  default:\r
-    break;\r
-  }\r
-  DEBUG ((DEBUG_INFO,\r
-    "      Length ............................................. 0x%02x\n",\r
-    DmarDeviceScopeEntry->Length\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      Enumeration ID ..................................... 0x%02x\n",\r
-    DmarDeviceScopeEntry->EnumerationId\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      Starting Bus Number ................................ 0x%02x\n",\r
-    DmarDeviceScopeEntry->StartBusNumber\r
-    ));\r
-\r
-  PciPathNumber = (DmarDeviceScopeEntry->Length - sizeof(EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER)) / sizeof(EFI_ACPI_DMAR_PCI_PATH);\r
-  PciPath = (EFI_ACPI_DMAR_PCI_PATH *)(DmarDeviceScopeEntry + 1);\r
-  for (PciPathIndex = 0; PciPathIndex < PciPathNumber; PciPathIndex++) {\r
-    DEBUG ((DEBUG_INFO,\r
-      "      Device ............................................. 0x%02x\n",\r
-      PciPath[PciPathIndex].Device\r
-      ));\r
-    DEBUG ((DEBUG_INFO,\r
-      "      Function ........................................... 0x%02x\n",\r
-      PciPath[PciPathIndex].Function\r
-      ));\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "    *************************************************************************\n\n"\r
-    ));\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Dump DMAR RMRR table.\r
-\r
-  @param[in]  Rmrr  DMAR RMRR table\r
-**/\r
-VOID\r
-DumpDmarRmrr (\r
-  IN EFI_ACPI_DMAR_RMRR_HEADER *Rmrr\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER       *DmarDeviceScopeEntry;\r
-  INTN                                    RmrrLen;\r
-\r
-  if (Rmrr == NULL) {\r
-    return;\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "  *       Reserved Memory Region Reporting Structure                        *\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    (sizeof(UINTN) == sizeof(UINT64)) ?\r
-    "  RMRR address ........................................... 0x%016lx\n" :\r
-    "  RMRR address ........................................... 0x%08x\n",\r
-    Rmrr\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Type ................................................. 0x%04x\n",\r
-    Rmrr->Header.Type\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Length ............................................... 0x%04x\n",\r
-    Rmrr->Header.Length\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Segment Number ....................................... 0x%04x\n",\r
-    Rmrr->SegmentNumber\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Reserved Memory Region Base Address .................. 0x%016lx\n",\r
-    Rmrr->ReservedMemoryRegionBaseAddress\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Reserved Memory Region Limit Address ................. 0x%016lx\n",\r
-    Rmrr->ReservedMemoryRegionLimitAddress\r
-    ));\r
-\r
-  RmrrLen  = Rmrr->Header.Length - sizeof(EFI_ACPI_DMAR_RMRR_HEADER);\r
-  DmarDeviceScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)(Rmrr + 1);\r
-  while (RmrrLen > 0) {\r
-    DumpDmarDeviceScopeEntry (DmarDeviceScopeEntry);\r
-    RmrrLen -= DmarDeviceScopeEntry->Length;\r
-    DmarDeviceScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)DmarDeviceScopeEntry + DmarDeviceScopeEntry->Length);\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n\n"\r
-    ));\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Dump DMAR DRHD table.\r
-\r
-  @param[in]  Drhd  DMAR DRHD table\r
-**/\r
-VOID\r
-DumpDmarDrhd (\r
-  IN EFI_ACPI_DMAR_DRHD_HEADER *Drhd\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER       *DmarDeviceScopeEntry;\r
-  INTN                                    DrhdLen;\r
-\r
-  if (Drhd == NULL) {\r
-    return;\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "  *       DMA-Remapping Hardware Definition Structure                       *\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    (sizeof(UINTN) == sizeof(UINT64)) ?\r
-    "  DRHD address ........................................... 0x%016lx\n" :\r
-    "  DRHD address ........................................... 0x%08x\n",\r
-    Drhd\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Type ................................................. 0x%04x\n",\r
-    Drhd->Header.Type\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Length ............................................... 0x%04x\n",\r
-    Drhd->Header.Length\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Flags ................................................ 0x%02x\n",\r
-    Drhd->Flags\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      INCLUDE_PCI_ALL .................................... 0x%02x\n",\r
-    Drhd->Flags & EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_PCI_ALL\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Segment Number ....................................... 0x%04x\n",\r
-    Drhd->SegmentNumber\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Register Base Address ................................ 0x%016lx\n",\r
-    Drhd->RegisterBaseAddress\r
-    ));\r
-\r
-  DrhdLen  = Drhd->Header.Length - sizeof(EFI_ACPI_DMAR_DRHD_HEADER);\r
-  DmarDeviceScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)(Drhd + 1);\r
-  while (DrhdLen > 0) {\r
-    DumpDmarDeviceScopeEntry (DmarDeviceScopeEntry);\r
-    DrhdLen -= DmarDeviceScopeEntry->Length;\r
-    DmarDeviceScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)DmarDeviceScopeEntry + DmarDeviceScopeEntry->Length);\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "  ***************************************************************************\n\n"\r
-    ));\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Dump DMAR ACPI table.\r
-\r
-  @param[in]  Dmar  DMAR ACPI table\r
-**/\r
-VOID\r
-DumpAcpiDMAR (\r
-  IN EFI_ACPI_DMAR_HEADER  *Dmar\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_STRUCTURE_HEADER *DmarHeader;\r
-  INTN                  DmarLen;\r
-\r
-  if (Dmar == NULL) {\r
-    return;\r
-  }\r
-\r
-  //\r
-  // Dump Dmar table\r
-  //\r
-  DEBUG ((DEBUG_INFO,\r
-    "*****************************************************************************\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "*         DMAR Table                                                        *\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "*****************************************************************************\n"\r
-    ));\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    (sizeof(UINTN) == sizeof(UINT64)) ?\r
-    "DMAR address ............................................. 0x%016lx\n" :\r
-    "DMAR address ............................................. 0x%08x\n",\r
-    Dmar\r
-    ));\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "  Table Contents:\n"\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Host Address Width ................................... 0x%02x\n",\r
-    Dmar->HostAddressWidth\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "    Flags ................................................ 0x%02x\n",\r
-    Dmar->Flags\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      INTR_REMAP ......................................... 0x%02x\n",\r
-    Dmar->Flags & EFI_ACPI_DMAR_FLAGS_INTR_REMAP\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      X2APIC_OPT_OUT_SET ................................. 0x%02x\n",\r
-    Dmar->Flags & EFI_ACPI_DMAR_FLAGS_X2APIC_OPT_OUT\r
-    ));\r
-  DEBUG ((DEBUG_INFO,\r
-    "      DMA_CTRL_PLATFORM_OPT_IN_FLAG ...................... 0x%02x\n",\r
-    Dmar->Flags & EFI_ACPI_DMAR_FLAGS_DMA_CTRL_PLATFORM_OPT_IN_FLAG\r
-    ));\r
-\r
-  DmarLen  = Dmar->Header.Length - sizeof(EFI_ACPI_DMAR_HEADER);\r
-  DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)(Dmar + 1);\r
-  while (DmarLen > 0) {\r
-    switch (DmarHeader->Type) {\r
-    case EFI_ACPI_DMAR_TYPE_DRHD:\r
-      DumpDmarDrhd ((EFI_ACPI_DMAR_DRHD_HEADER *)DmarHeader);\r
-      break;\r
-    case EFI_ACPI_DMAR_TYPE_RMRR:\r
-      DumpDmarRmrr ((EFI_ACPI_DMAR_RMRR_HEADER *)DmarHeader);\r
-      break;\r
-    default:\r
-      break;\r
-    }\r
-    DmarLen -= DmarHeader->Length;\r
-    DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)DmarHeader + DmarHeader->Length);\r
-  }\r
-\r
-  DEBUG ((DEBUG_INFO,\r
-    "*****************************************************************************\n\n"\r
-    ));\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Get VTd engine number.\r
-\r
-  @param[in]  AcpiDmarTable  DMAR ACPI table\r
-\r
-  @return the VTd engine number.\r
-**/\r
-UINTN\r
-GetVtdEngineNumber (\r
-  IN EFI_ACPI_DMAR_HEADER                    *AcpiDmarTable\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_STRUCTURE_HEADER                    *DmarHeader;\r
-  UINTN                                             VtdIndex;\r
-\r
-  VtdIndex = 0;\r
-  DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)(AcpiDmarTable + 1));\r
-  while ((UINTN)DmarHeader < (UINTN)AcpiDmarTable + AcpiDmarTable->Header.Length) {\r
-    switch (DmarHeader->Type) {\r
-    case EFI_ACPI_DMAR_TYPE_DRHD:\r
-      VtdIndex++;\r
-      break;\r
-    default:\r
-      break;\r
-    }\r
-    DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)DmarHeader + DmarHeader->Length);\r
-  }\r
-  return VtdIndex ;\r
-}\r
-\r
-/**\r
-  Process DMAR DHRD table.\r
-\r
-  @param[in]  VTdInfo   The VTd engine context information.\r
-  @param[in]  VtdIndex  The index of VTd engine.\r
-  @param[in]  DmarDrhd  The DRHD table.\r
-**/\r
-VOID\r
-ProcessDhrd (\r
-  IN VTD_INFO                   *VTdInfo,\r
-  IN UINTN                      VtdIndex,\r
-  IN EFI_ACPI_DMAR_DRHD_HEADER  *DmarDrhd\r
-  )\r
-{\r
-  DEBUG ((DEBUG_INFO,"  VTD (%d) BaseAddress -  0x%016lx\n", VtdIndex, DmarDrhd->RegisterBaseAddress));\r
-  VTdInfo->VTdEngineAddress[VtdIndex] = DmarDrhd->RegisterBaseAddress;\r
-}\r
-\r
-/**\r
-  Parse DMAR DRHD table.\r
-\r
-  @param[in]  AcpiDmarTable  DMAR ACPI table\r
-\r
-  @return EFI_SUCCESS  The DMAR DRHD table is parsed.\r
-**/\r
-EFI_STATUS\r
-ParseDmarAcpiTableDrhd (\r
-  IN EFI_ACPI_DMAR_HEADER                    *AcpiDmarTable\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_STRUCTURE_HEADER                    *DmarHeader;\r
-  UINTN                                             VtdUnitNumber;\r
-  UINTN                                             VtdIndex;\r
-  VTD_INFO                                          *VTdInfo;\r
-\r
-  VtdUnitNumber = GetVtdEngineNumber (AcpiDmarTable);\r
-  if (VtdUnitNumber == 0) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  VTdInfo = BuildGuidHob (&mVTdInfoGuid, sizeof(VTD_INFO) + (VtdUnitNumber - 1) * sizeof(UINT64));\r
-  ASSERT(VTdInfo != NULL);\r
-  if (VTdInfo == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  //\r
-  // Initialize the engine mask to all.\r
-  //\r
-  VTdInfo->AcpiDmarTable    = AcpiDmarTable;\r
-  VTdInfo->EngineMask       = LShiftU64 (1, VtdUnitNumber) - 1;\r
-  VTdInfo->HostAddressWidth = AcpiDmarTable->HostAddressWidth;\r
-  VTdInfo->VTdEngineCount   = VtdUnitNumber;\r
-\r
-  VtdIndex = 0;\r
-  DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)(AcpiDmarTable + 1));\r
-  while ((UINTN)DmarHeader < (UINTN)AcpiDmarTable + AcpiDmarTable->Header.Length) {\r
-    switch (DmarHeader->Type) {\r
-    case EFI_ACPI_DMAR_TYPE_DRHD:\r
-      ASSERT (VtdIndex < VtdUnitNumber);\r
-      ProcessDhrd (VTdInfo, VtdIndex, (EFI_ACPI_DMAR_DRHD_HEADER *)DmarHeader);\r
-      VtdIndex++;\r
-\r
-      break;\r
-\r
-    default:\r
-      break;\r
-    }\r
-    DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)DmarHeader + DmarHeader->Length);\r
-  }\r
-  ASSERT (VtdIndex == VtdUnitNumber);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Return the VTd engine index according to the Segment and DevScopeEntry.\r
-\r
-  @param AcpiDmarTable   DMAR ACPI table\r
-  @param Segment         The segment of the VTd engine\r
-  @param DevScopeEntry   The DevScopeEntry of the VTd engine\r
-\r
-  @return The VTd engine index according to the Segment and DevScopeEntry.\r
-  @retval -1  The VTd engine is not found.\r
-**/\r
-UINTN\r
-GetVTdEngineFromDevScopeEntry (\r
-  IN  EFI_ACPI_DMAR_HEADER                        *AcpiDmarTable,\r
-  IN  UINT16                                      Segment,\r
-  IN  EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *DevScopeEntry\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_STRUCTURE_HEADER                    *DmarHeader;\r
-  UINTN                                             VtdIndex;\r
-  EFI_ACPI_DMAR_DRHD_HEADER                         *DmarDrhd;\r
-  EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER       *ThisDevScopeEntry;\r
-\r
-  VtdIndex = 0;\r
-  DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)(AcpiDmarTable + 1));\r
-  while ((UINTN)DmarHeader < (UINTN)AcpiDmarTable + AcpiDmarTable->Header.Length) {\r
-    switch (DmarHeader->Type) {\r
-    case EFI_ACPI_DMAR_TYPE_DRHD:\r
-      DmarDrhd = (EFI_ACPI_DMAR_DRHD_HEADER *)DmarHeader;\r
-      if (DmarDrhd->SegmentNumber != Segment) {\r
-        // Mismatch\r
-        break;\r
-      }\r
-      if ((DmarDrhd->Header.Length == sizeof(EFI_ACPI_DMAR_DRHD_HEADER)) ||\r
-          ((DmarDrhd->Flags & EFI_ACPI_DMAR_DRHD_FLAGS_INCLUDE_PCI_ALL) != 0)) {\r
-        // No DevScopeEntry\r
-        // Do not handle PCI_ALL\r
-        break;\r
-      }\r
-      ThisDevScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)(DmarDrhd + 1));\r
-      while ((UINTN)ThisDevScopeEntry < (UINTN)DmarDrhd + DmarDrhd->Header.Length) {\r
-        if ((ThisDevScopeEntry->Length == DevScopeEntry->Length) &&\r
-            (CompareMem (ThisDevScopeEntry, DevScopeEntry, DevScopeEntry->Length) == 0)) {\r
-          return VtdIndex;\r
-        }\r
-        ThisDevScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)ThisDevScopeEntry + ThisDevScopeEntry->Length);\r
-      }\r
-      break;\r
-    default:\r
-      break;\r
-    }\r
-    DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)DmarHeader + DmarHeader->Length);\r
-  }\r
-  return (UINTN)-1;\r
-}\r
-\r
-/**\r
-  Process DMAR RMRR table.\r
-\r
-  @param[in]  VTdInfo   The VTd engine context information.\r
-  @param[in]  DmarRmrr  The RMRR table.\r
-**/\r
-VOID\r
-ProcessRmrr (\r
-  IN VTD_INFO                   *VTdInfo,\r
-  IN EFI_ACPI_DMAR_RMRR_HEADER  *DmarRmrr\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER       *DmarDevScopeEntry;\r
-  UINTN                                             VTdIndex;\r
-  UINT64                                            RmrrMask;\r
-  UINTN                                             LowBottom;\r
-  UINTN                                             LowTop;\r
-  UINTN                                             HighBottom;\r
-  UINT64                                            HighTop;\r
-  EFI_ACPI_DMAR_HEADER                              *AcpiDmarTable;\r
-\r
-  AcpiDmarTable = VTdInfo->AcpiDmarTable;\r
-\r
-  DEBUG ((DEBUG_INFO,"  RMRR (Base 0x%016lx, Limit 0x%016lx)\n", DmarRmrr->ReservedMemoryRegionBaseAddress, DmarRmrr->ReservedMemoryRegionLimitAddress));\r
-\r
-  if ((DmarRmrr->ReservedMemoryRegionBaseAddress == 0) ||\r
-      (DmarRmrr->ReservedMemoryRegionLimitAddress == 0)) {\r
-    return ;\r
-  }\r
-\r
-  DmarDevScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)(DmarRmrr + 1));\r
-  while ((UINTN)DmarDevScopeEntry < (UINTN)DmarRmrr + DmarRmrr->Header.Length) {\r
-    ASSERT (DmarDevScopeEntry->Type == EFI_ACPI_DEVICE_SCOPE_ENTRY_TYPE_PCI_ENDPOINT);\r
-\r
-    VTdIndex = GetVTdEngineFromDevScopeEntry (AcpiDmarTable, DmarRmrr->SegmentNumber, DmarDevScopeEntry);\r
-    if (VTdIndex != (UINTN)-1) {\r
-      RmrrMask = LShiftU64 (1, VTdIndex);\r
-\r
-      LowBottom = 0;\r
-      LowTop = (UINTN)DmarRmrr->ReservedMemoryRegionBaseAddress;\r
-      HighBottom = (UINTN)DmarRmrr->ReservedMemoryRegionLimitAddress + 1;\r
-      HighTop = LShiftU64 (1, VTdInfo->HostAddressWidth + 1);\r
-\r
-      SetDmaProtectedRange (\r
-        VTdInfo,\r
-        RmrrMask,\r
-        0,\r
-        (UINT32)(LowTop - LowBottom),\r
-        HighBottom,\r
-        HighTop - HighBottom\r
-        );\r
-\r
-      //\r
-      // Remove the engine from the engine mask.\r
-      // The assumption is that any other PEI driver does not access\r
-      // the device covered by this engine.\r
-      //\r
-      VTdInfo->EngineMask = VTdInfo->EngineMask & (~RmrrMask);\r
-    }\r
-\r
-    DmarDevScopeEntry = (EFI_ACPI_DMAR_DEVICE_SCOPE_STRUCTURE_HEADER *)((UINTN)DmarDevScopeEntry + DmarDevScopeEntry->Length);\r
-  }\r
-}\r
-\r
-/**\r
-  Parse DMAR DRHD table.\r
-\r
-  @param[in]  VTdInfo   The VTd engine context information.\r
-**/\r
-VOID\r
-ParseDmarAcpiTableRmrr (\r
-  IN VTD_INFO                    *VTdInfo\r
-  )\r
-{\r
-  EFI_ACPI_DMAR_HEADER                    *AcpiDmarTable;\r
-  EFI_ACPI_DMAR_STRUCTURE_HEADER          *DmarHeader;\r
-\r
-  AcpiDmarTable = VTdInfo->AcpiDmarTable;\r
-\r
-  DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)(AcpiDmarTable + 1));\r
-  while ((UINTN)DmarHeader < (UINTN)AcpiDmarTable + AcpiDmarTable->Header.Length) {\r
-    switch (DmarHeader->Type) {\r
-    case EFI_ACPI_DMAR_TYPE_RMRR:\r
-      ProcessRmrr (VTdInfo, (EFI_ACPI_DMAR_RMRR_HEADER *)DmarHeader);\r
-      break;\r
-    default:\r
-      break;\r
-    }\r
-    DmarHeader = (EFI_ACPI_DMAR_STRUCTURE_HEADER *)((UINTN)DmarHeader + DmarHeader->Length);\r
-  }\r
-}\r