/** @file | |
Copyright (c) 2019, Linaro, Ltd. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#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] 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 |