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
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
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
ExtContextEntry->Bits.AddressWidth = 0x2;\r
break;\r
}\r
+ FlushPageTableMemory (VtdIndex, (UINTN)ExtContextEntry, sizeof(*ExtContextEntry));\r
}\r
\r
return EFI_SUCCESS;\r