/** @file
Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.
Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _GASKET_H_
#define _GASKET_H_
//
// EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
//
UINTN
EFIAPI
GasketSecWriteStdErr (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
EFI_STATUS
EFIAPI
GasketSecConfigStdIn (
VOID
);
UINTN
EFIAPI
GasketSecWriteStdOut (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
UINTN
EFIAPI
GasketSecReadStdIn (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
BOOLEAN
EFIAPI
GasketSecPollStdIn (
VOID
);
VOID *
EFIAPI
GasketSecMalloc (
IN UINTN Size
);
VOID *
EFIAPI
GasketSecValloc (
IN UINTN Size
);
BOOLEAN
EFIAPI
GasketSecFree (
IN VOID *Ptr
);
RETURN_STATUS
EFIAPI
GasketSecPeCoffGetEntryPoint (
IN VOID *Pe32Data,
IN OUT VOID **EntryPoint
);
VOID
EFIAPI
GasketSecPeCoffRelocateImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
);
VOID
EFIAPI
GasketSecPeCoffUnloadImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
);
VOID
EFIAPI
GasketSecSetTimer (
IN UINT64 PeriodMs,
IN EMU_SET_TIMER_CALLBACK CallBack
);
VOID
EFIAPI
GasketSecEnableInterrupt (
VOID
);
VOID
EFIAPI
GasketSecDisableInterrupt (
VOID
);
UINT64
EFIAPI
GasketQueryPerformanceFrequency (
VOID
);
UINT64
EFIAPI
GasketQueryPerformanceCounter (
VOID
);
VOID
EFIAPI
GasketSecSleep (
IN UINT64 Nanoseconds
);
VOID
EFIAPI
GasketSecCpuSleep (
VOID
);
VOID
EFIAPI
GasketSecExit (
UINTN Status
);
VOID
EFIAPI
GasketSecGetTime (
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
);
VOID
EFIAPI
GasketSecSetTime (
IN EFI_TIME *Time
);
EFI_STATUS
EFIAPI
GasketSecGetNextProtocol (
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
);
// PPIs produced by SEC
EFI_STATUS
EFIAPI
GasketSecUnixPeiAutoScan (
IN UINTN Index,
OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
OUT UINT64 *MemorySize
);
VOID *
EFIAPI
GasketSecEmuThunkAddress (
VOID
);
EFI_STATUS
EFIAPI
GasketSecUnixUnixFwhAddress (
IN OUT UINT64 *FwhSize,
IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
);
//
// Reverse (UNIX to EFIAPI) gaskets
//
typedef
void
(EFIAPI *CALL_BACK)(
UINT64 Delta
);
UINTN
ReverseGasketUint64 (
UINTN CallBack,
UINT64 a
);
UINTN
ReverseGasketUint64Uint64 (
VOID *CallBack,
VOID *Context,
VOID *Key
);
//
// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
//
EFI_STATUS
EFIAPI
GasketX11Size (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
UINT32 Width,
UINT32 Height
);
EFI_STATUS
EFIAPI
GasketX11CheckKey (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
);
EFI_STATUS
EFIAPI
GasketX11GetKey (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_KEY_DATA *key
);
EFI_STATUS
EFIAPI
GasketX11KeySetState (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_KEY_TOGGLE_STATE *KeyToggleState
);
EFI_STATUS
EFIAPI
GasketX11RegisterKeyNotify (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,
IN VOID *Context
);
EFI_STATUS
EFIAPI
GasketX11Blt (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
);
EFI_STATUS
EFIAPI
GasketX11CheckPointer (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
);
EFI_STATUS
EFIAPI
GasketX11GetPointerState (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_SIMPLE_POINTER_STATE *state
);
EFI_STATUS
EFIAPI
GasketX11GraphicsWindowOpen (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketX11GraphicsWindowClose (
IN EMU_IO_THUNK_PROTOCOL *This
);
// Pthreads
UINTN
EFIAPI
GasketPthreadMutexLock (
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadMutexUnLock (
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadMutexTryLock (
IN VOID *Mutex
);
VOID *
EFIAPI
GasketPthreadMutexInit (
IN VOID
);
UINTN
EFIAPI
GasketPthreadMutexDestroy (
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadCreate (
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
IN VOID *Context
);
VOID
EFIAPI
GasketPthreadExit (
IN VOID *ValuePtr
);
UINTN
EFIAPI
GasketPthreadSelf (
VOID
);
EFI_STATUS
EFIAPI
GasketPthreadOpen (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPthreadClose (
IN EMU_IO_THUNK_PROTOCOL *This
);
// PosixFileSystem
EFI_STATUS
EFIAPI
GasketPosixOpenVolume (
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **Root
);
EFI_STATUS
EFIAPI
GasketPosixFileOpen (
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
);
EFI_STATUS
EFIAPI
GasketPosixFileCLose (
IN EFI_FILE_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPosixFileDelete (
IN EFI_FILE_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPosixFileRead (
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileWrite (
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileSetPossition (
IN EFI_FILE_PROTOCOL *This,
IN UINT64 Position
);
EFI_STATUS
EFIAPI
GasketPosixFileGetPossition (
IN EFI_FILE_PROTOCOL *This,
OUT UINT64 *Position
);
EFI_STATUS
EFIAPI
GasketPosixFileGetInfo (
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileSetInfo (
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN UINTN BufferSize,
IN VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileFlush (
IN EFI_FILE_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPosixFileSystmeThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPosixFileSystmeThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoReset (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoReadBlocks (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoWriteBlocks (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoFlushBlocks (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoCreateMapping (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
);
EFI_STATUS
EFIAPI
GasketBlockIoThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketBlockIoThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpCreateMapping (
IN EMU_SNP_PROTOCOL *This,
IN EFI_SIMPLE_NETWORK_MODE *Media
);
EFI_STATUS
EFIAPI
GasketSnpStart (
IN EMU_SNP_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpStop (
IN EMU_SNP_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpInitialize (
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpReset (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
EFI_STATUS
EFIAPI
GasketSnpShutdown (
IN EMU_SNP_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpReceiveFilters (
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpStationAddress (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpStatistics (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpMCastIpToMac (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
);
EFI_STATUS
EFIAPI
GasketSnpNvData (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketSnpGetStatus (
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpTransmit (
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpReceive (
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
);
#endif