public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Yao, Jiewen" <jiewen.yao@intel.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH 09/10] StandaloneMmPkg/Core: remove legacy boot support
Date: Tue, 5 Mar 2019 13:52:24 +0000	[thread overview]
Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503F54CDCD@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <20190305133248.4828-10-ard.biesheuvel@linaro.org>

Reviewed-by: Jiewen.yao@intel.com

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Ard Biesheuvel
> Sent: Tuesday, March 5, 2019 5:33 AM
> To: edk2-devel@lists.01.org
> Cc: Yao, Jiewen <jiewen.yao@intel.com>
> Subject: [edk2] [PATCH 09/10] StandaloneMmPkg/Core: remove legacy boot
> support
> 
> Remove the support for booting 'legacy' (i.e., non-UEFI boot) OSes.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
>  StandaloneMmPkg/Core/StandaloneMmCore.h |  22 ----
>  StandaloneMmPkg/Core/StandaloneMmCore.c | 124 ++++++--------------
>  2 files changed, 33 insertions(+), 113 deletions(-)
> 
> diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.h
> b/StandaloneMmPkg/Core/StandaloneMmCore.h
> index 74338dc9da0d..5d336b3dbbf6 100644
> --- a/StandaloneMmPkg/Core/StandaloneMmCore.h
> +++ b/StandaloneMmPkg/Core/StandaloneMmCore.h
> @@ -635,28 +635,6 @@ MmDriverDispatchHandler (
> 
>    @return Status Code
> 
> -**/
> -EFI_STATUS
> -EFIAPI
> -MmLegacyBootHandler (
> -  IN     EFI_HANDLE               DispatchHandle,
> -  IN     CONST VOID               *Context,        OPTIONAL
> -  IN OUT VOID                     *CommBuffer,     OPTIONAL
> -  IN OUT UINTN                    *CommBufferSize  OPTIONAL
> -  );
> -
> -/**
> -  This function is the main entry point for an MM handler dispatch
> -  or communicate-based callback.
> -
> -  @param  DispatchHandle  The unique handle assigned to this handler
> by MmiHandlerRegister().
> -  @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-MM environment
> into an MM environment.
> -  @param  CommBufferSize  The size of the CommBuffer.
> -
> -  @return Status Code
> -
>  **/
>  EFI_STATUS
>  EFIAPI
> diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c
> b/StandaloneMmPkg/Core/StandaloneMmCore.c
> index 766cdb5c848c..fb6b3055e9c6 100644
> --- a/StandaloneMmPkg/Core/StandaloneMmCore.c
> +++ b/StandaloneMmPkg/Core/StandaloneMmCore.c
> @@ -87,21 +87,12 @@ EFI_MM_SYSTEM_TABLE  gMmCoreMmst = {
>    MmiHandlerUnRegister
>  };
> 
> -//
> -// Flag to determine if the platform has performed a legacy boot.
> -// If this flag is TRUE, then the runtime code and runtime data associated
> with the
> -// MM IPL are converted to free memory, so the MM Core must guarantee
> that is
> -// does not touch of the code/data associated with the MM IPL if this flag is
> TRUE.
> -//
> -BOOLEAN  mInLegacyBoot = FALSE;
> -
>  //
>  // Table of MMI Handlers that are registered by the MM Core when it is
> initialized
>  //
>  MM_CORE_MMI_HANDLERS  mMmCoreMmiHandlers[] = {
>    { MmReadyToLockHandler,    &gEfiDxeMmReadyToLockProtocolGuid,
> NULL, TRUE  },
>    { MmEndOfDxeHandler,       &gEfiEndOfDxeEventGroupGuid,
> NULL, FALSE },
> -  { MmLegacyBootHandler,     &gEfiEventLegacyBootGuid,
> NULL, FALSE },
>    { MmExitBootServiceHandler,&gEfiEventExitBootServicesGuid,
> NULL, FALSE },
>    { MmReadyToBootHandler,    &gEfiEventReadyToBootGuid,
> NULL, FALSE },
>    { NULL,                    NULL,
> NULL, FALSE },
> @@ -142,47 +133,6 @@ MmEfiNotAvailableYetArg5 (
>    return EFI_NOT_AVAILABLE_YET;
>  }
> 
> -/**
> -  Software MMI handler that is called when a Legacy Boot event is signaled.
> The MM
> -  Core uses this signal to know that a Legacy Boot has been performed and
> that
> -  gMmCorePrivate that is shared between the UEFI and MM execution
> environments can
> -  not be accessed from MM anymore since that structure is considered
> free memory by
> -  a legacy OS.
> -
> -  @param  DispatchHandle  The unique handle assigned to this handler
> by MmiHandlerRegister().
> -  @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-MM environment
> into an MM environment.
> -  @param  CommBufferSize  The size of the CommBuffer.
> -
> -  @return Status Code
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -MmLegacyBootHandler (
> -  IN     EFI_HANDLE  DispatchHandle,
> -  IN     CONST VOID  *Context,        OPTIONAL
> -  IN OUT VOID        *CommBuffer,     OPTIONAL
> -  IN OUT UINTN       *CommBufferSize  OPTIONAL
> -  )
> -{
> -  EFI_HANDLE  MmHandle;
> -  EFI_STATUS  Status = EFI_SUCCESS;
> -
> -  if (!mInLegacyBoot) {
> -    MmHandle = NULL;
> -    Status = MmInstallProtocolInterface (
> -               &MmHandle,
> -               &gEfiEventLegacyBootGuid,
> -               EFI_NATIVE_INTERFACE,
> -               NULL
> -               );
> -  }
> -  mInLegacyBoot = TRUE;
> -  return Status;
> -}
> -
>  /**
>    Software MMI handler that is called when a ExitBoot Service event is
> signaled.
> 
> @@ -396,7 +346,6 @@ MmEntryPoint (
>  {
>    EFI_STATUS                  Status;
>    EFI_MM_COMMUNICATE_HEADER  *CommunicateHeader;
> -  BOOLEAN                     InLegacyBoot;
> 
>    DEBUG ((DEBUG_INFO, "MmEntryPoint ...\n"));
> 
> @@ -413,44 +362,42 @@ MmEntryPoint (
>    //
>    // If a legacy boot has occured, then make sure gMmCorePrivate is not
> accessed
>    //
> -  InLegacyBoot = mInLegacyBoot;
> -  if (!InLegacyBoot) {
> -    //
> -    // TBD: Mark the InMm flag as TRUE
> -    //
> -    gMmCorePrivate->InMm = TRUE;
> 
> +  //
> +  // TBD: Mark the InMm flag as TRUE
> +  //
> +  gMmCorePrivate->InMm = TRUE;
> +
> +  //
> +  // Check to see if this is a Synchronous MMI sent through the MM
> Communication
> +  // Protocol or an Asynchronous MMI
> +  //
> +  if (gMmCorePrivate->CommunicationBuffer != 0) {
>      //
> -    // Check to see if this is a Synchronous MMI sent through the MM
> Communication
> -    // Protocol or an Asynchronous MMI
> +    // Synchronous MMI for MM Core or request from Communicate
> protocol
>      //
> -    if (gMmCorePrivate->CommunicationBuffer != 0) {
> +    if (!MmIsBufferOutsideMmValid
> ((UINTN)gMmCorePrivate->CommunicationBuffer,
> gMmCorePrivate->BufferSize)) {
> +      //
> +      // If CommunicationBuffer is not in valid address scope, return
> EFI_INVALID_PARAMETER
> +      //
> +      gMmCorePrivate->CommunicationBuffer = 0;
> +      gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
> +    } else {
> +      CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER
> *)(UINTN)gMmCorePrivate->CommunicationBuffer;
> +      gMmCorePrivate->BufferSize -= OFFSET_OF
> (EFI_MM_COMMUNICATE_HEADER, Data);
> +      Status = MmiManage (
> +                 &CommunicateHeader->HeaderGuid,
> +                 NULL,
> +                 CommunicateHeader->Data,
> +                 (UINTN *)&gMmCorePrivate->BufferSize
> +                 );
>        //
> -      // Synchronous MMI for MM Core or request from Communicate
> protocol
> +      // Update CommunicationBuffer, BufferSize and ReturnStatus
> +      // Communicate service finished, reset the pointer to CommBuffer
> to NULL
>        //
> -      if (!MmIsBufferOutsideMmValid
> ((UINTN)gMmCorePrivate->CommunicationBuffer,
> gMmCorePrivate->BufferSize)) {
> -        //
> -        // If CommunicationBuffer is not in valid address scope, return
> EFI_INVALID_PARAMETER
> -        //
> -        gMmCorePrivate->CommunicationBuffer = 0;
> -        gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
> -      } else {
> -        CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER
> *)(UINTN)gMmCorePrivate->CommunicationBuffer;
> -        gMmCorePrivate->BufferSize -= OFFSET_OF
> (EFI_MM_COMMUNICATE_HEADER, Data);
> -        Status = MmiManage (
> -                   &CommunicateHeader->HeaderGuid,
> -                   NULL,
> -                   CommunicateHeader->Data,
> -                   (UINTN *)&gMmCorePrivate->BufferSize
> -                   );
> -        //
> -        // Update CommunicationBuffer, BufferSize and ReturnStatus
> -        // Communicate service finished, reset the pointer to
> CommBuffer to NULL
> -        //
> -        gMmCorePrivate->BufferSize += OFFSET_OF
> (EFI_MM_COMMUNICATE_HEADER, Data);
> -        gMmCorePrivate->CommunicationBuffer = 0;
> -        gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ?
> EFI_SUCCESS : EFI_NOT_FOUND;
> -      }
> +      gMmCorePrivate->BufferSize += OFFSET_OF
> (EFI_MM_COMMUNICATE_HEADER, Data);
> +      gMmCorePrivate->CommunicationBuffer = 0;
> +      gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ?
> EFI_SUCCESS : EFI_NOT_FOUND;
>      }
>    }
> 
> @@ -464,14 +411,9 @@ MmEntryPoint (
>    //
> 
>    //
> -  // If a legacy boot has occured, then make sure gMmCorePrivate is not
> accessed
> +  // Clear the InMm flag as we are going to leave MM
>    //
> -  if (!InLegacyBoot) {
> -    //
> -    // Clear the InMm flag as we are going to leave MM
> -    //
> -    gMmCorePrivate->InMm = FALSE;
> -  }
> +  gMmCorePrivate->InMm = FALSE;
> 
>    DEBUG ((DEBUG_INFO, "MmEntryPoint Done\n"));
>  }
> --
> 2.20.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


  reply	other threads:[~2019-03-05 13:52 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-05 13:32 [PATCH 00/10] StandaloneMmPkg, ArmPkg: cleanups and improvements Ard Biesheuvel
2019-03-05 13:32 ` [PATCH 01/10] StandaloneMmPkg: drop redundant definition of gEfiMmConfigurationProtocolGuid Ard Biesheuvel
2019-03-05 13:53   ` Yao, Jiewen
2019-03-05 13:32 ` [PATCH 02/10] StandaloneMmPkg: drop unused PCD PcdStandaloneMmEnable Ard Biesheuvel
2019-03-05 13:55   ` Yao, Jiewen
2019-03-06 15:16   ` Achin Gupta
2019-03-06 15:17     ` Ard Biesheuvel
2019-03-06 15:37       ` Achin Gupta
2019-03-07 10:09         ` Ard Biesheuvel
2019-03-07 11:14           ` Achin Gupta
2019-03-05 13:32 ` [PATCH 03/10] StandaloneMmPkg: switch to NULL DebugLib resolution Ard Biesheuvel
2019-03-05 14:22   ` Yao, Jiewen
2019-03-06 15:38   ` Achin Gupta
2019-03-05 13:32 ` [PATCH 04/10] StandaloneMmPkg: remove redundant StandaloneMmDriverEntryPoint driver Ard Biesheuvel
2019-03-05 14:22   ` Yao, Jiewen
2019-03-05 13:32 ` [PATCH 05/10] StandaloneMmPkg/StandaloneMmCoreEntryPoint: drop explicit SerialPortLib call Ard Biesheuvel
2019-03-05 13:52   ` Yao, Jiewen
2019-03-06 16:35   ` Achin Gupta
2019-03-06 16:41     ` Ard Biesheuvel
2019-03-06 16:55       ` Achin Gupta
2019-03-05 13:32 ` [PATCH 06/10] StandaloneMmPkg/Core: permit encapsulated firmware volumes Ard Biesheuvel
2019-03-05 15:50   ` Yao, Jiewen
2019-03-06 16:56   ` Achin Gupta
2019-03-05 13:32 ` [PATCH 07/10] StandaloneMmPkg/Core: dispatch all drivers at init time Ard Biesheuvel
2019-03-05 15:51   ` Yao, Jiewen
2019-03-06 16:56   ` Achin Gupta
2019-03-05 13:32 ` [PATCH 08/10] StandaloneMmPkg/Core: drop support for dispatching FVs into MM Ard Biesheuvel
2019-03-05 15:51   ` Yao, Jiewen
2019-03-06 16:58   ` Achin Gupta
2019-03-05 13:32 ` [PATCH 09/10] StandaloneMmPkg/Core: remove legacy boot support Ard Biesheuvel
2019-03-05 13:52   ` Yao, Jiewen [this message]
2019-03-06 16:59   ` Achin Gupta
2019-03-05 13:32 ` [PATCH 10/10] ArmPkg/MmCommunicationDxe: signal architected PI events into MM context Ard Biesheuvel
2019-03-05 15:55   ` Yao, Jiewen
2019-03-05 15:58     ` Ard Biesheuvel
2019-03-05 16:04       ` Yao, Jiewen
2019-03-05 16:07         ` Ard Biesheuvel
2019-03-05 16:19           ` Yao, Jiewen
2019-03-05 16:53             ` Felix Polyudov
2019-03-05 17:29               ` Ard Biesheuvel
2019-03-06 16:58   ` Achin Gupta
2019-03-11 11:54 ` [PATCH 00/10] StandaloneMmPkg, ArmPkg: cleanups and improvements Ard Biesheuvel
2019-03-11 11:59   ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=74D8A39837DF1E4DA445A8C0B3885C503F54CDCD@shsmsx102.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox