123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /** @file
- Emulator Thunk to abstract OS services from pure EFI code
- Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
- Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef __EMU_THUNK_PPI_H__
- #define __EMU_THUNK_PPI_H__
- #define EMU_THUNK_PPI_GUID \
- { 0xB958B78C, 0x1D3E, 0xEE40, { 0x8B, 0xF4, 0xF0, 0x63, 0x2D, 0x06, 0x39, 0x16 } }
- /*++
- Routine Description:
- This service is called from Index == 0 until it returns EFI_UNSUPPORTED.
- It allows discontinuous memory regions to be supported by the emulator.
- Arguments:
- Index - Which memory region to use
- MemoryBase - Return Base address of memory region
- MemorySize - Return size in bytes of the memory region
- Returns:
- EFI_SUCCESS - If memory region was mapped
- EFI_UNSUPPORTED - If Index is not supported
- **/
- typedef
- EFI_STATUS
- (EFIAPI *EMU_PEI_AUTOSCAN)(
- IN UINTN Index,
- OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
- OUT UINT64 *MemorySize
- );
- /*++
- Routine Description:
- Return the FD Size and base address. Since the FD is loaded from a
- file into host memory only the SEC will know it's address.
- Arguments:
- Index - Which FD, starts at zero.
- FdSize - Size of the FD in bytes
- FdBase - Start address of the FD. Assume it points to an FV Header
- FixUp - Difference between actual FD address and build address
- Returns:
- EFI_SUCCESS - Return the Base address and size of the FV
- EFI_UNSUPPORTED - Index does nto map to an FD in the system
- **/
- typedef
- EFI_STATUS
- (EFIAPI *EMU_PEI_FD_INFORMATION)(
- IN UINTN Index,
- IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
- IN OUT UINT64 *FdSize,
- IN OUT EFI_PHYSICAL_ADDRESS *FixUp
- );
- /*++
- Routine Description:
- Export of EMU_THUNK_PROTOCOL from the SEC.
- Returns:
- EFI_SUCCESS - Data returned
- **/
- typedef
- VOID *
- (EFIAPI *EMU_PEI_THUNK_INTERFACE)(
- VOID
- );
- /*++
- Routine Description:
- Loads and relocates a PE/COFF image into memory.
- Arguments:
- Pe32Data - The base address of the PE/COFF file that is to be loaded and relocated
- ImageAddress - The base address of the relocated PE/COFF image
- ImageSize - The size of the relocated PE/COFF image
- EntryPoint - The entry point of the relocated PE/COFF image
- Returns:
- EFI_SUCCESS - The file was loaded and relocated
- EFI_OUT_OF_RESOURCES - There was not enough memory to load and relocate the PE/COFF file
- **/
- typedef
- EFI_STATUS
- (EFIAPI *EMU_PEI_LOAD_FILE)(
- VOID *Pe32Data,
- EFI_PHYSICAL_ADDRESS *ImageAddress,
- UINT64 *ImageSize,
- EFI_PHYSICAL_ADDRESS *EntryPoint
- );
- typedef struct {
- EMU_PEI_AUTOSCAN MemoryAutoScan;
- EMU_PEI_FD_INFORMATION FirmwareDevices;
- EMU_PEI_THUNK_INTERFACE Thunk;
- UINTN PersistentMemorySize;
- UINT8 PersistentMemory[0];
- } EMU_THUNK_PPI;
- extern EFI_GUID gEmuThunkPpiGuid;
- #endif
|