Reviewed-by: Hao Wu <hao.a...@intel.com> Best Regards, Hao Wu
> -----Original Message----- > From: Zeng, Star > Sent: Monday, January 14, 2019 11:20 PM > To: edk2-devel@lists.01.org > Cc: Zeng, Star; Wang, Jian J; Wu, Hao A > Subject: [PATCH V2 04/15] 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.w...@intel.com> > Cc: Hao Wu <hao.a...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng <star.z...@intel.com> > --- > .../Universal/Variable/RuntimeDxe/VariableDxe.c | 55 ++++++++++++++-- > ------ > .../Universal/Variable/RuntimeDxe/VariableSmm.c | 43 ++++++++++++---- > - > 2 files changed, 66 insertions(+), 32 deletions(-) > > diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > index baba6729c1c2..5131e6f351e4 100644 > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > @@ -346,6 +346,40 @@ OnEndOfDxe ( > } > > /** > + 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. > > Non-Volatile variable write may needs FTW protocol to reclaim when > @@ -428,27 +462,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. > diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c > index 018587ed7373..e63af812534e 100644 > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c > @@ -846,6 +846,34 @@ SmmEndOfDxeCallback ( > } > > /** > + 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 > + // > + Status = gBS->InstallProtocolInterface ( > + &mSmmVariableHandle, > + &gSmmVariableWriteGuid, > + EFI_NATIVE_INTERFACE, > + NULL > + ); > + ASSERT_EFI_ERROR (Status); > +} > + > +/** > SMM Fault Tolerant Write protocol notification event handler. > > Non-Volatile variable write may needs FTW protocol to reclaim when > @@ -909,21 +937,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. > // > - Status = gBS->InstallProtocolInterface ( > - &mSmmVariableHandle, > - &gSmmVariableWriteGuid, > - EFI_NATIVE_INTERFACE, > - NULL > - ); > - ASSERT_EFI_ERROR (Status); > + VariableWriteServiceInitializeSmm (); > > return EFI_SUCCESS; > } > -- > 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel