]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/IA32/DispatchExecute.c
Fix boot script thunk issue that we need dispatch in PEI mode for Framework dispatch...
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / BootScriptSaveOnS3SaveStateThunk / IA32 / DispatchExecute.c
1 /** @file
2 Execute 32-bit code in Long Mode
3 Provide a thunk function to transition from long mode to compatibility mode to execute 32-bit code and then transit
4 back to long mode.
5
6 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16 #include "ScriptSave.h"
17 /**
18 Wrapper for a thunk to transition from long mode to compatibility mode to execute 32-bit code and then transit back to
19 long mode.
20
21 @param Function The 32bit code entry to be executed.
22 @param Param1 The first parameter to pass to 32bit code
23 @param Param2 The second parameter to pass to 32bit code
24 @retval EFI_SUCCESS Execute 32bit code successfully.
25 @retval other Something wrong when execute the 32bit code
26
27 **/
28 EFI_STATUS
29 Execute32BitCode (
30 IN UINT64 Function,
31 IN UINT64 Param1,
32 IN UINT64 Param2
33 )
34 {
35 DISPATCH_ENTRYPOINT_FUNC EntryFunc;
36 EFI_STATUS Status;
37
38 EntryFunc = (DISPATCH_ENTRYPOINT_FUNC) (UINTN) (Function);
39 Status = EntryFunc ((VOID *)(UINTN)Param1, (VOID *)(UINTN)Param2);
40
41 return Status;
42 }
43