TianoCore EDK2 master
Loading...
Searching...
No Matches
DispatchExecute.c File Reference
#include <Uefi.h>
#include <Library/BaseLib.h>
#include <FspEas.h>

Go to the source code of this file.

Data Structures

union  IA32_GDT
 

Typedefs

typedef EFI_STATUS(EFIAPI * FSP_FUNCTION) (IN VOID *Param1, IN VOID *Param2)
 

Functions

UINT32 EFIAPI AsmExecute32BitCode (IN UINT64 Function, IN UINT64 Param1, IN UINT64 Param2, IN IA32_DESCRIPTOR *InternalGdtr)
 
EFI_STATUS Execute32BitCode (IN UINT64 Function, IN UINT64 Param1, IN UINT64 Param2)
 
EFI_STATUS Execute64BitCode (IN UINT64 Function, IN UINT64 Param1, IN UINT64 Param2)
 

Variables

GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT mGdtEntries []
 
GLOBAL_REMOVE_IF_UNREFERENCED IA32_DESCRIPTOR mGdt
 

Detailed Description

Execute 64-bit code in Long Mode. Provide a thunk function to transition from long mode to compatibility mode to execute 32-bit code and then transit back to long mode.

Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file DispatchExecute.c.

Typedef Documentation

◆ FSP_FUNCTION

typedef EFI_STATUS(EFIAPI * FSP_FUNCTION) (IN VOID *Param1, IN VOID *Param2)

FSP API functions.

Parameters
[in]Param1The first parameter to pass to 64bit code.
[in]Param2The second parameter to pass to 64bit code.
Returns
EFI_STATUS.

Definition at line 24 of file DispatchExecute.c.

Function Documentation

◆ AsmExecute32BitCode()

UINT32 EFIAPI AsmExecute32BitCode ( IN UINT64  Function,
IN UINT64  Param1,
IN UINT64  Param2,
IN IA32_DESCRIPTOR *  InternalGdtr 
)

Assembly function to transition from long mode to compatibility mode to execute 32-bit code and then transit back to long mode.

Parameters
[in]FunctionThe 32bit code entry to be executed.
[in]Param1The first parameter to pass to 32bit code
[in]Param2The second parameter to pass to 32bit code
[in]InternalGdtrThe GDT and GDT descriptor used by this library
Returns
status.

◆ Execute32BitCode()

EFI_STATUS Execute32BitCode ( IN UINT64  Function,
IN UINT64  Param1,
IN UINT64  Param2 
)

Wrapper for a thunk to transition from long mode to compatibility mode to execute 32-bit code and then transit back to long mode.

Parameters
[in]FunctionThe 32bit code entry to be executed.
[in]Param1The first parameter to pass to 32bit code.
[in]Param2The second parameter to pass to 32bit code.
Returns
EFI_STATUS.

Definition at line 108 of file DispatchExecute.c.

◆ Execute64BitCode()

EFI_STATUS Execute64BitCode ( IN UINT64  Function,
IN UINT64  Param1,
IN UINT64  Param2 
)

Wrapper to execute 64-bit code directly from long mode.

Parameters
[in]FunctionThe 64bit code entry to be executed.
[in]Param1The first parameter to pass to 64bit code.
[in]Param2The second parameter to pass to 64bit code.
Returns
EFI_STATUS.

Definition at line 143 of file DispatchExecute.c.

Variable Documentation

◆ mGdt

GLOBAL_REMOVE_IF_UNREFERENCED IA32_DESCRIPTOR mGdt
Initial value:
= {
sizeof (mGdtEntries) - 1,
(UINTN)mGdtEntries
}
UINT64 UINTN

Definition at line 72 of file DispatchExecute.c.

◆ mGdtEntries

Initial value:
= {
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
},
{
{ 0xFFFF, 0, 0, 0xB, 1, 0, 1, 0xF, 0, 0, 1, 1, 0 }
},
{
{ 0xFFFF, 0, 0, 0xB, 1, 0, 1, 0xF, 0, 1, 0, 1, 0 }
},
{
{ 0xFFFF, 0, 0, 0x3, 1, 0, 1, 0xF, 0, 0, 1, 1, 0 }
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
},
}

Definition at line 51 of file DispatchExecute.c.