//\r
UINT16 mQ35TsegMbytes;\r
\r
+//\r
+// The value of PcdQ35SmramAtDefaultSmbase is saved into this variable at\r
+// module startup.\r
+//\r
+STATIC BOOLEAN mQ35SmramAtDefaultSmbase;\r
+\r
/**\r
Save PcdQ35TsegMbytes into mQ35TsegMbytes.\r
**/\r
mQ35TsegMbytes = PcdGet16 (PcdQ35TsegMbytes);\r
}\r
\r
+/**\r
+ Save PcdQ35SmramAtDefaultSmbase into mQ35SmramAtDefaultSmbase.\r
+**/\r
+VOID\r
+InitQ35SmramAtDefaultSmbase (\r
+ VOID\r
+ )\r
+{\r
+ mQ35SmramAtDefaultSmbase = PcdGetBool (PcdQ35SmramAtDefaultSmbase);\r
+}\r
+\r
/**\r
Read the MCH_SMRAM and ESMRAMC registers, and update the LockState and\r
OpenState fields in the PEI_SMM_ACCESS_PPI / EFI_SMM_ACCESS2_PROTOCOL object,\r
PciOr8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC), MCH_ESMRAMC_T_EN);\r
PciOr8 (DRAMC_REGISTER_Q35 (MCH_SMRAM), MCH_SMRAM_D_LCK);\r
\r
+ //\r
+ // Close & lock the SMRAM at the default SMBASE, if it exists.\r
+ //\r
+ if (mQ35SmramAtDefaultSmbase) {\r
+ PciWrite8 (DRAMC_REGISTER_Q35 (MCH_DEFAULT_SMBASE_CTL),\r
+ MCH_DEFAULT_SMBASE_LCK);\r
+ }\r
+\r
GetStates (LockState, OpenState);\r
if (*OpenState || !*LockState) {\r
return EFI_DEVICE_ERROR;\r