+/**\r
+ Disable PMR in all VTd engine.\r
+**/\r
+VOID\r
+DisablePmr (\r
+ VOID\r
+ )\r
+{\r
+ UINT32 Reg32;\r
+ VTD_CAP_REG CapReg;\r
+ UINTN Index;\r
+\r
+ DEBUG ((DEBUG_INFO,"DisablePmr\n"));\r
+ for (Index = 0; Index < mVtdUnitNumber; Index++) {\r
+ CapReg.Uint64 = MmioRead64 (mVtdUnitInformation[Index].VtdUnitBaseAddress + R_CAP_REG);\r
+ if (CapReg.Bits.PLMR == 0 || CapReg.Bits.PHMR == 0) {\r
+ continue ;\r
+ }\r
+\r
+ Reg32 = MmioRead32 (mVtdUnitInformation[Index].VtdUnitBaseAddress + R_PMEN_ENABLE_REG);\r
+ if ((Reg32 & BIT0) != 0) {\r
+ MmioWrite32 (mVtdUnitInformation[Index].VtdUnitBaseAddress + R_PMEN_ENABLE_REG, 0x0);\r
+ do {\r
+ Reg32 = MmioRead32 (mVtdUnitInformation[Index].VtdUnitBaseAddress + R_PMEN_ENABLE_REG);\r
+ } while((Reg32 & BIT0) != 0);\r
+ DEBUG ((DEBUG_INFO,"Pmr(%d) disabled\n", Index));\r
+ } else {\r
+ DEBUG ((DEBUG_INFO,"Pmr(%d) not enabled\n", Index));\r
+ }\r
+ }\r
+ return ;\r
+}\r
+\r