/** @file\r
\r
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
IN VOID *Context\r
)\r
{\r
+ UINTN VtdIndex;\r
+\r
DEBUG ((DEBUG_INFO, "Vtd OnExitBootServices\n"));\r
DumpVtdRegsAll ();\r
\r
+ DEBUG ((DEBUG_INFO, "Invalidate all\n"));\r
+ for (VtdIndex = 0; VtdIndex < mVtdUnitNumber; VtdIndex++) {\r
+ FlushWriteBuffer (VtdIndex);\r
+\r
+ InvalidateContextCache (VtdIndex);\r
+\r
+ InvalidateIOTLB (VtdIndex);\r
+ }\r
+\r
if ((PcdGet8(PcdVTdPolicyPropertyMask) & BIT1) == 0) {\r
DisableDmar ();\r
DumpVtdRegsAll ();\r
/** @file\r
\r
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
VOID\r
);\r
\r
+/**\r
+ Flush VTd engine write buffer.\r
+\r
+ @param[in] VtdIndex The index used to identify a VTd engine.\r
+**/\r
+VOID\r
+FlushWriteBuffer (\r
+ IN UINTN VtdIndex\r
+ );\r
+\r
+/**\r
+ Invalidate VTd context cache.\r
+\r
+ @param[in] VtdIndex The index used to identify a VTd engine.\r
+**/\r
+EFI_STATUS\r
+InvalidateContextCache (\r
+ IN UINTN VtdIndex\r
+ );\r
+\r
+/**\r
+ Invalidate VTd IOTLB.\r
+\r
+ @param[in] VtdIndex The index used to identify a VTd engine.\r
+**/\r
+EFI_STATUS\r
+InvalidateIOTLB (\r
+ IN UINTN VtdIndex\r
+ );\r
+\r
/**\r
Invalid VTd global IOTLB.\r
\r