mirror of https://github.com/acidanthera/audk.git
103 lines
2.4 KiB
C
103 lines
2.4 KiB
C
/** @file
|
|
|
|
Copyright (c) 2007 - 2010, Intel Corporation. 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 _IPF_THUNK_H_
|
|
#define _IPF_THUNK_H_
|
|
|
|
#include "LegacyBiosInterface.h"
|
|
#include <IndustryStandard/Sal.h>
|
|
|
|
/**
|
|
Template of real mode code.
|
|
|
|
@param CodeStart Start address of code.
|
|
@param CodeEnd End address of code
|
|
@param ReverseThunkStart Start of reverse thunk.
|
|
@param IntThunk Low memory thunk.
|
|
|
|
**/
|
|
VOID
|
|
RealModeTemplate (
|
|
OUT UINTN *CodeStart,
|
|
OUT UINTN *CodeEnd,
|
|
OUT UINTN *ReverseThunkStart,
|
|
LOW_MEMORY_THUNK *IntThunk
|
|
);
|
|
|
|
/**
|
|
Register physical address of Esal Data Area
|
|
|
|
@param ReverseThunkCodeAddress Reverse Thunk Address
|
|
@param IntThunkAddress IntThunk Address
|
|
|
|
@retval EFI_SUCCESS ESAL data area set successfully.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EsalSetSalDataArea (
|
|
IN UINTN ReverseThunkCodeAddress,
|
|
IN UINTN IntThunkAddress
|
|
);
|
|
|
|
/**
|
|
Get address of reverse thunk.
|
|
|
|
@retval EFI_SAL_SUCCESS Address of reverse thunk returned successfully.
|
|
|
|
**/
|
|
SAL_RETURN_REGS
|
|
EsalGetReverseThunkAddress (
|
|
VOID
|
|
);
|
|
|
|
typedef struct {
|
|
UINT32 Eax; // 0
|
|
UINT32 Ecx; // 4
|
|
UINT32 Edx; // 8
|
|
UINT32 Ebx; // 12
|
|
UINT32 Esp; // 16
|
|
UINT32 Ebp; // 20
|
|
UINT32 Esi; // 24
|
|
UINT32 Edi; // 28
|
|
UINT32 Eflag; // 32
|
|
UINT32 Eip; // 36
|
|
UINT16 Cs; // 40
|
|
UINT16 Ds; // 42
|
|
UINT16 Es; // 44
|
|
UINT16 Fs; // 46
|
|
UINT16 Gs; // 48
|
|
UINT16 Ss; // 50
|
|
} IPF_DWORD_REGS;
|
|
|
|
/**
|
|
Entrypoint of IA32 code.
|
|
|
|
@param CallTypeData Data of call type
|
|
@param DwordRegister Register set of IA32 general registers
|
|
and segment registers
|
|
@param StackPointer Stack pointer.
|
|
@param StackSize Size of stack.
|
|
|
|
**/
|
|
VOID
|
|
EfiIaEntryPoint (
|
|
UINT64 CallTypeData,
|
|
IPF_DWORD_REGS *DwordRegister,
|
|
UINT64 StackPointer,
|
|
UINT64 StackSize
|
|
);
|
|
|
|
#endif
|