> -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@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 > > Introduce a protocol that can be invoked by the image loading services > to execute foreign architecture PE/COFF images via an emulator. > > Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > Reviewed-by: Michael D Kinney <michael.d.kin...@intel.com> > --- > MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h | 107 > ++++++++++++++++++++ > MdeModulePkg/MdeModulePkg.dec | 4 + > 2 files changed, 111 insertions(+) > > 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.<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
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, 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] 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 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 > + ); > + > +#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 @@ > > ## 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 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#39016): https://edk2.groups.io/g/devel/message/39016 Mute This Topic: https://groups.io/mt/31133140/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-