MdeModulePkg Variable: Abstract VariableWriteServiceInitializeDxe/Smm

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1323
Merge EmuVariable and Real variable driver.

Abstract VariableWriteServiceInitializeDxe/Smm from
FtwNotificationEvent/SmmFtwNotificationEvent, then
VariableWriteServiceInitializeDxe/Smm could be not aware
the NV storage is real or emulated.

This patch prepares for adding emulated variable NV mode
support in VariableRuntimeDxe.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao Wu <hao.a.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
Tested-by: Julien Grall <julien.grall@arm.com>
Acked-by: Julien Grall <julien.grall@arm.com>
This commit is contained in:
Star Zeng 2019-01-12 16:03:36 +08:00
parent 904e0ca997
commit b59fd889ac
2 changed files with 60 additions and 26 deletions

View File

@ -341,6 +341,40 @@ OnEndOfDxe (
gBS->CloseEvent (Event);
}
/**
Initializes variable write service for DXE.
**/
VOID
VariableWriteServiceInitializeDxe (
VOID
)
{
EFI_STATUS Status;
Status = VariableWriteServiceInitialize ();
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
}
//
// Some Secure Boot Policy Var (SecureBoot, etc) updates following other
// Secure Boot Policy Variable change. Record their initial value.
//
RecordSecureBootPolicyVarData();
//
// Install the Variable Write Architectural protocol.
//
Status = gBS->InstallProtocolInterface (
&mHandle,
&gEfiVariableWriteArchProtocolGuid,
EFI_NATIVE_INTERFACE,
NULL
);
ASSERT_EFI_ERROR (Status);
}
/**
Fault Tolerant Write protocol notification event handler.
@ -423,27 +457,10 @@ FtwNotificationEvent (
}
}
Status = VariableWriteServiceInitialize ();
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
}
//
// Some Secure Boot Policy Var (SecureBoot, etc) updates following other
// Secure Boot Policy Variable change. Record their initial value.
// Initializes variable write service after FTW was ready.
//
RecordSecureBootPolicyVarData();
//
// Install the Variable Write Architectural protocol.
//
Status = gBS->InstallProtocolInterface (
&mHandle,
&gEfiVariableWriteArchProtocolGuid,
EFI_NATIVE_INTERFACE,
NULL
);
ASSERT_EFI_ERROR (Status);
VariableWriteServiceInitializeDxe ();
//
// Close the notify event to avoid install gEfiVariableWriteArchProtocolGuid again.

View File

@ -839,6 +839,28 @@ SmmEndOfDxeCallback (
return EFI_SUCCESS;
}
/**
Initializes variable write service for SMM.
**/
VOID
VariableWriteServiceInitializeSmm (
VOID
)
{
EFI_STATUS Status;
Status = VariableWriteServiceInitialize ();
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
}
//
// Notify the variable wrapper driver the variable write service is ready
//
VariableNotifySmmWriteReady ();
}
/**
SMM Fault Tolerant Write protocol notification event handler.
@ -903,15 +925,10 @@ SmmFtwNotificationEvent (
mVariableModuleGlobal->FvbInstance = FvbProtocol;
Status = VariableWriteServiceInitialize ();
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
}
//
// Notify the variable wrapper driver the variable write service is ready
// Initializes variable write service after FTW was ready.
//
VariableNotifySmmWriteReady ();
VariableWriteServiceInitializeSmm ();
return EFI_SUCCESS;
}