public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: "Zeng, Star" <star.zeng@intel.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Zimmer, Vincent" <vincent.zimmer@intel.com>,
	 "Richardson, Brian" <brian.richardson@intel.com>,
	 "Kinney, Michael D" <michael.d.kinney@intel.com>,
	Andrew Fish <afish@apple.com>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	Eric Dong <eric.dong@intel.com>,  Ruiyu Ni <ruiyu.ni@intel.com>,
	"Gao, Liming" <liming.gao@intel.com>,
	 "Carsey, Jaben" <jaben.carsey@intel.com>,
	"Shi, Steven" <steven.shi@intel.com>
Subject: Re: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol
Date: Wed, 26 Sep 2018 12:13:53 +0200	[thread overview]
Message-ID: <CAKv+Gu-wf-KFgOyJUHv1MaCExKRfdM==FU3gHgb_7fGyNBugTw@mail.gmail.com> (raw)
In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BBF0A34@shsmsx102.ccr.corp.intel.com>

On Wed, 26 Sep 2018 at 12:07, Zeng, Star <star.zeng@intel.com> wrote:
>
> A little late feedback. Just an idea.
>
> Do you think whether it can make the consumer simpler like below or not?
>
> Add a new API RegisterInterfaces in the protocol and add a wrapper driver PeCoffEmulatorDxe.
> The emulators can call RegisterInterfaces, and consumer will call other APIs simply, PeCoffEmulatorDxe will be a wrapper as manager.
>
> typedef
> EFI_STATUS
> (EFIAPI *EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_INTERFACES) (
>   IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL    *This,
>   IN EDKII_PECOFF_IMAGE_EMULATOR_IS_IMAGE_SUPPORTED    IsImageSupported,
>   IN EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_IMAGE        RegisterImage,
>   IN EDKII_PECOFF_IMAGE_EMULATOR_UNREGISTER_IMAGE      UnregisterImage
>   );
>
> typedef struct _EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL {
>   EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_INTERFACES    RegisterInterfaces;
>   EDKII_PECOFF_IMAGE_EMULATOR_IS_IMAGE_SUPPORTED    IsImageSupported;
>   EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_IMAGE        RegisterImage;
>   EDKII_PECOFF_IMAGE_EMULATOR_UNREGISTER_IMAGE      UnregisterImage;
> } EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL;
>

Hi Star,

Thanks for taking a look.

I tried to avoid introducing new drivers or library classes because it
will break existing platforms that incorporate EbcDxe. Do you think
this is not an issue?

> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
> Sent: Friday, September 21, 2018 7:02 AM
> To: edk2-devel@lists.01.org
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>; Zimmer, Vincent <vincent.zimmer@intel.com>; Richardson, Brian <brian.richardson@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Andrew Fish <afish@apple.com>; Leif Lindholm <leif.lindholm@linaro.org>; Zeng, Star <star.zeng@intel.com>; Dong, Eric <eric.dong@intel.com>; Ni, Ruiyu <ruiyu.ni@intel.com>; Gao, Liming <liming.gao@intel.com>; Carsey, Jaben <jaben.carsey@intel.com>; Shi, Steven <steven.shi@intel.com>
> Subject: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol
>
> Introduce a protocol that can be invoked by the image loading services to execute foreign architecture PE/COFF images via an emulator.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
>  MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h | 102 ++++++++++++++++++++
>  MdeModulePkg/MdeModulePkg.dec                       |   4 +
>  2 files changed, 106 insertions(+)
>
> diff --git a/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h b/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h
> new file mode 100644
> index 000000000000..27bad556209c
> --- /dev/null
> +++ b/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h
> @@ -0,0 +1,102 @@
> +/** @file
> +  Copyright (c) 2018, Linaro, Ltd. 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  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> +
> +**/
> +
> +#ifndef PECOFF_IMAGE_EMULATOR_PROTOCOL_GUID_H
> +#define PECOFF_IMAGE_EMULATOR_PROTOCOL_GUID_H
> +
> +#define EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL_GUID \
> +  { 0x96F46153, 0x97A7, 0x4793, { 0xAC, 0xC1, 0xFA, 0x19, 0xBF, 0x78,
> +0xEA, 0x97 } }
> +
> +typedef struct _EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL
> +EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL;
> +
> +/**
> +  Check whether the emulator supports executing a certain PE/COFF image
> +
> +  @param[in] This         This pointer for EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL
> +                          structure
> +  @param[in] MachineType  The machine type for which the image was built
> +  @param[in] ImageType    Whether the image is an application, a boot time
> +                          driver or a runtime driver.
> +  @param[in] DevicePath   Path to device where the image originated
> +                          (e.g., a PCI option ROM)
> +
> +  @retval TRUE            The image is supported by the emulator
> +  @retval FALSE           The image is not supported by the emulator.
> +**/
> +typedef
> +BOOLEAN
> +(EFIAPI *EDKII_PECOFF_IMAGE_EMULATOR_IS_IMAGE_SUPPORTED) (
> +  IN  EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL    *This,
> +  IN  UINT16                                  MachineType,
> +  IN  UINT16                                  ImageType,
> +  IN  EFI_DEVICE_PATH_PROTOCOL                *DevicePath   OPTIONAL
> +  );
> +
> +/**
> +  Register a supported PE/COFF image with the emulator. After this call
> +  completes successfully, the PE/COFF image may be started as usual,
> +and
> +  it is the responsibility of the emulator implementation that any
> +branch
> +  into the code section of the image (including returns from functions
> +called
> +  from the foreign code) is executed as if it were running on the
> +machine
> +  type it was built for.
> +
> +  @param[in]      This          This pointer for
> +                                EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL structure
> +  @param[in]      ImageBase     The base address in memory of the PE/COFF image
> +  @param[in]      ImageSize     The size in memory of the PE/COFF image
> +  @param[in,out]  EntryPoint    The entry point of the PE/COFF image. Passed by
> +                                reference so that the emulator may modify it.
> +
> +  @retval EFI_SUCCESS           The image was registered with the emulator and
> +                                can be started as usual.
> +  @retval other                 The image could not be registered.
> +
> +  If the PE/COFF machine type or image type are not supported by the
> +emulator,
> +  then ASSERT().
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_IMAGE) (
> +  IN      EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL    *This,
> +  IN      EFI_PHYSICAL_ADDRESS                    ImageBase,
> +  IN      UINT64                                  ImageSize,
> +  IN  OUT EFI_IMAGE_ENTRY_POINT                   *EntryPoint
> +  );
> +
> +/**
> +  Unregister a PE/COFF image that has been registered with the emulator.
> +  This should be done before the image is unloaded from memory.
> +
> +  @param[in] This         This pointer for EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL
> +                          structure
> +  @param[in] ImageBase    The base address in memory of the PE/COFF image
> +
> +  @retval EFI_SUCCESS     The image was unregistered with the emulator.
> +  @retval other           Image could not be unloaded.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_PECOFF_IMAGE_EMULATOR_UNREGISTER_IMAGE) (
> +  IN  EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL    *This,
> +  IN  EFI_PHYSICAL_ADDRESS                    ImageBase
> +  );
> +
> +typedef struct _EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL {
> +  EDKII_PECOFF_IMAGE_EMULATOR_IS_IMAGE_SUPPORTED    IsImageSupported;
> +  EDKII_PECOFF_IMAGE_EMULATOR_REGISTER_IMAGE        RegisterImage;
> +  EDKII_PECOFF_IMAGE_EMULATOR_UNREGISTER_IMAGE      UnregisterImage;
> +} EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL;
> +
> +extern EFI_GUID gEdkiiPeCoffImageEmulatorProtocolGuid;
> +
> +#endif
> diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index 6a6d9660edc2..be307329f901 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -617,6 +617,10 @@
>
>    ## Include/Protocol/AtaAtapiPolicy.h
>    gEdkiiAtaAtapiPolicyProtocolGuid = { 0xe59cd769, 0x5083, 0x4f26,{ 0x90, 0x94, 0x6c, 0x91, 0x9f, 0x91, 0x6c, 0x4e } }
> +
> +  ## Include/Protocol/PeCoffImageEmulator.h
> +  gEdkiiPeCoffImageEmulatorProtocolGuid = { 0x96f46153, 0x97a7, 0x4793,
> + { 0xac, 0xc1, 0xfa, 0x19, 0xbf, 0x78, 0xea, 0x97 } }
> +
>  #
>  # [Error.gEfiMdeModulePkgTokenSpaceGuid]
>  #   0x80000001 | Invalid value provided.
> --
> 2.17.1
>


  reply	other threads:[~2018-09-26 10:14 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 [this message]
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
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='CAKv+Gu-wf-KFgOyJUHv1MaCExKRfdM==FU3gHgb_7fGyNBugTw@mail.gmail.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