From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: hao.a.wu@intel.com) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by groups.io with SMTP; Sun, 14 Apr 2019 18:23:15 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Apr 2019 18:23:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,351,1549958400"; d="scan'208";a="223523251" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga001.jf.intel.com with ESMTP; 14 Apr 2019 18:23:14 -0700 Received: from fmsmsx161.amr.corp.intel.com (10.18.125.9) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 14 Apr 2019 18:23:13 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by FMSMSX161.amr.corp.intel.com (10.18.125.9) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 14 Apr 2019 18:23:14 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.92]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.21]) with mapi id 14.03.0415.000; Mon, 15 Apr 2019 09:23:11 +0800 From: "Wu, Hao A" To: Ard Biesheuvel , "devel@edk2.groups.io" CC: "Kinney, Michael D" , Andrew Fish , Leif Lindholm , "Zeng, Star" , "Dong, Eric" , "Ni, Ray" , "Gao, Liming" , "Carsey, Jaben" , "Shi, Steven" , "Wang, Jian J" Subject: Re: [PATCH v6 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Thread-Topic: [PATCH v6 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Thread-Index: AQHU8vuoIEmQAUr/z0KuuVq+hJXZ4aY8bLqQ Date: Mon, 15 Apr 2019 01:23:11 +0000 Message-ID: References: <20190414195233.30045-1-ard.biesheuvel@linaro.org> <20190414195233.30045-2-ard.biesheuvel@linaro.org> In-Reply-To: <20190414195233.30045-2-ard.biesheuvel@linaro.org> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: hao.a.wu@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] > Sent: Monday, April 15, 2019 3:52 AM > To: devel@edk2.groups.io > Cc: Ard Biesheuvel; Kinney, Michael D; Andrew Fish; Leif Lindholm; Zeng, = Star; > Dong, Eric; Ni, Ray; Gao, Liming; Carsey, Jaben; Shi, Steven; Wang, Jian = J; Wu, > Hao A > Subject: [PATCH v6 1/7] MdeModulePkg: introduce PE/COFF image emulator > protocol >=20 > Introduce a protocol that can be invoked by the image loading services > to execute foreign architecture PE/COFF images via an emulator. >=20 > Signed-off-by: Ard Biesheuvel > Reviewed-by: Michael D Kinney > --- > MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h | 107 > ++++++++++++++++++++ > MdeModulePkg/MdeModulePkg.dec | 4 + > 2 files changed, 111 insertions(+) >=20 > diff --git a/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h > b/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h > new file mode 100644 > index 000000000000..1ca302440e4a > --- /dev/null > +++ b/MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h > @@ -0,0 +1,107 @@ > +/** @file > + Copyright (c) 2019, Linaro, Ltd. All rights reserved.
> + > + This program and the accompanying materials are licensed and made > available > + under the terms and conditions of the BSD License which accompanies th= is > + 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 Hello Ard, Sorry for the delayed response. Could you help to use: _PECOFF_IMAGE_EMULATOR_PROTOCOL_GUID_H_ here to please the Ecc checker when you push the series? Best Regards, Hao Wu > + > +#define EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL_GUID \ > + { 0x96F46153, 0x97A7, 0x4793, { 0xAC, 0xC1, 0xFA, 0x19, 0xBF, 0x78, 0x= EA, > 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] ImageType Whether the image is an application, a boot ti= me > + 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 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 branc= h > + into the code section of the image (including returns from functions c= alled > + from the foreign code) is executed as if it were running on the machin= e > + type it was built for. > + > + @param[in] This This pointer for > + EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL str= ucture > + @param[in] ImageBase The base address in memory of the PE/COF= F > 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. Pa= ssed > by > + reference so that the emulator may modif= y it. > + > + @retval EFI_SUCCESS The image was registered with the emulat= or 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 > + ); > + > +#define EDKII_PECOFF_IMAGE_EMULATOR_VERSION 0x1 > + > +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; > + > + // Protocol version implemented by the emulator > + UINT32 Version; > + // The machine type implemented by the emulator > + UINT16 MachineType; > +} EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL; > + > +extern EFI_GUID gEdkiiPeCoffImageEmulatorProtocolGuid; > + > +#endif > diff --git a/MdeModulePkg/MdeModulePkg.dec > b/MdeModulePkg/MdeModulePkg.dec > index a2130bc43991..c2b4e7f69367 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -629,6 +629,10 @@ >=20 > ## Include/Protocol/AtaAtapiPolicy.h > gEdkiiAtaAtapiPolicyProtocolGuid =3D { 0xe59cd769, 0x5083, 0x4f26,{ 0x= 90, > 0x94, 0x6c, 0x91, 0x9f, 0x91, 0x6c, 0x4e } } > + > + ## Include/Protocol/PeCoffImageEmulator.h > + gEdkiiPeCoffImageEmulatorProtocolGuid =3D { 0x96f46153, 0x97a7, 0x4793= , > { 0xac, 0xc1, 0xfa, 0x19, 0xbf, 0x78, 0xea, 0x97 } } > + > # > # [Error.gEfiMdeModulePkgTokenSpaceGuid] > # 0x80000001 | Invalid value provided. > -- > 2.17.1