[edk2] [PATCH 2/3] MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone

Star Zeng posted 3 patches 6 years, 8 months ago
[edk2] [PATCH 2/3] MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone
Posted by Star Zeng 6 years, 8 months ago
Cc: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng <star.zeng@intel.com>
---
 MdeModulePkg/Core/PiSmmCore/PiSmmCore.c   | 62 ++++++++++++++++++++++++++++++-
 MdeModulePkg/Core/PiSmmCore/PiSmmCore.h   | 26 ++++++++++++-
 MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf |  3 +-
 3 files changed, 88 insertions(+), 3 deletions(-)

diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
index d2f0207b5c83..686b9b45a556 100644
--- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
+++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
@@ -1,7 +1,7 @@
 /** @file
   SMM Core Main Entry Point
 
-  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials are licensed and made available 
   under the terms and conditions of the BSD License which accompanies this 
   distribution.  The full text of the license may be found at        
@@ -87,6 +87,7 @@ SMM_CORE_SMI_HANDLERS  mSmmCoreSmiHandlers[] = {
   { SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid,      NULL, FALSE },
   { SmmReadyToBootHandler,      &gEfiEventReadyToBootGuid,           NULL, FALSE },
   { SmmEndOfDxeHandler,         &gEfiEndOfDxeEventGroupGuid,         NULL, TRUE },
+  { SmmS3SmmInitDoneHandler,    &gEdkiiS3SmmInitDoneGuid,            NULL, FALSE },
   { SmmEndOfS3ResumeHandler,    &gEdkiiEndOfS3ResumeGuid,            NULL, FALSE },
   { NULL,                       NULL,                                NULL, FALSE }
 };
@@ -472,6 +473,65 @@ SmmEndOfDxeHandler (
 }
 
 /**
+  Software SMI handler that is called when the S3SmmInitDone signal is triggered.
+  This function installs the SMM S3SmmInitDone Protocol so SMM Drivers are informed that
+  S3 SMM initialization has been done.
+
+  @param  DispatchHandle  The unique handle assigned to this handler by SmiHandlerRegister().
+  @param  Context         Points to an optional handler context which was specified when the handler was registered.
+  @param  CommBuffer      A pointer to a collection of data in memory that will
+                          be conveyed from a non-SMM environment into an SMM environment.
+  @param  CommBufferSize  The size of the CommBuffer.
+
+  @return Status Code
+
+**/
+EFI_STATUS
+EFIAPI
+SmmS3SmmInitDoneHandler (
+  IN     EFI_HANDLE  DispatchHandle,
+  IN     CONST VOID  *Context,        OPTIONAL
+  IN OUT VOID        *CommBuffer,     OPTIONAL
+  IN OUT UINTN       *CommBufferSize  OPTIONAL
+  )
+{
+  EFI_STATUS  Status;
+  EFI_HANDLE  SmmHandle;
+
+  DEBUG ((DEBUG_INFO, "SmmS3SmmInitDoneHandler\n"));
+
+  if (!mDuringS3Resume) {
+    DEBUG ((DEBUG_ERROR, "It is not during S3 resume\n"));
+    return EFI_SUCCESS;
+  }
+
+  //
+  // Install SMM S3SmmInitDone protocol
+  //
+  SmmHandle = NULL;
+  Status = SmmInstallProtocolInterface (
+             &SmmHandle,
+             &gEdkiiS3SmmInitDoneGuid,
+             EFI_NATIVE_INTERFACE,
+             NULL
+             );
+  ASSERT_EFI_ERROR (Status);
+
+  //
+  // Uninstall the protocol here because the comsumer just hook the
+  // installation event.
+  //
+  Status = SmmUninstallProtocolInterface (
+           SmmHandle,
+           &gEdkiiS3SmmInitDoneGuid,
+           NULL
+           );
+  ASSERT_EFI_ERROR (Status);
+
+  return Status;
+}
+
+/**
   Software SMI handler that is called when the EndOfS3Resume signal is triggered.
   This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that
   S3 resume has finished.
diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
index 8c10d833e2ae..2f6032646f46 100644
--- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
+++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
@@ -2,7 +2,7 @@
   The internal header file includes the common header files, defines
   internal structure and functions used by SmmCore module.
 
-  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials are licensed and made available 
   under the terms and conditions of the BSD License which accompanies this 
   distribution.  The full text of the license may be found at        
@@ -42,6 +42,7 @@
 #include <Guid/LoadModuleAtFixedAddress.h>
 #include <Guid/SmiHandlerProfile.h>
 #include <Guid/EndOfS3Resume.h>
+#include <Guid/S3SmmInitDone.h>
 
 #include <Library/BaseLib.h>
 #include <Library/BaseMemoryLib.h>
@@ -811,6 +812,29 @@ SmmReadyToBootHandler (
   );
 
 /**
+  Software SMI handler that is called when the S3SmmInitDone signal is triggered.
+  This function installs the SMM S3SmmInitDone Protocol so SMM Drivers are informed that
+  S3 SMM initialization has been done.
+
+  @param  DispatchHandle  The unique handle assigned to this handler by SmiHandlerRegister().
+  @param  Context         Points to an optional handler context which was specified when the handler was registered.
+  @param  CommBuffer      A pointer to a collection of data in memory that will
+                          be conveyed from a non-SMM environment into an SMM environment.
+  @param  CommBufferSize  The size of the CommBuffer.
+
+  @return Status Code
+
+**/
+EFI_STATUS
+EFIAPI
+SmmS3SmmInitDoneHandler (
+  IN     EFI_HANDLE  DispatchHandle,
+  IN     CONST VOID  *Context,        OPTIONAL
+  IN OUT VOID        *CommBuffer,     OPTIONAL
+  IN OUT UINTN       *CommBufferSize  OPTIONAL
+  );
+
+/**
   Software SMI handler that is called when the EndOfS3Resume event is trigged.
   This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that
   S3 resume has finished.
diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
index 5c04e851f94b..09cffb879e6f 100644
--- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
+++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
@@ -1,7 +1,7 @@
 ## @file
 # This module provide an SMM CIS compliant implementation of SMM Core.
 #
-# Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD License
@@ -124,6 +124,7 @@ [Guids]
   ## SOMETIMES_PRODUCES   ## GUID # SmiHandlerRegister
   gSmiHandlerProfileGuid
   gEdkiiEndOfS3ResumeGuid ## SOMETIMES_PRODUCES ## GUID # Install protocol
+  gEdkiiS3SmmInitDoneGuid ## SOMETIMES_PRODUCES ## GUID # Install protocol
 
 [UserExtensions.TianoCore."ExtraFiles"]
   PiSmmCoreExtra.uni
-- 
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH 2/3] MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone
Posted by Yao, Jiewen 6 years, 8 months ago
Reviewed-by: Jiewen.yao@intel.com

> -----Original Message-----
> From: Zeng, Star
> Sent: Friday, March 2, 2018 1:16 PM
> To: edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
> Subject: [PATCH 2/3] MdeModulePkg PiSmmCore: Register SMI handler to install
> S3SmmInitDone
> 
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Star Zeng <star.zeng@intel.com>
> ---
>  MdeModulePkg/Core/PiSmmCore/PiSmmCore.c   | 62
> ++++++++++++++++++++++++++++++-
>  MdeModulePkg/Core/PiSmmCore/PiSmmCore.h   | 26 ++++++++++++-
>  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf |  3 +-
>  3 files changed, 88 insertions(+), 3 deletions(-)
> 
> diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
> b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
> index d2f0207b5c83..686b9b45a556 100644
> --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
> +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SMM Core Main Entry Point
> 
> -  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>    This program and the accompanying materials are licensed and made
> available
>    under the terms and conditions of the BSD License which accompanies this
>    distribution.  The full text of the license may be found at
> @@ -87,6 +87,7 @@ SMM_CORE_SMI_HANDLERS  mSmmCoreSmiHandlers[]
> = {
>    { SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid,      NULL,
> FALSE },
>    { SmmReadyToBootHandler,      &gEfiEventReadyToBootGuid,
> NULL, FALSE },
>    { SmmEndOfDxeHandler,         &gEfiEndOfDxeEventGroupGuid,
> NULL, TRUE },
> +  { SmmS3SmmInitDoneHandler,    &gEdkiiS3SmmInitDoneGuid,
> NULL, FALSE },
>    { SmmEndOfS3ResumeHandler,    &gEdkiiEndOfS3ResumeGuid,
> NULL, FALSE },
>    { NULL,                       NULL,
> NULL, FALSE }
>  };
> @@ -472,6 +473,65 @@ SmmEndOfDxeHandler (
>  }
> 
>  /**
> +  Software SMI handler that is called when the S3SmmInitDone signal is
> triggered.
> +  This function installs the SMM S3SmmInitDone Protocol so SMM Drivers are
> informed that
> +  S3 SMM initialization has been done.
> +
> +  @param  DispatchHandle  The unique handle assigned to this handler by
> SmiHandlerRegister().
> +  @param  Context         Points to an optional handler context which
> was specified when the handler was registered.
> +  @param  CommBuffer      A pointer to a collection of data in memory
> that will
> +                          be conveyed from a non-SMM environment into
> an SMM environment.
> +  @param  CommBufferSize  The size of the CommBuffer.
> +
> +  @return Status Code
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +SmmS3SmmInitDoneHandler (
> +  IN     EFI_HANDLE  DispatchHandle,
> +  IN     CONST VOID  *Context,        OPTIONAL
> +  IN OUT VOID        *CommBuffer,     OPTIONAL
> +  IN OUT UINTN       *CommBufferSize  OPTIONAL
> +  )
> +{
> +  EFI_STATUS  Status;
> +  EFI_HANDLE  SmmHandle;
> +
> +  DEBUG ((DEBUG_INFO, "SmmS3SmmInitDoneHandler\n"));
> +
> +  if (!mDuringS3Resume) {
> +    DEBUG ((DEBUG_ERROR, "It is not during S3 resume\n"));
> +    return EFI_SUCCESS;
> +  }
> +
> +  //
> +  // Install SMM S3SmmInitDone protocol
> +  //
> +  SmmHandle = NULL;
> +  Status = SmmInstallProtocolInterface (
> +             &SmmHandle,
> +             &gEdkiiS3SmmInitDoneGuid,
> +             EFI_NATIVE_INTERFACE,
> +             NULL
> +             );
> +  ASSERT_EFI_ERROR (Status);
> +
> +  //
> +  // Uninstall the protocol here because the comsumer just hook the
> +  // installation event.
> +  //
> +  Status = SmmUninstallProtocolInterface (
> +           SmmHandle,
> +           &gEdkiiS3SmmInitDoneGuid,
> +           NULL
> +           );
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +/**
>    Software SMI handler that is called when the EndOfS3Resume signal is
> triggered.
>    This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are
> informed that
>    S3 resume has finished.
> diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
> b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
> index 8c10d833e2ae..2f6032646f46 100644
> --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
> +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h
> @@ -2,7 +2,7 @@
>    The internal header file includes the common header files, defines
>    internal structure and functions used by SmmCore module.
> 
> -  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>    This program and the accompanying materials are licensed and made
> available
>    under the terms and conditions of the BSD License which accompanies this
>    distribution.  The full text of the license may be found at
> @@ -42,6 +42,7 @@
>  #include <Guid/LoadModuleAtFixedAddress.h>
>  #include <Guid/SmiHandlerProfile.h>
>  #include <Guid/EndOfS3Resume.h>
> +#include <Guid/S3SmmInitDone.h>
> 
>  #include <Library/BaseLib.h>
>  #include <Library/BaseMemoryLib.h>
> @@ -811,6 +812,29 @@ SmmReadyToBootHandler (
>    );
> 
>  /**
> +  Software SMI handler that is called when the S3SmmInitDone signal is
> triggered.
> +  This function installs the SMM S3SmmInitDone Protocol so SMM Drivers are
> informed that
> +  S3 SMM initialization has been done.
> +
> +  @param  DispatchHandle  The unique handle assigned to this handler by
> SmiHandlerRegister().
> +  @param  Context         Points to an optional handler context which
> was specified when the handler was registered.
> +  @param  CommBuffer      A pointer to a collection of data in memory
> that will
> +                          be conveyed from a non-SMM environment into
> an SMM environment.
> +  @param  CommBufferSize  The size of the CommBuffer.
> +
> +  @return Status Code
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +SmmS3SmmInitDoneHandler (
> +  IN     EFI_HANDLE  DispatchHandle,
> +  IN     CONST VOID  *Context,        OPTIONAL
> +  IN OUT VOID        *CommBuffer,     OPTIONAL
> +  IN OUT UINTN       *CommBufferSize  OPTIONAL
> +  );
> +
> +/**
>    Software SMI handler that is called when the EndOfS3Resume event is
> trigged.
>    This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are
> informed that
>    S3 resume has finished.
> diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
> b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
> index 5c04e851f94b..09cffb879e6f 100644
> --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
> +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
> @@ -1,7 +1,7 @@
>  ## @file
>  # This module provide an SMM CIS compliant implementation of SMM Core.
>  #
> -# Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>  #
>  # This program and the accompanying materials
>  # are licensed and made available under the terms and conditions of the BSD
> License
> @@ -124,6 +124,7 @@ [Guids]
>    ## SOMETIMES_PRODUCES   ## GUID # SmiHandlerRegister
>    gSmiHandlerProfileGuid
>    gEdkiiEndOfS3ResumeGuid ## SOMETIMES_PRODUCES ## GUID # Install
> protocol
> +  gEdkiiS3SmmInitDoneGuid ## SOMETIMES_PRODUCES ## GUID # Install
> protocol
> 
>  [UserExtensions.TianoCore."ExtraFiles"]
>    PiSmmCoreExtra.uni
> --
> 2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel