]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelSiliconPkg/IntelVTdDxe/TranslationTableEx.c
IntelSiliconPkg/IntelVTd: update PlatformVtdPolicy
[mirror_edk2.git] / IntelSiliconPkg / IntelVTdDxe / TranslationTableEx.c
index 65ed16ed7b8ea2969dfd1a3ef785c9d8c17d6146..68b25a79bf390c9ee2d2e7b55a7bec6e43756298 100644 (file)
@@ -33,16 +33,16 @@ CreateExtContextEntry (
   VTD_EXT_ROOT_ENTRY     *ExtRootEntry;\r
   VTD_EXT_CONTEXT_ENTRY  *ExtContextEntryTable;\r
   VTD_EXT_CONTEXT_ENTRY  *ExtContextEntry;\r
-  VTD_SOURCE_ID          *PciDescriptor;\r
+  VTD_SOURCE_ID          *PciSourceId;\r
   VTD_SOURCE_ID          SourceId;\r
   UINTN                  MaxBusNumber;\r
   UINTN                  EntryTablePages;\r
 \r
   MaxBusNumber = 0;\r
-  for (Index = 0; Index < mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDescriptorNumber; Index++) {\r
-    PciDescriptor = &mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDescriptors[Index];\r
-    if (PciDescriptor->Bits.Bus > MaxBusNumber) {\r
-      MaxBusNumber = PciDescriptor->Bits.Bus;\r
+  for (Index = 0; Index < mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDeviceDataNumber; Index++) {\r
+    PciSourceId = &mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDeviceData[Index].PciSourceId;\r
+    if (PciSourceId->Bits.Bus > MaxBusNumber) {\r
+      MaxBusNumber = PciSourceId->Bits.Bus;\r
     }\r
   }\r
   DEBUG ((DEBUG_INFO,"  MaxBusNumber - 0x%x\n", MaxBusNumber));\r
@@ -58,12 +58,12 @@ CreateExtContextEntry (
   mVtdUnitInformation[VtdIndex].ExtRootEntryTable = (VTD_EXT_ROOT_ENTRY *)Buffer;\r
   Buffer = (UINT8 *)Buffer + EFI_PAGES_TO_SIZE (RootPages);\r
 \r
-  for (Index = 0; Index < mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDescriptorNumber; Index++) {\r
-    PciDescriptor = &mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDescriptors[Index];\r
+  for (Index = 0; Index < mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDeviceDataNumber; Index++) {\r
+    PciSourceId = &mVtdUnitInformation[VtdIndex].PciDeviceInfo.PciDeviceData[Index].PciSourceId;\r
 \r
-    SourceId.Bits.Bus = PciDescriptor->Bits.Bus;\r
-    SourceId.Bits.Device = PciDescriptor->Bits.Device;\r
-    SourceId.Bits.Function = PciDescriptor->Bits.Function;\r
+    SourceId.Bits.Bus = PciSourceId->Bits.Bus;\r
+    SourceId.Bits.Device = PciSourceId->Bits.Device;\r
+    SourceId.Bits.Function = PciSourceId->Bits.Function;\r
 \r
     ExtRootEntry = &mVtdUnitInformation[VtdIndex].ExtRootEntryTable[SourceId.Index.RootIndex];\r
     if (ExtRootEntry->Bits.LowerPresent == 0) {\r
@@ -73,6 +73,7 @@ CreateExtContextEntry (
       ExtRootEntry->Bits.UpperContextTablePointerLo  = (UINT32) RShiftU64 ((UINT64)(UINTN)Buffer, 12) + 1;\r
       ExtRootEntry->Bits.UpperContextTablePointerHi  = (UINT32) RShiftU64 (RShiftU64 ((UINT64)(UINTN)Buffer, 12) + 1, 20);\r
       ExtRootEntry->Bits.UpperPresent = 1;\r
+      FlushPageTableMemory (VtdIndex, (UINTN)ExtRootEntry, sizeof(*ExtRootEntry));\r
       Buffer = (UINT8 *)Buffer + EFI_PAGES_TO_SIZE (ContextPages);\r
     }\r
 \r
@@ -92,6 +93,7 @@ CreateExtContextEntry (
       ExtContextEntry->Bits.AddressWidth = 0x2;\r
       break;\r
     }\r
+    FlushPageTableMemory (VtdIndex, (UINTN)ExtContextEntry, sizeof(*ExtContextEntry));\r
   }\r
 \r
   return EFI_SUCCESS;\r