public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Kinney, Michael D" <michael.d.kinney@intel.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Cc: "Ni, Ruiyu" <ruiyu.ni@intel.com>,
	"Zimmer, Vincent" <vincent.zimmer@intel.com>,
	"Dong, Eric" <eric.dong@intel.com>, Andrew Fish <afish@apple.com>,
	"Carsey, Jaben" <jaben.carsey@intel.com>,
	"Richardson, Brian" <brian.richardson@intel.com>,
	"Gao, Liming" <liming.gao@intel.com>,
	"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH v3 4/7] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images
Date: Wed, 26 Sep 2018 23:34:39 +0000	[thread overview]
Message-ID: <E92EE9817A31E24EB0585FDF735412F5B8AF4B2D@ORSMSX113.amr.corp.intel.com> (raw)
In-Reply-To: <20180920230145.7565-5-ard.biesheuvel@linaro.org>

Hi Ard,

Similar to my PciBusDxe feedback, it would be better if
the image supported information was determined by calling
LoadImage() and checking for an EFI_UNSUPPORTED return
value.

This also has the advantage of reducing the number of 
components that need to be aware of any new protocols
associated with emulation with the best case being the
DXE Core and the modules that provide the emulators.

Thanks,

Mike

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-
> bounces@lists.01.org] On Behalf Of Ard Biesheuvel
> Sent: Thursday, September 20, 2018 4:02 PM
> To: edk2-devel@lists.01.org
> Cc: Ni, Ruiyu <ruiyu.ni@intel.com>; Zimmer, Vincent
> <vincent.zimmer@intel.com>; Dong, Eric
> <eric.dong@intel.com>; Andrew Fish <afish@apple.com>;
> Carsey, Jaben <jaben.carsey@intel.com>; Richardson,
> Brian <brian.richardson@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Zeng, Star
> <star.zeng@intel.com>
> Subject: [edk2] [PATCH v3 4/7]
> MdeModulePkg/UefiBootManagerLib: allow foreign
> Driver#### images
> 
> Allow PE/COFF images that must execute under emulation
> for Driver####
> options, by relaxing the machine type check to include
> support for
> machine types that is provided by an emulator.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel
> <ard.biesheuvel@linaro.org>
> ---
>  MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c
> | 51 +++++++++++++++++++-
>  MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> |  1 +
> 
> MdeModulePkg/Library/UefiBootManagerLib/UefiBootManager
> Lib.inf |  1 +
>  3 files changed, 52 insertions(+), 1 deletion(-)
> 
> diff --git
> a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.
> c
> b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.
> c
> index 7bf96646c690..f6fda8f2c3f7 100644
> ---
> a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.
> c
> +++
> b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.
> c
> @@ -1185,6 +1185,54 @@ EfiBootManagerFreeLoadOptions (
>    return EFI_SUCCESS;
>  }
> 
> +STATIC
> +BOOLEAN
> +BmIsImageTypeSupported (
> +  IN  UINT16    MachineType,
> +  IN  UINT16    SubSystem
> +  )
> +{
> +  EFI_STATUS                            Status;
> +  EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL  *Emu;
> +  UINTN                                 HandleCount;
> +  EFI_HANDLE                            *HandleBuffer;
> +  BOOLEAN                               ReturnValue;
> +  UINTN                                 Index;
> +
> +  if (EFI_IMAGE_MACHINE_TYPE_SUPPORTED (MachineType))
> {
> +    return TRUE;
> +  }
> +
> +  Status = gBS->LocateHandleBuffer (
> +                  ByProtocol,
> +
> &gEdkiiPeCoffImageEmulatorProtocolGuid,
> +                  NULL,
> +                  &HandleCount,
> +                  &HandleBuffer
> +                  );
> +  if (EFI_ERROR (Status)) {
> +    return FALSE;
> +  }
> +
> +  ReturnValue = FALSE;
> +  for (Index = 0; Index < HandleCount; Index++) {
> +    Status = gBS->HandleProtocol (
> +                    HandleBuffer[Index],
> +
> &gEdkiiPeCoffImageEmulatorProtocolGuid,
> +                    (VOID **)&Emu
> +                    );
> +    ASSERT_EFI_ERROR (Status);
> +
> +    if (Emu->IsImageSupported (Emu, MachineType,
> SubSystem, NULL)) {
> +      ReturnValue = TRUE;
> +      break;
> +    }
> +  }
> +
> +  FreePool (HandleBuffer);
> +  return ReturnValue;
> +}
> +
>  /**
>    Return whether the PE header of the load option is
> valid or not.
> 
> @@ -1235,7 +1283,8 @@ BmIsLoadOptionPeHeaderValid (
>        OptionalHeader = (EFI_IMAGE_OPTIONAL_HEADER32 *)
> &PeHeader->Pe32.OptionalHeader;
>        if ((OptionalHeader->Magic ==
> EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC ||
>             OptionalHeader->Magic ==
> EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) &&
> -          EFI_IMAGE_MACHINE_TYPE_SUPPORTED (PeHeader-
> >Pe32.FileHeader.Machine)
> +          BmIsImageTypeSupported (PeHeader-
> >Pe32.FileHeader.Machine,
> +                                  OptionalHeader-
> >Subsystem)
>            ) {
>          //
>          // Check the Subsystem:
> diff --git
> a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> index 978fbff966f6..5f64ef304b87 100644
> ---
> a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> +++
> b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> @@ -47,6 +47,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS
> OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>  #include <Protocol/VariableLock.h>
>  #include <Protocol/RamDisk.h>
>  #include <Protocol/DeferredImageLoad.h>
> +#include <Protocol/PeCoffImageEmulator.h>
> 
>  #include <Guid/MemoryTypeInformation.h>
>  #include <Guid/FileInfo.h>
> diff --git
> a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag
> erLib.inf
> b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag
> erLib.inf
> index 72c5ca1cd59e..09e2134acf8e 100644
> ---
> a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag
> erLib.inf
> +++
> b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag
> erLib.inf
> @@ -104,6 +104,7 @@
>    gEfiDevicePathProtocolGuid                    ##
> SOMETIMES_CONSUMES
>    gEfiBootLogoProtocolGuid                      ##
> SOMETIMES_CONSUMES
>    gEfiSimpleTextInputExProtocolGuid             ##
> SOMETIMES_CONSUMES
> +  gEdkiiPeCoffImageEmulatorProtocolGuid         ##
> SOMETIMES_CONSUMES
>    gEdkiiVariableLockProtocolGuid                ##
> SOMETIMES_CONSUMES
>    gEfiGraphicsOutputProtocolGuid                ##
> SOMETIMES_CONSUMES
>    gEfiUsbIoProtocolGuid                         ##
> SOMETIMES_CONSUMES
> --
> 2.17.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


  reply	other threads:[~2018-09-26 23:34 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20 23:01 [PATCH v3 0/7] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Ard Biesheuvel
2018-09-26  9:58   ` Zeng, Star
2018-09-26 10:13     ` Ard Biesheuvel
2018-09-26 17:32       ` Kinney, Michael D
2018-09-27  0:48         ` Zeng, Star
2018-09-27 10:58           ` Ard Biesheuvel
2018-09-27 15:36             ` Kinney, Michael D
2018-09-28  3:05               ` Zeng, Star
2018-09-28  3:08                 ` Zeng, Star
2018-09-28  6:34                   ` Ni, Ruiyu
2018-09-28  7:02                     ` Zeng, Star
2018-09-20 23:01 ` [PATCH v3 2/7] MdeModulePkg/DxeCore: invoke the emulator protocol for foreign images Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 3/7] MdeModulePkg/PciBusDxe: invoke PE/COFF emulator for foreign option ROMs Ard Biesheuvel
2018-09-26 18:26   ` Kinney, Michael D
2018-12-27 10:13     ` Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 4/7] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images Ard Biesheuvel
2018-09-26 23:34   ` Kinney, Michael D [this message]
2018-12-27 10:16     ` Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 5/7] MdeModulePkg/EbcDxe: implement the PE/COFF emulator protocol Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 6/7] MdePkg/UefiBaseType.h: treat EBC as a non-native machine type Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 7/7] MdeModulePkg/DxeCore: remove explicit EBC handling 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=E92EE9817A31E24EB0585FDF735412F5B8AF4B2D@ORSMSX113.amr.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