1/*++ 2 3Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4This program and the accompanying materials 5are licensed and made available under the terms and conditions of the BSD License 6which accompanies this distribution. The full text of the license may be found at 7http://opensource.org/licenses/bsd-license.php 8 9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12Module Name: 13 14 LegacyBiosThunk.h 15 16Abstract: 17 18 The EFI Legacy BIOS Thunk Protocol is used to abstract Thunk16 call. 19 20 Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow 21 well known naming conventions. 22 23 Thunk - A thunk is a transition from one processor mode to another. A Thunk 24 is a transition from native EFI mode to 16-bit mode. A reverse thunk 25 would be a transition from 16-bit mode to native EFI mode. 26 27 28 Note: Note: Note: Note: Note: Note: Note: 29 30 You most likely should not use this protocol! Find the EFI way to solve the 31 problem to make your code portable 32 33 Note: Note: Note: Note: Note: Note: Note: 34 35Revision History 36 37--*/ 38 39#ifndef _EFI_LEGACY_BIOS_THUNK_H_ 40#define _EFI_LEGACY_BIOS_THUNK_H_ 41 42#include EFI_PROTOCOL_DEFINITION (LegacyBios) 43 44#define EFI_LEGACY_BIOS_THUNK_PROTOCOL_GUID \ 45 { \ 46 0x4c51a7ba, 0x7195, 0x442d, {0x87, 0x92, 0xbe, 0xea, 0x6e, 0x2f, 0xf6, 0xec} \ 47 } 48 49EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_THUNK_PROTOCOL); 50 51typedef 52BOOLEAN 53(EFIAPI *EFI_LEGACY_BIOS_THUNK_INT86) ( 54 IN EFI_LEGACY_BIOS_THUNK_PROTOCOL * This, 55 IN UINT8 BiosInt, 56 IN OUT EFI_IA32_REGISTER_SET * Regs 57 ) 58/*++ 59 60 Routine Description: 61 Thunk to 16-bit real mode and execute a software interrupt with a vector 62 of BiosInt. Regs will contain the 16-bit register context on entry and 63 exit. 64 65 Arguments: 66 This - Protocol instance pointer. 67 BiosInt - Processor interrupt vector to invoke 68 Reg - Register contexted passed into (and returned) from thunk to 69 16-bit mode 70 71 Returns: 72 FALSE - Thunk completed, and there were no BIOS errors in the target code. 73 See Regs for status. 74 TRUE - There was a BIOS erro in the target code. 75 76--*/ 77; 78 79typedef 80BOOLEAN 81(EFIAPI *EFI_LEGACY_BIOS_THUNK_FARCALL86) ( 82 IN EFI_LEGACY_BIOS_THUNK_PROTOCOL * This, 83 IN UINT16 Segment, 84 IN UINT16 Offset, 85 IN EFI_IA32_REGISTER_SET * Regs, 86 IN VOID *Stack, 87 IN UINTN StackSize 88 ) 89/*++ 90 91 Routine Description: 92 Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the 93 16-bit register context on entry and exit. Arguments can be passed on 94 the Stack argument 95 96 Arguments: 97 This - Protocol instance pointer. 98 Segment - Segemnt of 16-bit mode call 99 Offset - Offset of 16-bit mdoe call 100 Reg - Register contexted passed into (and returned) from thunk to 101 16-bit mode 102 Stack - Caller allocated stack used to pass arguments 103 StackSize - Size of Stack in bytes 104 105 Returns: 106 FALSE - Thunk completed, and there were no BIOS errors in the target code. 107 See Regs for status. 108 TRUE - There was a BIOS erro in the target code. 109 110--*/ 111; 112 113struct _EFI_LEGACY_BIOS_THUNK_PROTOCOL { 114 EFI_LEGACY_BIOS_THUNK_INT86 Int86; 115 EFI_LEGACY_BIOS_THUNK_FARCALL86 FarCall86; 116}; 117 118extern EFI_GUID gEfiLegacyBiosThunkProtocolGuid; 119 120#endif 121