public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Dandan Bi" <dandan.bi@intel.com>
To: devel@edk2.groups.io
Cc: Liming Gao <liming.gao@intel.com>
Subject: [patch 04/11] MdeModulePkg/Core: Remove PcdFrameworkCompatibilitySupport usage
Date: Mon, 29 Apr 2019 10:16:00 +0800	[thread overview]
Message-ID: <20190429021607.11304-5-dandan.bi@intel.com> (raw)
In-Reply-To: <20190429021607.11304-1-dandan.bi@intel.com>

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1464

Currently Framework compatibility is not needed and
PcdFrameworkCompatibilitySupport will be removed from edk2.
So remove the usage of this PCD firstly.

Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
 MdeModulePkg/Core/Dxe/DxeMain.inf   |   6 +-
 MdeModulePkg/Core/Dxe/Image/Image.c | 132 +---------------------------
 MdeModulePkg/Core/Dxe/Image/Image.h |  85 +-----------------
 MdeModulePkg/Core/Pei/FwVol/FwVol.c |  65 --------------
 MdeModulePkg/Core/Pei/PeiMain.inf   |   1 -
 5 files changed, 3 insertions(+), 286 deletions(-)

diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf b/MdeModulePkg/Core/Dxe/DxeMain.inf
index 8dee5bee0a..61161bee28 100644
--- a/MdeModulePkg/Core/Dxe/DxeMain.inf
+++ b/MdeModulePkg/Core/Dxe/DxeMain.inf
@@ -1,11 +1,11 @@
 ## @file
 #  This is core module in DXE phase.
 #
 #  It provides an implementation of DXE Core that is compliant with DXE CIS.
 #
-#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 ##
 
 [Defines]
@@ -130,11 +130,10 @@
 
 [Protocols]
   ## PRODUCES
   ## SOMETIMES_CONSUMES
   gEfiDecompressProtocolGuid
-  gEfiLoadPeImageProtocolGuid                   ## SOMETIMES_PRODUCES   # Produces when PcdFrameworkCompatibilitySupport is set
   gEfiSimpleFileSystemProtocolGuid              ## SOMETIMES_CONSUMES
   gEfiLoadFileProtocolGuid                      ## SOMETIMES_CONSUMES
   gEfiLoadFile2ProtocolGuid                     ## SOMETIMES_CONSUMES
   gEfiBusSpecificDriverOverrideProtocolGuid     ## SOMETIMES_CONSUMES
   gEfiDriverFamilyOverrideProtocolGuid          ## SOMETIMES_CONSUMES
@@ -171,13 +170,10 @@
   gEfiVariableWriteArchProtocolGuid             ## CONSUMES
   gEfiVariableArchProtocolGuid                  ## CONSUMES
   gEfiCapsuleArchProtocolGuid                   ## CONSUMES
   gEfiWatchdogTimerArchProtocolGuid             ## CONSUMES
 
-[FeaturePcd]
-  gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkCompatibilitySupport     ## CONSUMES
-
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressBootTimeCodePageNumber    ## SOMETIMES_CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressRuntimeCodePageNumber     ## SOMETIMES_CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable            ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdMaxEfiSystemTablePointerAddress         ## CONSUMES
diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c
index de5b8bed27..22a87ecf6d 100644
--- a/MdeModulePkg/Core/Dxe/Image/Image.c
+++ b/MdeModulePkg/Core/Dxe/Image/Image.c
@@ -1,9 +1,9 @@
 /** @file
   Core image handling services to load and unload PeImage.
 
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
 #include "DxeMain.h"
@@ -12,19 +12,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //
 // Module Globals
 //
 LOADED_IMAGE_PRIVATE_DATA  *mCurrentImage = NULL;
 
-LOAD_PE32_IMAGE_PRIVATE_DATA  mLoadPe32PrivateData = {
-  LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE,
-  NULL,
-  {
-    CoreLoadImageEx,
-    CoreUnloadImageEx
-  }
-};
-
 typedef struct {
   LIST_ENTRY                            Link;
   EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL  *Emulator;
   UINT16                                MachineType;
 } EMULATOR_ENTRY;
@@ -274,22 +265,10 @@ CoreInitializeImageServices (
              );
   ASSERT_EFI_ERROR(Status);
 
   InitializeListHead (&mAvailableEmulators);
 
-  if (FeaturePcdGet (PcdFrameworkCompatibilitySupport)) {
-    //
-    // Export DXE Core PE Loader functionality for backward compatibility.
-    //
-    Status = CoreInstallProtocolInterface (
-               &mLoadPe32PrivateData.Handle,
-               &gEfiLoadPeImageProtocolGuid,
-               EFI_NATIVE_INTERFACE,
-               &mLoadPe32PrivateData.Pe32Image
-               );
-  }
-
   ProtectUefiImage (&Image->Info, Image->LoadedImageDevicePath);
 
   return Status;
 }
 
@@ -1564,96 +1543,10 @@ CoreLoadImage (
   PERF_LOAD_IMAGE_END (Handle);
 
   return Status;
 }
 
-
-
-/**
-  Loads an EFI image into memory and returns a handle to the image with extended parameters.
-
-  @param  This                    Calling context
-  @param  ParentImageHandle       The caller's image handle.
-  @param  FilePath                The specific file path from which the image is
-                                  loaded.
-  @param  SourceBuffer            If not NULL, a pointer to the memory location
-                                  containing a copy of the image to be loaded.
-  @param  SourceSize              The size in bytes of SourceBuffer.
-  @param  DstBuffer               The buffer to store the image.
-  @param  NumberOfPages           For input, specifies the space size of the
-                                  image by caller if not NULL. For output,
-                                  specifies the actual space size needed.
-  @param  ImageHandle             Image handle for output.
-  @param  EntryPoint              Image entry point for output.
-  @param  Attribute               The bit mask of attributes to set for the load
-                                  PE image.
-
-  @retval EFI_SUCCESS             The image was loaded into memory.
-  @retval EFI_NOT_FOUND           The FilePath was not found.
-  @retval EFI_INVALID_PARAMETER   One of the parameters has an invalid value.
-  @retval EFI_UNSUPPORTED         The image type is not supported, or the device
-                                  path cannot be parsed to locate the proper
-                                  protocol for loading the file.
-  @retval EFI_OUT_OF_RESOURCES    Image was not loaded due to insufficient
-                                  resources.
-  @retval EFI_LOAD_ERROR          Image was not loaded because the image format was corrupt or not
-                                  understood.
-  @retval EFI_DEVICE_ERROR        Image was not loaded because the device returned a read error.
-  @retval EFI_ACCESS_DENIED       Image was not loaded because the platform policy prohibits the
-                                  image from being loaded. NULL is returned in *ImageHandle.
-  @retval EFI_SECURITY_VIOLATION  Image was loaded and an ImageHandle was created with a
-                                  valid EFI_LOADED_IMAGE_PROTOCOL. However, the current
-                                  platform policy specifies that the image should not be started.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreLoadImageEx (
-  IN  EFI_PE32_IMAGE_PROTOCOL          *This,
-  IN  EFI_HANDLE                       ParentImageHandle,
-  IN  EFI_DEVICE_PATH_PROTOCOL         *FilePath,
-  IN  VOID                             *SourceBuffer       OPTIONAL,
-  IN  UINTN                            SourceSize,
-  IN  EFI_PHYSICAL_ADDRESS             DstBuffer           OPTIONAL,
-  OUT UINTN                            *NumberOfPages      OPTIONAL,
-  OUT EFI_HANDLE                       *ImageHandle,
-  OUT EFI_PHYSICAL_ADDRESS             *EntryPoint         OPTIONAL,
-  IN  UINT32                           Attribute
-  )
-{
-  EFI_STATUS    Status;
-  EFI_HANDLE    Handle;
-
-  PERF_LOAD_IMAGE_BEGIN (NULL);
-
-  Status = CoreLoadImageCommon (
-           TRUE,
-           ParentImageHandle,
-           FilePath,
-           SourceBuffer,
-           SourceSize,
-           DstBuffer,
-           NumberOfPages,
-           ImageHandle,
-           EntryPoint,
-           Attribute
-           );
-
-  Handle = NULL;
-  if (!EFI_ERROR (Status)) {
-    //
-    // ImageHandle will be valid only Status is success.
-    //
-    Handle = *ImageHandle;
-  }
-
-  PERF_LOAD_IMAGE_END (Handle);
-
-  return Status;
-}
-
-
 /**
   Transfer control to a loaded image's entry point.
 
   @param  ImageHandle             Handle of image to be started.
   @param  ExitDataSize            Pointer of the size to ExitData
@@ -2010,28 +1903,5 @@ CoreUnloadImage (
   }
 
 Done:
   return Status;
 }
-
-
-
-/**
-  Unload the specified image.
-
-  @param  This                    Indicates the calling context.
-  @param  ImageHandle             The specified image handle.
-
-  @retval EFI_INVALID_PARAMETER   Image handle is NULL.
-  @retval EFI_UNSUPPORTED         Attempt to unload an unsupported image.
-  @retval EFI_SUCCESS             Image successfully unloaded.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreUnloadImageEx (
-  IN EFI_PE32_IMAGE_PROTOCOL  *This,
-  IN EFI_HANDLE                         ImageHandle
-  )
-{
-  return CoreUnloadImage (ImageHandle);
-}
diff --git a/MdeModulePkg/Core/Dxe/Image/Image.h b/MdeModulePkg/Core/Dxe/Image/Image.h
index 6020a27371..e9c44ab2a7 100644
--- a/MdeModulePkg/Core/Dxe/Image/Image.h
+++ b/MdeModulePkg/Core/Dxe/Image/Image.h
@@ -1,30 +1,17 @@
 /** @file
   Data structure and functions to load and unload PeImage.
 
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
 
 #ifndef _IMAGE_H_
 #define _IMAGE_H_
 
-#define LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE  SIGNATURE_32('l','p','e','i')
-
-typedef struct {
-  UINTN                       Signature;
-  /// Image handle
-  EFI_HANDLE                  Handle;
-  EFI_PE32_IMAGE_PROTOCOL     Pe32Image;
-} LOAD_PE32_IMAGE_PRIVATE_DATA;
-
-#define LOAD_PE32_IMAGE_PRIVATE_DATA_FROM_THIS(a) \
-          CR(a, LOAD_PE32_IMAGE_PRIVATE_DATA, Pe32Image, LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE)
-
-
 //
 // Private Data Types
 //
 #define IMAGE_FILE_HANDLE_SIGNATURE       SIGNATURE_32('i','m','g','f')
 typedef struct {
@@ -32,76 +19,6 @@ typedef struct {
   BOOLEAN             FreeBuffer;
   VOID                *Source;
   UINTN               SourceSize;
 } IMAGE_FILE_HANDLE;
 
-/**
-  Loads an EFI image into memory and returns a handle to the image with extended parameters.
-
-  @param  This                    Calling context
-  @param  ParentImageHandle       The caller's image handle.
-  @param  FilePath                The specific file path from which the image is
-                                  loaded.
-  @param  SourceBuffer            If not NULL, a pointer to the memory location
-                                  containing a copy of the image to be loaded.
-  @param  SourceSize              The size in bytes of SourceBuffer.
-  @param  DstBuffer               The buffer to store the image.
-  @param  NumberOfPages           For input, specifies the space size of the
-                                  image by caller if not NULL. For output,
-                                  specifies the actual space size needed.
-  @param  ImageHandle             Image handle for output.
-  @param  EntryPoint              Image entry point for output.
-  @param  Attribute               The bit mask of attributes to set for the load
-                                  PE image.
-
-  @retval EFI_SUCCESS             The image was loaded into memory.
-  @retval EFI_NOT_FOUND           The FilePath was not found.
-  @retval EFI_INVALID_PARAMETER   One of the parameters has an invalid value.
-  @retval EFI_UNSUPPORTED         The image type is not supported, or the device
-                                  path cannot be parsed to locate the proper
-                                  protocol for loading the file.
-  @retval EFI_OUT_OF_RESOURCES    Image was not loaded due to insufficient
-                                  resources.
-  @retval EFI_LOAD_ERROR          Image was not loaded because the image format was corrupt or not
-                                  understood.
-  @retval EFI_DEVICE_ERROR        Image was not loaded because the device returned a read error.
-  @retval EFI_ACCESS_DENIED       Image was not loaded because the platform policy prohibits the
-                                  image from being loaded. NULL is returned in *ImageHandle.
-  @retval EFI_SECURITY_VIOLATION  Image was loaded and an ImageHandle was created with a
-                                  valid EFI_LOADED_IMAGE_PROTOCOL. However, the current
-                                  platform policy specifies that the image should not be started.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreLoadImageEx (
-  IN  EFI_PE32_IMAGE_PROTOCOL          *This,
-  IN  EFI_HANDLE                       ParentImageHandle,
-  IN  EFI_DEVICE_PATH_PROTOCOL         *FilePath,
-  IN  VOID                             *SourceBuffer       OPTIONAL,
-  IN  UINTN                            SourceSize,
-  IN  EFI_PHYSICAL_ADDRESS             DstBuffer           OPTIONAL,
-  OUT UINTN                            *NumberOfPages      OPTIONAL,
-  OUT EFI_HANDLE                       *ImageHandle,
-  OUT EFI_PHYSICAL_ADDRESS             *EntryPoint         OPTIONAL,
-  IN  UINT32                           Attribute
-  );
-
-
-/**
-  Unload the specified image.
-
-  @param  This                    Indicates the calling context.
-  @param  ImageHandle             The specified image handle.
-
-  @retval EFI_INVALID_PARAMETER   Image handle is NULL.
-  @retval EFI_UNSUPPORTED         Attempt to unload an unsupported image.
-  @retval EFI_SUCCESS             Image successfully unloaded.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreUnloadImageEx (
-  IN EFI_PE32_IMAGE_PROTOCOL  *This,
-  IN EFI_HANDLE                         ImageHandle
-  );
 #endif
diff --git a/MdeModulePkg/Core/Pei/FwVol/FwVol.c b/MdeModulePkg/Core/Pei/FwVol/FwVol.c
index f817ba04e2..709db00694 100644
--- a/MdeModulePkg/Core/Pei/FwVol/FwVol.c
+++ b/MdeModulePkg/Core/Pei/FwVol/FwVol.c
@@ -1092,19 +1092,10 @@ PeiFfsFindNextFile (
 {
   PEI_CORE_FV_HANDLE      *CoreFvHandle;
 
   CoreFvHandle = FvHandleToCoreHandle (FvHandle);
 
-  //
-  // To make backward compatiblity, if can not find corresponding the handle of FV
-  // then treat FV as build-in FFS2/FFS3 format and memory mapped FV that FV handle is pointed
-  // to the address of first byte of FV.
-  //
-  if ((CoreFvHandle == NULL) && FeaturePcdGet (PcdFrameworkCompatibilitySupport)) {
-    return FindFileEx (FvHandle, NULL, SearchType, FileHandle, NULL);
-  }
-
   if ((CoreFvHandle == NULL) || CoreFvHandle->FvPpi == NULL) {
     return EFI_NOT_FOUND;
   }
 
   return CoreFvHandle->FvPpi->FindFileByType (CoreFvHandle->FvPpi, SearchType, FvHandle, FileHandle);
@@ -2109,66 +2100,10 @@ PEI_CORE_FV_HANDLE *
 FindNextCoreFvHandle (
   IN PEI_CORE_INSTANCE  *Private,
   IN UINTN              Instance
   )
 {
-  UINTN                    Index;
-  BOOLEAN                  Match;
-  EFI_HOB_FIRMWARE_VOLUME  *FvHob;
-
-  //
-  // Handle Framework FvHob and Install FvInfo Ppi for it.
-  //
-  if (FeaturePcdGet (PcdFrameworkCompatibilitySupport)) {
-    //
-    // Loop to search the wanted FirmwareVolume which supports FFS
-    //
-    FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetFirstHob (EFI_HOB_TYPE_FV);
-    while (FvHob != NULL) {
-      //
-      // Search whether FvHob has been installed into PeiCore's FV database.
-      // If found, no need install new FvInfoPpi for it.
-      //
-      for (Index = 0, Match = FALSE; Index < Private->FvCount; Index++) {
-        if ((EFI_PEI_FV_HANDLE)(UINTN)FvHob->BaseAddress == Private->Fv[Index].FvHeader) {
-          Match = TRUE;
-          break;
-        }
-      }
-
-      //
-      // Search whether FvHob has been cached into PeiCore's Unknown FV database.
-      // If found, no need install new FvInfoPpi for it.
-      //
-      if (!Match) {
-        for (Index = 0; Index < Private->UnknownFvInfoCount; Index ++) {
-          if ((UINTN)FvHob->BaseAddress == (UINTN)Private->UnknownFvInfo[Index].FvInfo) {
-            Match = TRUE;
-            break;
-          }
-        }
-      }
-
-      //
-      // If the Fv in FvHob has not been installed into PeiCore's FV database and has
-      // not been cached into PeiCore's Unknown FV database, install a new FvInfoPpi
-      // for it then PeiCore will dispatch it in callback of FvInfoPpi.
-      //
-      if (!Match) {
-        PeiServicesInstallFvInfoPpi (
-          &(((EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FvHob->BaseAddress)->FileSystemGuid),
-          (VOID *)(UINTN)FvHob->BaseAddress,
-          (UINT32)FvHob->Length,
-          NULL,
-          NULL
-          );
-      }
-
-      FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetNextHob (EFI_HOB_TYPE_FV, (VOID *)((UINTN)FvHob + FvHob->Header.HobLength));
-    }
-  }
-
   if (Instance >= Private->FvCount) {
     return NULL;
   }
 
   return &Private->Fv[Instance];
diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf
index c8a6d5b80b..7c482dacfc 100644
--- a/MdeModulePkg/Core/Pei/PeiMain.inf
+++ b/MdeModulePkg/Core/Pei/PeiMain.inf
@@ -100,11 +100,10 @@
   gEfiPeiCoreFvLocationPpiGuid                  ## SOMETIMES_CONSUMES
 
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeiStackSize                  ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst  ## CONSUMES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkCompatibilitySupport           ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressPeiCodePageNumber         ## SOMETIMES_CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressBootTimeCodePageNumber    ## SOMETIMES_CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressRuntimeCodePageNumber     ## SOMETIMES_CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable            ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdShadowPeimOnS3Boot                      ## CONSUMES
-- 
2.18.0.windows.1


  parent reply	other threads:[~2019-04-29  2:16 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-29  2:15 [patch 00/11] Remove PcdFrameworkCompatibilitySupport Dandan Bi
2019-04-29  2:15 ` [patch 01/11] BaseTools/VfrCompile: Remove framework VFR support Dandan Bi
2019-05-07  5:52   ` [edk2-devel] " Bob Feng
2019-05-07  6:00   ` Liming Gao
2019-04-29  2:15 ` [patch 02/11] FatPkg/FatPei: Remove PcdFrameworkCompatibilitySupport usage Dandan Bi
2019-05-05  3:25   ` [edk2-devel] " Ni, Ray
2019-04-29  2:15 ` [patch 03/11] IntelFrameworkModulePkg: " Dandan Bi
2019-05-07  5:59   ` Liming Gao
2019-04-29  2:16 ` Dandan Bi [this message]
2019-05-06  1:22   ` [edk2-devel] [patch 04/11] MdeModulePkg/Core: " Wu, Hao A
2019-05-06  2:48     ` Dandan Bi
2019-05-06  2:54       ` Wu, Hao A
2019-05-07  7:08         ` Dandan Bi
2019-05-08  8:23           ` Liming Gao
2019-04-29  2:16 ` [patch 05/11] MdeModulePkg/CdExpress: " Dandan Bi
2019-05-06  1:05   ` Wu, Hao A
2019-04-29  2:16 ` [patch 06/11] MdeModulePkg/Setup: " Dandan Bi
2019-05-07  6:13   ` Dong, Eric
2019-04-29  2:16 ` [patch 07/11] QuarkPlatformPkg: " Dandan Bi
2019-05-07  5:58   ` [edk2-devel] " Liming Gao
2019-04-29  2:16 ` [patch 08/11] SignedCapsulePkg: " Dandan Bi
2019-04-29  2:16 ` [patch 09/11] UefiCpuPkg: " Dandan Bi
2019-04-29 15:15   ` Laszlo Ersek
2019-04-29  2:16 ` [patch 10/11] Vlv2TbltDevicePkg: " Dandan Bi
2019-05-07  8:35   ` Sun, Zailiang
2019-04-29  2:16 ` [patch 11/11] MdeModulePkg: Remove PcdFrameworkCompatibilitySupport Dandan Bi
2019-05-06  1:25   ` Wu, Hao A
     [not found] ` <1599D055711F0B7C.4588@groups.io>
     [not found]   ` <3C0D5C461C9E904E8F62152F6274C0BB40BD01BF@SHSMSX104.ccr.corp.intel.com>
2019-05-07  6:02     ` [edk2-devel] [patch 08/11] SignedCapsulePkg: Remove PcdFrameworkCompatibilitySupport usage Yao, Jiewen

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=20190429021607.11304-5-dandan.bi@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